PRISMS-PF  v2.1
test_computeStress.h
Go to the documentation of this file.
1 // Unit test(s) for the method "computeStress"
2 template <int dim, typename T>
3 void unitTest<dim,T>::assignCIJSize(dealii::Table<2, double> &CIJ){
4  dealii::TableIndices<2> new_size;
5  new_size[0] = 2*dim-1+dim/3;
6  new_size[1] = 2*dim-1+dim/3;
7  CIJ.reinit(new_size);
8 }
9 
10 template <int dim, typename T>
11 void unitTest<dim,T>::assignCIJSize(dealii::VectorizedArray<double> CIJ[2*dim-1+dim/3][2*dim-1+dim/3]){
12  // The size of the vectorized array is already set
13 }
14 
15 template <int dim, typename T>
17 
18  bool pass = false;
19  std::cout << "Testing 'computeStress' in " << dim << " dimension(s)..." << std::endl;
20 
21  // Initialize CIJ
22  T CIJ;
23 
24  this->assignCIJSize(CIJ);
25 
26  if (dim == 1) {
27  CIJ[0][0] = 2.5;
28  }
29  else if (dim == 2) {
30  CIJ[0][0] = 6.8;
31  CIJ[1][0] = 2.5;
32  CIJ[2][0] = 4.0;
33  CIJ[0][1] = 1.2;
34  CIJ[1][1] = 10.1;
35  CIJ[2][1] = 3.7;
36  CIJ[0][2] = 9.3;
37  CIJ[1][2] = 2.7;
38  CIJ[2][2] = 8.8;
39  }
40  else if (dim == 3) {
41  CIJ[0][0] = 1.1;
42  CIJ[1][1] = 7.7;
43  CIJ[2][2] = 6.6;
44  CIJ[3][3] = 3.3;
45  CIJ[4][4] = 11.6;
46  CIJ[5][5] = 19.5;
47  CIJ[0][1]=CIJ[1][0] = 9.5;
48  CIJ[0][2]=CIJ[2][0] = 2.1;
49  CIJ[0][3]=CIJ[3][0] = 1.5;
50  CIJ[0][4]=CIJ[4][0] = 9.2;
51  CIJ[0][5]=CIJ[5][0] = 18.6;
52  CIJ[1][2]=CIJ[2][1] = 5.6;
53  CIJ[1][3]=CIJ[3][1] = 4.7;
54  CIJ[1][4]=CIJ[4][1] = 6.4;
55  CIJ[1][5]=CIJ[5][1] = 5.9;
56  CIJ[2][3]=CIJ[3][2] = 15.5;
57  CIJ[2][4]=CIJ[4][2] = 63.1;
58  CIJ[2][5]=CIJ[5][2] = 50.0;
59  CIJ[3][4]=CIJ[4][3] = 92.5;
60  CIJ[3][5]=CIJ[5][3] = 1.3;
61  CIJ[4][5]=CIJ[5][4] = 23.2;
62  }
63 
64  // Initialize ux and R, both vectorized arrays
65  dealii::VectorizedArray<double> R[dim][dim], ux[dim][dim];
66 
67  if (dim == 1) {
68  ux[0][0] = 1.0;
69  }
70  else if (dim == 2) {
71  ux[0][0] = 1.0;
72  ux[1][0] = 2.0;
73  ux[0][1] = 3.0;
74  ux[1][1] = 4.0;
75  }
76  else if (dim == 3) {
77  ux[0][0] = 1.0;
78  ux[1][0] = 2.0;
79  ux[2][0] = 3.0;
80  ux[0][1] = 4.0;
81  ux[1][1] = 5.0;
82  ux[2][1] = 6.0;
83  ux[0][2] = 7.0;
84  ux[1][2] = 8.0;
85  ux[2][2] = 9.0;
86  }
87  else {
88  std::cerr << "Error: Number of dimensions must be between 1 and 3" << std::endl;
89  }
90 
91  computeStress<dim>(CIJ,ux,R);
92 
93  if (dim == 1){
94  if (abs(R[0][0][0] - 2.5) < 1.0e-10) {pass = true;}
95  }
96  else if (dim == 2){
97  int pass_counter = 0;
98  if (abs(R[0][0][0] - 58.1) < 1.0e-10) {pass_counter++;}
99  if (abs(R[1][1][0] - 56.4) < 1.0e-10) {pass_counter++;}
100  if (abs(R[0][1][0] - 62.8) < 1.0e-10) {pass_counter++;}
101  if (abs(R[1][0][0] - 62.8) < 1.0e-10) {pass_counter++;}
102  if (pass_counter == 4){pass = true;}
103  }
104  else if (dim == 3){
105  int pass_counter = 0;
106  if (abs(R[0][0][0] - 292.1) < 1.0e-10) {pass_counter++;}
107  if (abs(R[1][1][0] - 263.6) < 1.0e-10) {pass_counter++;}
108  if (abs(R[2][2][0] - 1237.5) < 1.0e-10) {pass_counter++;}
109  if (abs(R[1][2][0] - 1143.5) < 1.0e-10) {pass_counter++;}
110  if (abs(R[2][1][0] - 1143.5) < 1.0e-10) {pass_counter++;}
111  if (abs(R[0][2][0] - 2159.3) < 1.0e-10) {pass_counter++;}
112  if (abs(R[2][0][0] - 2159.3) < 1.0e-10) {pass_counter++;}
113  if (abs(R[0][1][0] - 865.3) < 1.0e-10) {pass_counter++;}
114  if (abs(R[1][0][0] - 865.3) < 1.0e-10) {pass_counter++;}
115  if (pass_counter == 9){pass = true;}
116  }
117 
118  std::cout << "Test result for 'computeStress' in " << dim << " dimension(s): " << pass << std::endl;
119 
120  return pass;
121 }
122 
123 
124 
125 
126 
bool test_computeStress()
void assignCIJSize(dealii::VectorizedArray< double > CIJ[2 *dim-1+dim/3][2 *dim-1+dim/3])