test_les.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /*****************************************************************************
  2. *
  3. * MODULE: Grass PDE Numerical Library
  4. * AUTHOR(S): Soeren Gebbert, Berlin (GER) Dec 2006
  5. * soerengebbert <at> gmx <dot> de
  6. *
  7. * PURPOSE: Unit tests for les creation
  8. *
  9. * COPYRIGHT: (C) 2000 by the GRASS Development Team
  10. *
  11. * This program is free software under the GNU General Public
  12. * License (>=v2). Read the file COPYING that comes with GRASS
  13. * for details.
  14. *
  15. *****************************************************************************/
  16. #include <grass/gis.h>
  17. #include <grass/glocale.h>
  18. #include <grass/gmath.h>
  19. #include <grass/N_pde.h>
  20. #include "test_gpde_lib.h"
  21. /* prototypes */
  22. static int test_les(void);
  23. /* *************************************************************** */
  24. /* Perfrome the les creation tests ******************************* */
  25. /* *************************************************************** */
  26. int unit_test_les_creation(void)
  27. {
  28. int sum = 0;
  29. G_message(_("\n++ Running les creation unit tests ++"));
  30. sum += test_les();
  31. if (sum > 0)
  32. G_warning(_("\n-- les creation unit tests failure --"));
  33. else
  34. G_message(_("\n-- les creation unit tests finished successfully --"));
  35. return sum;
  36. }
  37. /* *************************************************************** */
  38. /* test the les creation of normal and sparse matirces *********** */
  39. /* *************************************************************** */
  40. int test_les(void)
  41. {
  42. G_math_spvector *spvector = NULL;
  43. N_les *les = NULL;
  44. N_les *sples = NULL;
  45. int i, j;
  46. les = N_alloc_les(TEST_N_NUM_ROWS, N_NORMAL_LES);
  47. N_print_les(les);
  48. N_free_les(les);
  49. les = N_alloc_les_A(TEST_N_NUM_ROWS, N_NORMAL_LES);
  50. N_print_les(les);
  51. N_free_les(les);
  52. les = N_alloc_les_Ax(TEST_N_NUM_ROWS, N_NORMAL_LES);
  53. N_print_les(les);
  54. N_free_les(les);
  55. les = N_alloc_les_Ax_b(TEST_N_NUM_ROWS, N_NORMAL_LES);
  56. N_print_les(les);
  57. N_free_les(les);
  58. les = N_alloc_nquad_les(6, 3, N_NORMAL_LES);
  59. N_print_les(les);
  60. N_free_les(les);
  61. les = N_alloc_nquad_les_A(6, 3, N_NORMAL_LES);
  62. N_print_les(les);
  63. N_free_les(les);
  64. les = N_alloc_nquad_les_Ax(6, 3, N_NORMAL_LES);
  65. N_print_les(les);
  66. N_free_les(les);
  67. les = N_alloc_nquad_les_Ax_b(6, 3, N_NORMAL_LES);
  68. N_print_les(les);
  69. N_free_les(les);
  70. les = N_alloc_les(TEST_N_NUM_ROWS, N_NORMAL_LES);
  71. sples = N_alloc_les(TEST_N_NUM_ROWS, N_SPARSE_LES);
  72. G_message(_("\t * testing les creation in parallel\n"));
  73. #pragma omp parallel for private(i, j) shared(les)
  74. for (i = 0; i < TEST_N_NUM_ROWS; i++) {
  75. for (j = 0; j < TEST_N_NUM_ROWS; j++) {
  76. if (i != j)
  77. les->A[i][j] = 2e-2;
  78. les->A[i][i] = -1e2 - i;
  79. }
  80. les->x[i] = 273.15 + i;
  81. les->b[i] = 1e2 - i;
  82. }
  83. #pragma omp parallel for private(i, j) shared(sples, spvector)
  84. for (i = 0; i < TEST_N_NUM_ROWS; i++) {
  85. spvector = G_math_alloc_spvector(TEST_N_NUM_ROWS);
  86. for (j = 0; j < TEST_N_NUM_ROWS; j++)
  87. if (i != j)
  88. spvector->index[j] = 2e-2;
  89. spvector->index[0] = i;
  90. spvector->values[0] = -1e2 - i;
  91. G_math_add_spvector(sples->Asp, spvector, i);
  92. sples->x[i] = 273.15 + i;
  93. sples->b[i] = 1e2 - i;
  94. }
  95. N_free_les(les);
  96. N_free_les(sples);
  97. G_message(_("\t * testing les creation in serial\n"));
  98. les = N_alloc_les(TEST_N_NUM_ROWS, N_NORMAL_LES);
  99. sples = N_alloc_les(TEST_N_NUM_ROWS, N_SPARSE_LES);
  100. for (i = 0; i < TEST_N_NUM_ROWS; i++) {
  101. for (j = 0; j < TEST_N_NUM_ROWS; j++) {
  102. if (i != j)
  103. les->A[i][j] = 2e-2;
  104. les->A[i][i] = -1e2 - i;
  105. }
  106. les->x[i] = 273.15 + i;
  107. les->b[i] = 1e2 - i;
  108. }
  109. for (i = 0; i < TEST_N_NUM_ROWS; i++) {
  110. spvector = G_math_alloc_spvector(TEST_N_NUM_ROWS);
  111. for (j = 0; j < TEST_N_NUM_ROWS; j++)
  112. if (i != j)
  113. spvector->index[j] = 2e-2;
  114. spvector->index[0] = i;
  115. spvector->values[0] = -1e2 - i;
  116. G_math_add_spvector(sples->Asp, spvector, i);
  117. sples->x[i] = 273.15 + i;
  118. sples->b[i] = 1e2 - i;
  119. }
  120. N_free_les(les);
  121. N_free_les(sples);
  122. return 0;
  123. }