GRASS Programmer's Manual  6.4.2(2012)
test_les.c
Go to the documentation of this file.
00001 
00002 /*****************************************************************************
00003 *
00004 * MODULE:       Grass PDE Numerical Library
00005 * AUTHOR(S):    Soeren Gebbert, Berlin (GER) Dec 2006
00006 *               soerengebbert <at> gmx <dot> de
00007 *               
00008 * PURPOSE:      Unit tests for les creation
00009 *
00010 * COPYRIGHT:    (C) 2000 by the GRASS Development Team
00011 *
00012 *               This program is free software under the GNU General Public
00013 *               License (>=v2). Read the file COPYING that comes with GRASS
00014 *               for details.
00015 *
00016 *****************************************************************************/
00017 
00018 #include <grass/gis.h>
00019 #include <grass/glocale.h>
00020 #include <grass/N_pde.h>
00021 #include "test_gpde_lib.h"
00022 
00023 
00024 /* prototypes */
00025 static int test_les(void);
00026 
00027 /* *************************************************************** */
00028 /* Perfrome the les creation tests ******************************* */
00029 /* *************************************************************** */
00030 int unit_test_les_creation(void)
00031 {
00032     int sum = 0;
00033 
00034     G_message(_("\n++ Running les creation unit tests ++"));
00035 
00036     sum += test_les();
00037 
00038     if (sum > 0)
00039         G_warning(_("\n-- les creation unit tests failure --"));
00040     else
00041         G_message(_("\n-- les creation unit tests finished successfully --"));
00042 
00043     return sum;
00044 }
00045 
00046 
00047 /* *************************************************************** */
00048 /* test the les creation of normal and sparse matirces *********** */
00049 /* *************************************************************** */
00050 int test_les(void)
00051 {
00052     N_spvector *spvector = NULL;
00053     N_les *les = NULL;
00054     N_les *sples = NULL;
00055     int i, j;
00056 
00057 
00058     les = N_alloc_les(TEST_N_NUM_ROWS, N_NORMAL_LES);
00059     N_print_les(les);
00060     N_free_les(les);
00061 
00062     les = N_alloc_les_A(TEST_N_NUM_ROWS, N_NORMAL_LES);
00063     N_print_les(les);
00064     N_free_les(les);
00065 
00066     les = N_alloc_les_Ax(TEST_N_NUM_ROWS, N_NORMAL_LES);
00067     N_print_les(les);
00068     N_free_les(les);
00069 
00070     les = N_alloc_les_Ax_b(TEST_N_NUM_ROWS, N_NORMAL_LES);
00071     N_print_les(les);
00072     N_free_les(les);
00073 
00074     les = N_alloc_nquad_les(6, 3, N_NORMAL_LES);
00075     N_print_les(les);
00076     N_free_les(les);
00077 
00078     les = N_alloc_nquad_les_A(6, 3, N_NORMAL_LES);
00079     N_print_les(les);
00080     N_free_les(les);
00081 
00082     les = N_alloc_nquad_les_Ax(6, 3, N_NORMAL_LES);
00083     N_print_les(les);
00084     N_free_les(les);
00085 
00086     les = N_alloc_nquad_les_Ax_b(6, 3, N_NORMAL_LES);
00087     N_print_les(les);
00088     N_free_les(les);
00089 
00090 
00091     les = N_alloc_les(TEST_N_NUM_ROWS, N_NORMAL_LES);
00092     sples = N_alloc_les(TEST_N_NUM_ROWS, N_SPARSE_LES);
00093 
00094 
00095     G_message(_("\t * testing les creation in parallel\n"));
00096 #pragma omp parallel for private(i, j) shared(les)
00097     for (i = 0; i < TEST_N_NUM_ROWS; i++) {
00098         for (j = 0; j < TEST_N_NUM_ROWS; j++) {
00099             if (i != j)
00100                 les->A[i][j] = 2e-2;
00101             les->A[i][i] = -1e2 - i;
00102         }
00103         les->x[i] = 273.15 + i;
00104         les->b[i] = 1e2 - i;
00105     }
00106 
00107 #pragma omp parallel for private(i, j) shared(sples, spvector)
00108     for (i = 0; i < TEST_N_NUM_ROWS; i++) {
00109         spvector = N_alloc_spvector(TEST_N_NUM_ROWS);
00110 
00111         for (j = 0; j < TEST_N_NUM_ROWS; j++)
00112             if (i != j)
00113                 spvector->index[j] = 2e-2;
00114 
00115         spvector->index[0] = i;
00116         spvector->values[0] = -1e2 - i;
00117 
00118         N_add_spvector_to_les(sples, spvector, i);
00119         sples->x[i] = 273.15 + i;
00120         sples->b[i] = 1e2 - i;
00121     }
00122 
00123     N_free_les(les);
00124     N_free_les(sples);
00125 
00126     G_message(_("\t * testing les creation in serial\n"));
00127 
00128     les = N_alloc_les(TEST_N_NUM_ROWS, N_NORMAL_LES);
00129     sples = N_alloc_les(TEST_N_NUM_ROWS, N_SPARSE_LES);
00130 
00131     for (i = 0; i < TEST_N_NUM_ROWS; i++) {
00132         for (j = 0; j < TEST_N_NUM_ROWS; j++) {
00133             if (i != j)
00134                 les->A[i][j] = 2e-2;
00135             les->A[i][i] = -1e2 - i;
00136         }
00137         les->x[i] = 273.15 + i;
00138         les->b[i] = 1e2 - i;
00139     }
00140 
00141     for (i = 0; i < TEST_N_NUM_ROWS; i++) {
00142         spvector = N_alloc_spvector(TEST_N_NUM_ROWS);
00143 
00144         for (j = 0; j < TEST_N_NUM_ROWS; j++)
00145             if (i != j)
00146                 spvector->index[j] = 2e-2;
00147 
00148         spvector->index[0] = i;
00149         spvector->values[0] = -1e2 - i;
00150 
00151         N_add_spvector_to_les(sples, spvector, i);
00152         sples->x[i] = 273.15 + i;
00153         sples->b[i] = 1e2 - i;
00154     }
00155 
00156     N_free_les(les);
00157     N_free_les(sples);
00158 
00159     return 0;
00160 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines