GRASS Programmer's Manual  6.4.2(2012)
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
test_les.c
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * MODULE: Grass PDE Numerical Library
5 * AUTHOR(S): Soeren Gebbert, Berlin (GER) Dec 2006
6 * soerengebbert <at> gmx <dot> de
7 *
8 * PURPOSE: Unit tests for les creation
9 *
10 * COPYRIGHT: (C) 2000 by the GRASS Development Team
11 *
12 * This program is free software under the GNU General Public
13 * License (>=v2). Read the file COPYING that comes with GRASS
14 * for details.
15 *
16 *****************************************************************************/
17 
18 #include <grass/gis.h>
19 #include <grass/glocale.h>
20 #include <grass/N_pde.h>
21 #include "test_gpde_lib.h"
22 
23 
24 /* prototypes */
25 static int test_les(void);
26 
27 /* *************************************************************** */
28 /* Perfrome the les creation tests ******************************* */
29 /* *************************************************************** */
31 {
32  int sum = 0;
33 
34  G_message(_("\n++ Running les creation unit tests ++"));
35 
36  sum += test_les();
37 
38  if (sum > 0)
39  G_warning(_("\n-- les creation unit tests failure --"));
40  else
41  G_message(_("\n-- les creation unit tests finished successfully --"));
42 
43  return sum;
44 }
45 
46 
47 /* *************************************************************** */
48 /* test the les creation of normal and sparse matirces *********** */
49 /* *************************************************************** */
50 int test_les(void)
51 {
52  N_spvector *spvector = NULL;
53  N_les *les = NULL;
54  N_les *sples = NULL;
55  int i, j;
56 
57 
59  N_print_les(les);
60  N_free_les(les);
61 
63  N_print_les(les);
64  N_free_les(les);
65 
67  N_print_les(les);
68  N_free_les(les);
69 
71  N_print_les(les);
72  N_free_les(les);
73 
74  les = N_alloc_nquad_les(6, 3, N_NORMAL_LES);
75  N_print_les(les);
76  N_free_les(les);
77 
78  les = N_alloc_nquad_les_A(6, 3, N_NORMAL_LES);
79  N_print_les(les);
80  N_free_les(les);
81 
83  N_print_les(les);
84  N_free_les(les);
85 
87  N_print_les(les);
88  N_free_les(les);
89 
90 
93 
94 
95  G_message(_("\t * testing les creation in parallel\n"));
96 #pragma omp parallel for private(i, j) shared(les)
97  for (i = 0; i < TEST_N_NUM_ROWS; i++) {
98  for (j = 0; j < TEST_N_NUM_ROWS; j++) {
99  if (i != j)
100  les->A[i][j] = 2e-2;
101  les->A[i][i] = -1e2 - i;
102  }
103  les->x[i] = 273.15 + i;
104  les->b[i] = 1e2 - i;
105  }
106 
107 #pragma omp parallel for private(i, j) shared(sples, spvector)
108  for (i = 0; i < TEST_N_NUM_ROWS; i++) {
109  spvector = N_alloc_spvector(TEST_N_NUM_ROWS);
110 
111  for (j = 0; j < TEST_N_NUM_ROWS; j++)
112  if (i != j)
113  spvector->index[j] = 2e-2;
114 
115  spvector->index[0] = i;
116  spvector->values[0] = -1e2 - i;
117 
118  N_add_spvector_to_les(sples, spvector, i);
119  sples->x[i] = 273.15 + i;
120  sples->b[i] = 1e2 - i;
121  }
122 
123  N_free_les(les);
124  N_free_les(sples);
125 
126  G_message(_("\t * testing les creation in serial\n"));
127 
128  les = N_alloc_les(TEST_N_NUM_ROWS, N_NORMAL_LES);
129  sples = N_alloc_les(TEST_N_NUM_ROWS, N_SPARSE_LES);
130 
131  for (i = 0; i < TEST_N_NUM_ROWS; i++) {
132  for (j = 0; j < TEST_N_NUM_ROWS; j++) {
133  if (i != j)
134  les->A[i][j] = 2e-2;
135  les->A[i][i] = -1e2 - i;
136  }
137  les->x[i] = 273.15 + i;
138  les->b[i] = 1e2 - i;
139  }
140 
141  for (i = 0; i < TEST_N_NUM_ROWS; i++) {
142  spvector = N_alloc_spvector(TEST_N_NUM_ROWS);
143 
144  for (j = 0; j < TEST_N_NUM_ROWS; j++)
145  if (i != j)
146  spvector->index[j] = 2e-2;
147 
148  spvector->index[0] = i;
149  spvector->values[0] = -1e2 - i;
150 
151  N_add_spvector_to_les(sples, spvector, i);
152  sples->x[i] = 273.15 + i;
153  sples->b[i] = 1e2 - i;
154  }
155 
156  N_free_les(les);
157  N_free_les(sples);
158 
159  return 0;
160 }