test_les.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  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/gmath.h>
  18. #include <grass/N_pde.h>
  19. #include "test_gpde_lib.h"
  20. /* prototypes */
  21. static int test_les(void);
  22. /* *************************************************************** */
  23. /* Perfrome the les creation tests ******************************* */
  24. /* *************************************************************** */
  25. int unit_test_les_creation(void)
  26. {
  27. int sum = 0;
  28. G_message("\n++ Running les creation unit tests ++");
  29. sum += test_les();
  30. if (sum > 0)
  31. G_warning("\n-- les creation unit tests failure --");
  32. else
  33. G_message("\n-- les creation unit tests finished successfully --");
  34. return sum;
  35. }
  36. /* *************************************************************** */
  37. /* test the les creation of normal and sparse matirces *********** */
  38. /* *************************************************************** */
  39. int test_les(void)
  40. {
  41. G_math_spvector *spvector = NULL;
  42. N_les *les = NULL;
  43. N_les *sples = NULL;
  44. int i, j;
  45. les = N_alloc_les(TEST_N_NUM_ROWS, N_NORMAL_LES);
  46. N_print_les(les);
  47. N_free_les(les);
  48. les = N_alloc_les_A(TEST_N_NUM_ROWS, N_NORMAL_LES);
  49. N_print_les(les);
  50. N_free_les(les);
  51. les = N_alloc_les_Ax(TEST_N_NUM_ROWS, N_NORMAL_LES);
  52. N_print_les(les);
  53. N_free_les(les);
  54. les = N_alloc_les_Ax_b(TEST_N_NUM_ROWS, N_NORMAL_LES);
  55. N_print_les(les);
  56. N_free_les(les);
  57. les = N_alloc_nquad_les(6, 3, N_NORMAL_LES);
  58. N_print_les(les);
  59. N_free_les(les);
  60. les = N_alloc_nquad_les_A(6, 3, N_NORMAL_LES);
  61. N_print_les(les);
  62. N_free_les(les);
  63. les = N_alloc_nquad_les_Ax(6, 3, N_NORMAL_LES);
  64. N_print_les(les);
  65. N_free_les(les);
  66. les = N_alloc_nquad_les_Ax_b(6, 3, N_NORMAL_LES);
  67. N_print_les(les);
  68. N_free_les(les);
  69. les = N_alloc_les(TEST_N_NUM_ROWS, N_NORMAL_LES);
  70. sples = N_alloc_les(TEST_N_NUM_ROWS, N_SPARSE_LES);
  71. G_message("\t * testing les creation in parallel\n");
  72. #pragma omp parallel for private(i, j) shared(les)
  73. for (i = 0; i < TEST_N_NUM_ROWS; i++) {
  74. for (j = 0; j < TEST_N_NUM_ROWS; j++) {
  75. if (i != j)
  76. les->A[i][j] = 2e-2;
  77. les->A[i][i] = -1e2 - i;
  78. }
  79. les->x[i] = 273.15 + i;
  80. les->b[i] = 1e2 - i;
  81. }
  82. #pragma omp parallel for private(i, j) shared(sples, spvector)
  83. for (i = 0; i < TEST_N_NUM_ROWS; i++) {
  84. spvector = G_math_alloc_spvector(TEST_N_NUM_ROWS);
  85. for (j = 0; j < TEST_N_NUM_ROWS; j++)
  86. if (i != j)
  87. spvector->index[j] = 2e-2;
  88. spvector->index[0] = i;
  89. spvector->values[0] = -1e2 - i;
  90. G_math_add_spvector(sples->Asp, spvector, i);
  91. sples->x[i] = 273.15 + i;
  92. sples->b[i] = 1e2 - i;
  93. }
  94. N_free_les(les);
  95. N_free_les(sples);
  96. G_message("\t * testing les creation in serial\n");
  97. les = N_alloc_les(TEST_N_NUM_ROWS, N_NORMAL_LES);
  98. sples = N_alloc_les(TEST_N_NUM_ROWS, N_SPARSE_LES);
  99. for (i = 0; i < TEST_N_NUM_ROWS; i++) {
  100. for (j = 0; j < TEST_N_NUM_ROWS; j++) {
  101. if (i != j)
  102. les->A[i][j] = 2e-2;
  103. les->A[i][i] = -1e2 - i;
  104. }
  105. les->x[i] = 273.15 + i;
  106. les->b[i] = 1e2 - i;
  107. }
  108. for (i = 0; i < TEST_N_NUM_ROWS; i++) {
  109. spvector = G_math_alloc_spvector(TEST_N_NUM_ROWS);
  110. for (j = 0; j < TEST_N_NUM_ROWS; j++)
  111. if (i != j)
  112. spvector->index[j] = 2e-2;
  113. spvector->index[0] = i;
  114. spvector->values[0] = -1e2 - i;
  115. G_math_add_spvector(sples->Asp, spvector, i);
  116. sples->x[i] = 273.15 + i;
  117. sples->b[i] = 1e2 - i;
  118. }
  119. N_free_les(les);
  120. N_free_les(sples);
  121. return 0;
  122. }