@@ -27,59 +27,59 @@ struct mesh_interp_params {
2727};
2828
2929
30- double feenox_mesh_interpolate_function_node (function_t * function , const double * x ) {
30+ double feenox_mesh_interpolate_function_node (struct function_t * this , const double * x ) {
3131
32- if (function -> vector_value == NULL ) {
32+ if (this -> vector_value == NULL ) {
3333 return 0 ;
3434 }
3535
3636 // find the nearest node
37- node_t * nearest_node = feenox_mesh_find_nearest_node (function -> mesh , x );
37+ node_t * nearest_node = feenox_mesh_find_nearest_node (this -> mesh , x );
3838
3939 // check is it is close enough to a node
40- switch (function -> mesh -> dim ) {
40+ switch (this -> mesh -> dim ) {
4141 case 1 :
42- if (gsl_pow_2 (fabs (x [0 ]- nearest_node -> x [0 ])) < gsl_pow_2 (function -> multidim_threshold )) {
43- return feenox_vector_get (function -> vector_value , nearest_node -> index_mesh );
42+ if (gsl_pow_2 (fabs (x [0 ]- nearest_node -> x [0 ])) < gsl_pow_2 (this -> multidim_threshold )) {
43+ return feenox_vector_get (this -> vector_value , nearest_node -> index_mesh );
4444 }
4545 break ;
4646 case 2 :
47- if (feenox_mesh_subtract_squared_module2d (x , nearest_node -> x ) < gsl_pow_2 (function -> multidim_threshold )) {
48- return feenox_vector_get (function -> vector_value , nearest_node -> index_mesh );
47+ if (feenox_mesh_subtract_squared_module2d (x , nearest_node -> x ) < gsl_pow_2 (this -> multidim_threshold )) {
48+ return feenox_vector_get (this -> vector_value , nearest_node -> index_mesh );
4949 }
5050 break ;
5151 case 3 :
52- if (feenox_mesh_subtract_squared_module (x , nearest_node -> x ) < gsl_pow_2 (function -> multidim_threshold )) {
53- return feenox_vector_get (function -> vector_value , nearest_node -> index_mesh );
52+ if (feenox_mesh_subtract_squared_module (x , nearest_node -> x ) < gsl_pow_2 (this -> multidim_threshold )) {
53+ return feenox_vector_get (this -> vector_value , nearest_node -> index_mesh );
5454 }
5555 break ;
5656 }
5757
5858 element_t * element = NULL ;
5959 double xi [3 ] = {0 , 0 , 0 }; // vector with the local coordinates within the element
60- if ((element = feenox_mesh_find_element (function -> mesh , nearest_node , x )) != NULL ) {
60+ if ((element = feenox_mesh_find_element (this -> mesh , nearest_node , x )) != NULL ) {
6161 if (feenox_mesh_interp_solve_for_r (element , x , xi ) != FEENOX_OK ) {
6262 return 0 ;
6363 }
6464 } else {
6565 // should we return the nearest node value?
66- return feenox_vector_get (function -> vector_value , nearest_node -> index_mesh );
66+ return feenox_vector_get (this -> vector_value , nearest_node -> index_mesh );
6767 }
6868
6969 // compute the interpolation
7070 double y = 0 ;
71- if (function -> spatial_derivative_of == NULL ) {
71+ if (this -> spatial_derivative_of == NULL ) {
7272
7373 for (int j = 0 ; j < element -> type -> nodes ; j ++ ) {
74- y += element -> type -> h (j , xi ) * feenox_vector_get (function -> vector_value , element -> node [j ]-> index_mesh );
74+ y += element -> type -> h (j , xi ) * feenox_vector_get (this -> vector_value , element -> node [j ]-> index_mesh );
7575 }
7676
7777 } else {
7878
7979 gsl_matrix * B = feenox_fem_compute_B (element , xi );
8080 for (int j = 0 ; j < element -> type -> nodes ; j ++ ) {
81- y += gsl_matrix_get (B , function -> spatial_derivative_with_respect_to , j )
82- * feenox_vector_get (function -> spatial_derivative_of -> vector_value , element -> node [j ]-> index_mesh );
81+ y += gsl_matrix_get (B , this -> spatial_derivative_with_respect_to , j )
82+ * feenox_vector_get (this -> spatial_derivative_of -> vector_value , element -> node [j ]-> index_mesh );
8383 }
8484 gsl_matrix_free (B );
8585
@@ -90,7 +90,7 @@ double feenox_mesh_interpolate_function_node(function_t *function, const double
9090}
9191
9292
93- int feenox_mesh_interp_solve_for_r (element_t * element , const double * x , double * r ) {
93+ int feenox_mesh_interp_solve_for_r (element_t * this , const double * x , double * r ) {
9494
9595 int gsl_status ;
9696 int m ;
@@ -102,29 +102,29 @@ int feenox_mesh_interp_solve_for_r(element_t *element, const double *x, double *
102102 gsl_multiroot_function_fdf fun = {& feenox_mesh_interp_residual ,
103103 & feenox_mesh_interp_jacob ,
104104 & feenox_mesh_interp_residual_jacob ,
105- element -> type -> dim , & p };
105+ this -> type -> dim , & p };
106106
107- if (element -> type -> id == ELEMENT_TYPE_TETRAHEDRON4 || element -> type -> id == ELEMENT_TYPE_TETRAHEDRON10 ) {
107+ if (this -> type -> id == ELEMENT_TYPE_TETRAHEDRON4 || this -> type -> id == ELEMENT_TYPE_TETRAHEDRON10 ) {
108108
109109 // the tetrahedron is an easy one (it's linear)
110110 // usually using this for tet10 is good enough
111111 // TODO: check error
112- feenox_mesh_compute_r_tetrahedron (element , x , r );
112+ feenox_mesh_compute_r_tetrahedron (this , x , r );
113113
114114 } else {
115115
116- p .element = element ;
116+ p .element = this ;
117117 p .x = x ;
118118
119- test = gsl_vector_calloc (element -> type -> dim ); // guess initial cero
119+ test = gsl_vector_calloc (this -> type -> dim ); // guess initial cero
120120
121121// T = gsl_multiroot_fsolver_hybrids;
122122// T = gsl_multiroot_fsolver_hybrid;
123123// T = gsl_multiroot_fsolver_dnewton;
124124// T = gsl_multiroot_fsolver_broyden;
125125 T = gsl_multiroot_fdfsolver_gnewton ;
126126
127- s = gsl_multiroot_fdfsolver_alloc (T , element -> type -> dim );
127+ s = gsl_multiroot_fdfsolver_alloc (T , this -> type -> dim );
128128 gsl_multiroot_fdfsolver_set (s , & fun , test );
129129
130130 do {
@@ -135,7 +135,7 @@ int feenox_mesh_interp_solve_for_r(element_t *element, const double *x, double *
135135 gsl_status = gsl_multiroot_test_residual (s -> f , feenox_var_value (feenox .mesh .vars .eps ));
136136 } while (gsl_status == -2 /* GSL_CONTINUE */ && iter < 10 );
137137
138- for (m = 0 ; m < element -> type -> dim ; m ++ ) {
138+ for (m = 0 ; m < this -> type -> dim ; m ++ ) {
139139 r [m ] = gsl_vector_get (gsl_multiroot_fdfsolver_root (s ), m );
140140 }
141141
@@ -210,9 +210,9 @@ int feenox_mesh_interp_residual_jacob(const gsl_vector *test, void *params, gsl_
210210
211211
212212
213- int feenox_mesh_compute_r_tetrahedron (element_t * element , const double * x , double * r ) {
213+ int feenox_mesh_compute_r_tetrahedron (element_t * this , const double * x , double * r ) {
214214
215- if (element -> type -> id == ELEMENT_TYPE_TETRAHEDRON4 || element -> type -> id == ELEMENT_TYPE_TETRAHEDRON10 ) {
215+ if (this -> type -> id == ELEMENT_TYPE_TETRAHEDRON4 || this -> type -> id == ELEMENT_TYPE_TETRAHEDRON10 ) {
216216
217217 // reference: eq (9.11) from AFEM.Ch09
218218
@@ -222,9 +222,9 @@ int feenox_mesh_compute_r_tetrahedron(element_t *element, const double *x, doubl
222222 double dz [5 ][5 ];
223223 for (int j = 0 ; j < 4 ; j ++ ) {
224224 for (int j_prime = 0 ; j_prime < 4 ; j_prime ++ ) {
225- dx [j + 1 ][j_prime + 1 ] = element -> node [j ]-> x [0 ] - element -> node [j_prime ]-> x [0 ];
226- dy [j + 1 ][j_prime + 1 ] = element -> node [j ]-> x [1 ] - element -> node [j_prime ]-> x [1 ];
227- dz [j + 1 ][j_prime + 1 ] = element -> node [j ]-> x [2 ] - element -> node [j_prime ]-> x [2 ];
225+ dx [j + 1 ][j_prime + 1 ] = this -> node [j ]-> x [0 ] - this -> node [j_prime ]-> x [0 ];
226+ dy [j + 1 ][j_prime + 1 ] = this -> node [j ]-> x [1 ] - this -> node [j_prime ]-> x [1 ];
227+ dz [j + 1 ][j_prime + 1 ] = this -> node [j ]-> x [2 ] - this -> node [j_prime ]-> x [2 ];
228228 }
229229 }
230230
@@ -233,9 +233,9 @@ int feenox_mesh_compute_r_tetrahedron(element_t *element, const double *x, doubl
233233
234234 // but the nodes and coordinates start from zero
235235// sixV01 = this->node[1]->x[0] * (this->node[2]->x[1]*this->node[3]->x[2] - this->node[3]->x[1]*this->node[2]->x[2]) + this->node[2]->x[0] * (this->node[3]->x[1]*this->node[1]->x[2] - this->node[1]->x[1]*this->node[3]->x[2]) + this->node[3]->x[0] * (this->node[1]->x[1]*this->node[2]->x[2] - this->node[2]->x[1]*this->node[1]->x[2]);
236- double sixV02 = element -> node [0 ]-> x [0 ] * (element -> node [3 ]-> x [1 ]* element -> node [2 ]-> x [2 ] - element -> node [2 ]-> x [1 ]* element -> node [3 ]-> x [2 ]) + element -> node [2 ]-> x [0 ] * (element -> node [0 ]-> x [1 ]* element -> node [3 ]-> x [2 ] - element -> node [3 ]-> x [1 ]* element -> node [0 ]-> x [2 ]) + element -> node [3 ]-> x [0 ] * (element -> node [2 ]-> x [1 ]* element -> node [0 ]-> x [2 ] - element -> node [0 ]-> x [1 ]* element -> node [2 ]-> x [2 ]);
237- double sixV03 = element -> node [0 ]-> x [0 ] * (element -> node [1 ]-> x [1 ]* element -> node [3 ]-> x [2 ] - element -> node [3 ]-> x [1 ]* element -> node [1 ]-> x [2 ]) + element -> node [1 ]-> x [0 ] * (element -> node [3 ]-> x [1 ]* element -> node [0 ]-> x [2 ] - element -> node [0 ]-> x [1 ]* element -> node [3 ]-> x [2 ]) + element -> node [3 ]-> x [0 ] * (element -> node [0 ]-> x [1 ]* element -> node [1 ]-> x [2 ] - element -> node [1 ]-> x [1 ]* element -> node [0 ]-> x [2 ]);
238- double sixV04 = element -> node [0 ]-> x [0 ] * (element -> node [2 ]-> x [1 ]* element -> node [1 ]-> x [2 ] - element -> node [1 ]-> x [1 ]* element -> node [2 ]-> x [2 ]) + element -> node [1 ]-> x [0 ] * (element -> node [0 ]-> x [1 ]* element -> node [2 ]-> x [2 ] - element -> node [2 ]-> x [1 ]* element -> node [0 ]-> x [2 ]) + element -> node [2 ]-> x [0 ] * (element -> node [1 ]-> x [1 ]* element -> node [0 ]-> x [2 ] - element -> node [0 ]-> x [1 ]* element -> node [1 ]-> x [2 ]);
236+ double sixV02 = this -> node [0 ]-> x [0 ] * (this -> node [3 ]-> x [1 ]* this -> node [2 ]-> x [2 ] - this -> node [2 ]-> x [1 ]* this -> node [3 ]-> x [2 ]) + this -> node [2 ]-> x [0 ] * (this -> node [0 ]-> x [1 ]* this -> node [3 ]-> x [2 ] - this -> node [3 ]-> x [1 ]* this -> node [0 ]-> x [2 ]) + this -> node [3 ]-> x [0 ] * (this -> node [2 ]-> x [1 ]* this -> node [0 ]-> x [2 ] - this -> node [0 ]-> x [1 ]* this -> node [2 ]-> x [2 ]);
237+ double sixV03 = this -> node [0 ]-> x [0 ] * (this -> node [1 ]-> x [1 ]* this -> node [3 ]-> x [2 ] - this -> node [3 ]-> x [1 ]* this -> node [1 ]-> x [2 ]) + this -> node [1 ]-> x [0 ] * (this -> node [3 ]-> x [1 ]* this -> node [0 ]-> x [2 ] - this -> node [0 ]-> x [1 ]* this -> node [3 ]-> x [2 ]) + this -> node [3 ]-> x [0 ] * (this -> node [0 ]-> x [1 ]* this -> node [1 ]-> x [2 ] - this -> node [1 ]-> x [1 ]* this -> node [0 ]-> x [2 ]);
238+ double sixV04 = this -> node [0 ]-> x [0 ] * (this -> node [2 ]-> x [1 ]* this -> node [1 ]-> x [2 ] - this -> node [1 ]-> x [1 ]* this -> node [2 ]-> x [2 ]) + this -> node [1 ]-> x [0 ] * (this -> node [0 ]-> x [1 ]* this -> node [2 ]-> x [2 ] - this -> node [2 ]-> x [1 ]* this -> node [0 ]-> x [2 ]) + this -> node [2 ]-> x [0 ] * (this -> node [1 ]-> x [1 ]* this -> node [0 ]-> x [2 ] - this -> node [0 ]-> x [1 ]* this -> node [1 ]-> x [2 ]);
239239
240240 // back again from one
241241// xi0 = 1.0/sixV * (sixV01 * 1 + (dy[4][2]*dz[3][2] - dy[3][2]*dz[4][2])*gsl_vector_get(x, 0) + (dx[3][2]*dz[4][2] - dx[4][2]*dz[3][2])*gsl_vector_get(x, 1) + (dx[4][2]*dy[3][2] - dx[3][2]*dy[4][2])*gsl_vector_get(x, 2));
@@ -252,7 +252,7 @@ int feenox_mesh_compute_r_tetrahedron(element_t *element, const double *x, doubl
252252 */
253253
254254 } else {
255- feenox_push_error_message ("not for element type %d" , element -> type -> id ) ;
255+ feenox_push_error_message ("not for element type %d" , this -> type -> id ) ;
256256 return FEENOX_ERROR ;
257257 }
258258
0 commit comments