GRASS Programmer's Manual
6.4.2(2012)
|
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 }