105 this->determine_calculations();
108 LOG_SCOPE(
"init_shape_functions()",
"FE");
111 const std::size_t n_qp = qp.size();
115 const unsigned int n_approx_shape_functions =
123 if (this->calculate_phi)
124 this->phi.resize (n_approx_shape_functions);
125 if (this->calculate_dphi)
127 this->dphi.resize (n_approx_shape_functions);
128 this->dphidx.resize (n_approx_shape_functions);
129 this->dphidy.resize (n_approx_shape_functions);
130 this->dphidz.resize (n_approx_shape_functions);
133#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
134 if (this->calculate_d2phi)
136 this->d2phi.resize (n_approx_shape_functions);
137 this->d2phidx2.resize (n_approx_shape_functions);
138 this->d2phidxdy.resize (n_approx_shape_functions);
139 this->d2phidxdz.resize (n_approx_shape_functions);
140 this->d2phidy2.resize (n_approx_shape_functions);
141 this->d2phidydz.resize (n_approx_shape_functions);
142 this->d2phidz2.resize (n_approx_shape_functions);
143 this->d2phidxi2.resize (n_approx_shape_functions);
147 for (
unsigned int i=0; i<n_approx_shape_functions; i++)
149 if (this->calculate_phi)
150 this->phi[i].resize (n_qp);
151 if (this->calculate_dphi)
153 this->dphi[i].resize (n_qp);
154 this->dphidx[i].resize (n_qp);
155 this->dphidy[i].resize (n_qp);
156 this->dphidz[i].resize (n_qp);
158#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
159 if (this->calculate_d2phi)
161 this->d2phi[i].resize (n_qp);
162 this->d2phidx2[i].resize (n_qp);
163 this->d2phidxdy[i].resize (n_qp);
164 this->d2phidxdz[i].resize (n_qp);
165 this->d2phidy2[i].resize (n_qp);
166 this->d2phidydz[i].resize (n_qp);
167 this->d2phidz2[i].resize (n_qp);
175#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
183 this->weight.resize (n_qp);
184 this->dweight.resize (n_qp);
185 this->dphase.resize (n_qp);
187 for (
unsigned int p=0; p<n_qp; p++)
189 this->weight[p] = 1.;
190 this->dweight[p].zero();
191 this->dphase[p].zero();
197 if (this->calculate_dual)
198 this->init_dual_shape_functions(n_approx_shape_functions, n_qp);
206 const std::vector<Point> &)
216 LOG_SCOPE(
"compute_shape_functions()",
"FE");
218 const std::vector<Point> & xyz_qp = this->get_xyz();
226 if (this->calculate_phi)
231 if (this->calculate_dphi)
235 this->dphi[i][p](0) =
238 this->dphi[i][p](1) = this->dphidy[i][p] = 0.;
239 this->dphi[i][p](2) = this->dphidz[i][p] = 0.;
241#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
242 if (this->calculate_d2phi)
246 this->d2phi[i][p](0,0) =
250 this->d2phi[i][p](0,1) = this->d2phidxdy[i][p] =
251 this->d2phi[i][p](1,0) = 0.;
252 this->d2phi[i][p](1,1) = this->d2phidy2[i][p] = 0.;
254 this->d2phi[i][p](0,2) = this->d2phidxdz[i][p] =
255 this->d2phi[i][p](2,0) = 0.;
256 this->d2phi[i][p](1,2) = this->d2phidydz[i][p] =
257 this->d2phi[i][p](2,1) = 0.;
258 this->d2phi[i][p](2,2) = this->d2phidz2[i][p] = 0.;
270 if (this->calculate_phi)
275 if (this->calculate_dphi)
279 this->dphi[i][p](0) =
282 this->dphi[i][p](1) =
286 this->dphi[i][p](2) =
288 this->dphidz[i][p] = 0.;
290#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
291 if (this->calculate_d2phi)
295 this->d2phi[i][p](0,0) =
298 this->d2phi[i][p](0,1) = this->d2phidxdy[i][p] =
300 this->d2phi[i][p](1,1) =
303 this->d2phi[i][p](0,2) = this->d2phidxdz[i][p] =
304 this->d2phi[i][p](2,0) = 0.;
305 this->d2phi[i][p](1,2) = this->d2phidydz[i][p] =
306 this->d2phi[i][p](2,1) = 0.;
307 this->d2phi[i][p](2,2) = this->d2phidz2[i][p] = 0.;
318 if (this->calculate_phi)
323 if (this->calculate_dphi)
327 this->dphi[i][p](0) =
330 this->dphi[i][p](1) =
333 this->dphi[i][p](2) =
336#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
337 if (this->calculate_d2phi)
341 this->d2phi[i][p](0,0) =
344 this->d2phi[i][p](0,1) = this->d2phidxdy[i][p] =
346 this->d2phi[i][p](1,1) =
348 this->d2phi[i][p](0,2) = this->d2phidxdz[i][p] =
350 this->d2phi[i][p](1,2) = this->d2phidydz[i][p] =
361 libmesh_error_msg(
"ERROR: Invalid dimension " << this->
dim);