118 xt::pyarray<double>& mesh_trial_ref = args.
array<
double>(
"mesh_trial_ref");
119 xt::pyarray<double>& mesh_grad_trial_ref = args.
array<
double>(
"mesh_grad_trial_ref");
120 xt::pyarray<double>& mesh_dof = args.
array<
double>(
"mesh_dof");
121 xt::pyarray<double>& mesh_velocity_dof = args.
array<
double>(
"mesh_velocity_dof");
122 double MOVING_DOMAIN = args.
scalar<
double>(
"MOVING_DOMAIN");
123 xt::pyarray<int>& mesh_l2g = args.
array<
int>(
"mesh_l2g");
124 xt::pyarray<double>& dV_ref = args.
array<
double>(
"dV_ref");
125 xt::pyarray<double>& u_trial_ref = args.
array<
double>(
"u_trial_ref");
126 xt::pyarray<double>& u_grad_trial_ref = args.
array<
double>(
"u_grad_trial_ref");
127 xt::pyarray<double>& u_test_ref = args.
array<
double>(
"u_test_ref");
128 xt::pyarray<double>& u_grad_test_ref = args.
array<
double>(
"u_grad_test_ref");
129 xt::pyarray<double>& mesh_trial_trace_ref = args.
array<
double>(
"mesh_trial_trace_ref");
130 xt::pyarray<double>& mesh_grad_trial_trace_ref = args.
array<
double>(
"mesh_grad_trial_trace_ref");
131 xt::pyarray<double>& dS_ref = args.
array<
double>(
"dS_ref");
132 xt::pyarray<double>& u_trial_trace_ref = args.
array<
double>(
"u_trial_trace_ref");
133 xt::pyarray<double>& u_grad_trial_trace_ref = args.
array<
double>(
"u_grad_trial_trace_ref");
134 xt::pyarray<double>& u_test_trace_ref = args.
array<
double>(
"u_test_trace_ref");
135 xt::pyarray<double>& u_grad_test_trace_ref = args.
array<
double>(
"u_grad_test_trace_ref");
136 xt::pyarray<double>& normal_ref = args.
array<
double>(
"normal_ref");
137 xt::pyarray<double>& boundaryJac_ref = args.
array<
double>(
"boundaryJac_ref");
138 int nElements_global = args.
scalar<
int>(
"nElements_global");
139 xt::pyarray<double>& ebqe_penalty_ext = args.
array<
double>(
"ebqe_penalty_ext");
140 xt::pyarray<int>& elementMaterialTypes = args.
array<
int>(
"elementMaterialTypes");
141 xt::pyarray<int>& isSeepageFace = args.
array<
int>(
"isSeepageFace");
142 xt::pyarray<int>& a_rowptr = args.
array<
int>(
"a_rowptr");
143 xt::pyarray<int>& a_colind = args.
array<
int>(
"a_colind");
144 double rho = args.
scalar<
double>(
"rho");
145 double beta = args.
scalar<
double>(
"beta");
146 xt::pyarray<double>& gravity = args.
array<
double>(
"gravity");
147 xt::pyarray<double>& alpha = args.
array<
double>(
"alpha");
148 xt::pyarray<double>&
n = args.
array<
double>(
"n");
149 xt::pyarray<double>& thetaR = args.
array<
double>(
"thetaR");
150 xt::pyarray<double>& thetaSR = args.
array<
double>(
"thetaSR");
151 xt::pyarray<double>& KWs = args.
array<
double>(
"KWs");
152 double useMetrics = args.
scalar<
double>(
"useMetrics");
153 double alphaBDF = args.
scalar<
double>(
"alphaBDF");
154 int lag_shockCapturing = args.
scalar<
int>(
"lag_shockCapturing");
155 double shockCapturingDiffusion = args.
scalar<
double>(
"shockCapturingDiffusion");
156 double sc_uref = args.
scalar<
double>(
"sc_uref");
157 double sc_alpha = args.
scalar<
double>(
"sc_alpha");
158 xt::pyarray<int>& u_l2g = args.
array<
int>(
"u_l2g");
159 xt::pyarray<double>& elementDiameter = args.
array<
double>(
"elementDiameter");
160 xt::pyarray<double>& u_dof = args.
array<
double>(
"u_dof");
161 xt::pyarray<double>& u_dof_old = args.
array<
double>(
"u_dof_old");
162 xt::pyarray<double>& velocity = args.
array<
double>(
"velocity");
163 xt::pyarray<double>& q_m = args.
array<
double>(
"q_m");
164 xt::pyarray<double>& q_u = args.
array<
double>(
"q_u");
165 xt::pyarray<double>& q_dV = args.
array<
double>(
"q_dV");
166 xt::pyarray<double>& q_m_betaBDF = args.
array<
double>(
"q_m_betaBDF");
167 xt::pyarray<double>& cfl = args.
array<
double>(
"cfl");
168 xt::pyarray<double>& q_numDiff_u = args.
array<
double>(
"q_numDiff_u");
169 xt::pyarray<double>& q_numDiff_u_last = args.
array<
double>(
"q_numDiff_u_last");
170 int offset_u = args.
scalar<
int>(
"offset_u");
171 int stride_u = args.
scalar<
int>(
"stride_u");
172 xt::pyarray<double>& globalResidual = args.
array<
double>(
"globalResidual");
173 int nExteriorElementBoundaries_global = args.
scalar<
int>(
"nExteriorElementBoundaries_global");
174 xt::pyarray<int>& exteriorElementBoundariesArray = args.
array<
int>(
"exteriorElementBoundariesArray");
175 xt::pyarray<int>& elementBoundaryElementsArray = args.
array<
int>(
"elementBoundaryElementsArray");
176 xt::pyarray<int>& elementBoundaryLocalElementBoundariesArray = args.
array<
int>(
"elementBoundaryLocalElementBoundariesArray");
177 xt::pyarray<double>& ebqe_velocity_ext = args.
array<
double>(
"ebqe_velocity_ext");
178 xt::pyarray<int>& isDOFBoundary_u = args.
array<
int>(
"isDOFBoundary_u");
179 xt::pyarray<double>& ebqe_bc_u_ext = args.
array<
double>(
"ebqe_bc_u_ext");
180 xt::pyarray<int>& isFluxBoundary_u = args.
array<
int>(
"isFluxBoundary_u");
181 xt::pyarray<double>& ebqe_bc_flux_ext = args.
array<
double>(
"ebqe_bc_flux_ext");
182 xt::pyarray<double>& ebqe_phi = args.
array<
double>(
"ebqe_phi");
183 double epsFact = args.
scalar<
double>(
"epsFact");
184 xt::pyarray<double>& ebqe_u = args.
array<
double>(
"ebqe_u");
185 xt::pyarray<double>& ebqe_flux = args.
array<
double>(
"ebqe_flux");
187 double cE = args.
scalar<
double>(
"cE");
188 double cK = args.
scalar<
double>(
"cK");
190 double uL = args.
scalar<
double>(
"uL");
191 double uR = args.
scalar<
double>(
"uR");
193 int numDOFs = args.
scalar<
int>(
"numDOFs");
194 int NNZ = args.
scalar<
int>(
"NNZ");
195 xt::pyarray<int>& csrRowIndeces_DofLoops = args.
array<
int>(
"csrRowIndeces_DofLoops");
196 xt::pyarray<int>& csrColumnOffsets_DofLoops = args.
array<
int>(
"csrColumnOffsets_DofLoops");
197 xt::pyarray<int>& csrRowIndeces_CellLoops = args.
array<
int>(
"csrRowIndeces_CellLoops");
198 xt::pyarray<int>& csrColumnOffsets_CellLoops = args.
array<
int>(
"csrColumnOffsets_CellLoops");
199 xt::pyarray<int>& csrColumnOffsets_eb_CellLoops = args.
array<
int>(
"csrColumnOffsets_eb_CellLoops");
201 xt::pyarray<double>& Cx = args.
array<
double>(
"Cx");
202 xt::pyarray<double>& Cy = args.
array<
double>(
"Cy");
203 xt::pyarray<double>& Cz = args.
array<
double>(
"Cz");
204 xt::pyarray<double>& CTx = args.
array<
double>(
"CTx");
205 xt::pyarray<double>& CTy = args.
array<
double>(
"CTy");
206 xt::pyarray<double>& CTz = args.
array<
double>(
"CTz");
207 xt::pyarray<double>& ML = args.
array<
double>(
"ML");
208 xt::pyarray<double>& delta_x_ij = args.
array<
double>(
"delta_x_ij");
210 int LUMPED_MASS_MATRIX = args.
scalar<
int>(
"LUMPED_MASS_MATRIX");
211 int STABILIZATION_TYPE = args.
scalar<
int>(
"STABILIZATION_TYPE");
212 int ENTROPY_TYPE = args.
scalar<
int>(
"ENTROPY_TYPE");
214 xt::pyarray<double>& dLow = args.
array<
double>(
"dLow");
215 xt::pyarray<double>& fluxMatrix = args.
array<
double>(
"fluxMatrix");
216 xt::pyarray<double>& uDotLow = args.
array<
double>(
"uDotLow");
217 xt::pyarray<double>& uLow = args.
array<
double>(
"uLow");
218 xt::pyarray<double>& dt_times_fH_minus_fL = args.
array<
double>(
"dt_times_fH_minus_fL");
219 xt::pyarray<double>& min_s_bc = args.
array<
double>(
"min_s_bc");
220 xt::pyarray<double>& max_s_bc = args.
array<
double>(
"max_s_bc");
222 xt::pyarray<double>& quantDOFs = args.
array<
double>(
"quantDOFs");
223 xt::pyarray<double>& sLow = args.
array<
double>(
"sLow");
224 xt::pyarray<double>& sn = args.
array<
double>(
"sn");
226 assert(a_rowptr.data()[nSpace] ==
nnz);
227 assert(a_rowptr.data()[nSpace] == nSpace);
244 for(
int eN=0;eN<nElements_global;eN++)
247 double elementResidual_u[nDOF_test_element];
248 for (
int i=0;i<nDOF_test_element;i++)
250 elementResidual_u[i]=0.0;
253 for (
int k=0;k<nQuadraturePoints_element;k++)
256 int eN_k = eN*nQuadraturePoints_element+k,
257 eN_k_nSpace = eN_k*nSpace,
258 eN_nDOF_trial_element = eN*nDOF_trial_element;
259 double u=0.0,grad_u[nSpace],grad_u_old[nSpace],
261 f[nSpace],
df[nSpace],
265 Lstar_u[nDOF_test_element],
267 tau=0.0,tau0=0.0,tau1=0.0,
268 numDiff0=0.0,numDiff1=0.0,
271 jacInv[nSpace*nSpace],
272 u_grad_trial[nDOF_trial_element*nSpace],
273 u_test_dV[nDOF_trial_element],
274 u_grad_test_dV[nDOF_test_element*nSpace],
276 G[nSpace*nSpace],G_dd_G,tr_G,norm_Rv;
280 ck.calculateMapping_element(eN,
284 mesh_trial_ref.data(),
285 mesh_grad_trial_ref.data(),
290 ck.calculateMappingVelocity_element(eN,
292 mesh_velocity_dof.data(),
294 mesh_trial_ref.data(),
297 dV = fabs(jacDet)*dV_ref.data()[k];
298 q_dV.data()[eN_k] = dV;
299 ck.calculateG(jacInv,G,G_dd_G,tr_G);
301 ck.gradTrialFromRef(&u_grad_trial_ref.data()[k*nDOF_trial_element*nSpace],jacInv,u_grad_trial);
303 ck.valFromDOF(u_dof.data(),&u_l2g.data()[eN_nDOF_trial_element],&u_trial_ref.data()[k*nDOF_trial_element],
u);
305 ck.gradFromDOF(u_dof.data(),&u_l2g.data()[eN_nDOF_trial_element],u_grad_trial,grad_u);
307 for (
int j=0;j<nDOF_trial_element;j++)
309 u_test_dV[j] = u_test_ref.data()[k*nDOF_trial_element+j]*dV;
310 for (
int I=0;I<nSpace;I++)
312 u_grad_test_dV[j*nSpace+I] = u_grad_trial[j*nSpace+I]*dV;
324 alpha.data()[elementMaterialTypes.data()[eN]],
325 n.data()[elementMaterialTypes.data()[eN]],
326 thetaR.data()[elementMaterialTypes.data()[eN]],
327 thetaSR.data()[elementMaterialTypes.data()[eN]],
328 &KWs.data()[elementMaterialTypes.data()[eN]*
nnz],
343 q_m_betaBDF.data()[eN_k],
352 for(
int i=0;i<nDOF_test_element;i++)
354 int eN_k_i=eN_k*nDOF_test_element+i,
355 eN_k_i_nSpace = eN_k_i*nSpace,
357 if (LUMPED_MASS_MATRIX==1)
360 globalResidual.data()[offset_u + stride_u*u_l2g.data()[eN*nDOF_test_element + i]] += u_test_dV[i] * m_t;
364 elementResidual_u[i] +=
ck.Mass_weak(m_t, u_test_dV[i]);
367 elementResidual_u[i] +=
ck.Advection_weak(
f,&u_grad_test_dV[i_nSpace]) +
368 ck.Diffusion_weak(a_rowptr.data(),a_colind.data(),a,grad_u,&u_grad_test_dV[i_nSpace]);
375 q_m.data()[eN_k] = m;
376 q_u.data()[eN_k] =
u;
381 for(
int i=0;i<nDOF_test_element;i++)
383 int eN_i=eN*nDOF_test_element+i;
385 globalResidual.data()[offset_u+stride_u*u_l2g.data()[eN_i]] += elementResidual_u[i];
392 xt::pyarray<double>& mesh_trial_ref = args.
array<
double>(
"mesh_trial_ref");
393 xt::pyarray<double>& mesh_grad_trial_ref = args.
array<
double>(
"mesh_grad_trial_ref");
394 xt::pyarray<double>& mesh_dof = args.
array<
double>(
"mesh_dof");
395 xt::pyarray<double>& mesh_velocity_dof = args.
array<
double>(
"mesh_velocity_dof");
396 double MOVING_DOMAIN = args.
scalar<
double>(
"MOVING_DOMAIN");
397 xt::pyarray<int>& mesh_l2g = args.
array<
int>(
"mesh_l2g");
398 xt::pyarray<double>& dV_ref = args.
array<
double>(
"dV_ref");
399 xt::pyarray<double>& u_trial_ref = args.
array<
double>(
"u_trial_ref");
400 xt::pyarray<double>& u_grad_trial_ref = args.
array<
double>(
"u_grad_trial_ref");
401 xt::pyarray<double>& u_test_ref = args.
array<
double>(
"u_test_ref");
402 xt::pyarray<double>& u_grad_test_ref = args.
array<
double>(
"u_grad_test_ref");
403 xt::pyarray<double>& mesh_trial_trace_ref = args.
array<
double>(
"mesh_trial_trace_ref");
404 xt::pyarray<double>& mesh_grad_trial_trace_ref = args.
array<
double>(
"mesh_grad_trial_trace_ref");
405 xt::pyarray<double>& dS_ref = args.
array<
double>(
"dS_ref");
406 xt::pyarray<double>& u_trial_trace_ref = args.
array<
double>(
"u_trial_trace_ref");
407 xt::pyarray<double>& u_grad_trial_trace_ref = args.
array<
double>(
"u_grad_trial_trace_ref");
408 xt::pyarray<double>& u_test_trace_ref = args.
array<
double>(
"u_test_trace_ref");
409 xt::pyarray<double>& u_grad_test_trace_ref = args.
array<
double>(
"u_grad_test_trace_ref");
410 xt::pyarray<double>& normal_ref = args.
array<
double>(
"normal_ref");
411 xt::pyarray<double>& boundaryJac_ref = args.
array<
double>(
"boundaryJac_ref");
412 int nElements_global = args.
scalar<
int>(
"nElements_global");
413 xt::pyarray<double>& ebqe_penalty_ext = args.
array<
double>(
"ebqe_penalty_ext");
414 xt::pyarray<int>& elementMaterialTypes = args.
array<
int>(
"elementMaterialTypes");
415 xt::pyarray<int>& isSeepageFace = args.
array<
int>(
"isSeepageFace");
416 xt::pyarray<int>& a_rowptr = args.
array<
int>(
"a_rowptr");
417 xt::pyarray<int>& a_colind = args.
array<
int>(
"a_colind");
418 double rho = args.
scalar<
double>(
"rho");
419 double beta = args.
scalar<
double>(
"beta");
420 xt::pyarray<double>& gravity = args.
array<
double>(
"gravity");
421 xt::pyarray<double>& alpha = args.
array<
double>(
"alpha");
422 xt::pyarray<double>&
n = args.
array<
double>(
"n");
423 xt::pyarray<double>& thetaR = args.
array<
double>(
"thetaR");
424 xt::pyarray<double>& thetaSR = args.
array<
double>(
"thetaSR");
425 xt::pyarray<double>& KWs = args.
array<
double>(
"KWs");
426 double useMetrics = args.
scalar<
double>(
"useMetrics");
427 double alphaBDF = args.
scalar<
double>(
"alphaBDF");
428 int lag_shockCapturing = args.
scalar<
int>(
"lag_shockCapturing");
429 double shockCapturingDiffusion = args.
scalar<
double>(
"shockCapturingDiffusion");
430 xt::pyarray<int>& u_l2g = args.
array<
int>(
"u_l2g");
431 xt::pyarray<double>& elementDiameter = args.
array<
double>(
"elementDiameter");
432 xt::pyarray<double>& u_dof = args.
array<
double>(
"u_dof");
433 xt::pyarray<double>& velocity = args.
array<
double>(
"velocity");
434 xt::pyarray<double>& q_m_betaBDF = args.
array<
double>(
"q_m_betaBDF");
435 xt::pyarray<double>& cfl = args.
array<
double>(
"cfl");
436 xt::pyarray<double>& q_numDiff_u_last = args.
array<
double>(
"q_numDiff_u_last");
437 xt::pyarray<int>& csrRowIndeces_u_u = args.
array<
int>(
"csrRowIndeces_u_u");
438 xt::pyarray<int>& csrColumnOffsets_u_u = args.
array<
int>(
"csrColumnOffsets_u_u");
439 xt::pyarray<double>& globalJacobian = args.
array<
double>(
"globalJacobian");
440 int nExteriorElementBoundaries_global = args.
scalar<
int>(
"nExteriorElementBoundaries_global");
441 xt::pyarray<int>& exteriorElementBoundariesArray = args.
array<
int>(
"exteriorElementBoundariesArray");
442 xt::pyarray<int>& elementBoundaryElementsArray = args.
array<
int>(
"elementBoundaryElementsArray");
443 xt::pyarray<int>& elementBoundaryLocalElementBoundariesArray = args.
array<
int>(
"elementBoundaryLocalElementBoundariesArray");
444 xt::pyarray<double>& ebqe_velocity_ext = args.
array<
double>(
"ebqe_velocity_ext");
445 xt::pyarray<int>& isDOFBoundary_u = args.
array<
int>(
"isDOFBoundary_u");
446 xt::pyarray<double>& ebqe_bc_u_ext = args.
array<
double>(
"ebqe_bc_u_ext");
447 xt::pyarray<int>& isFluxBoundary_u = args.
array<
int>(
"isFluxBoundary_u");
448 xt::pyarray<double>& ebqe_bc_flux_ext = args.
array<
double>(
"ebqe_bc_flux_ext");
449 xt::pyarray<int>& csrColumnOffsets_eb_u_u = args.
array<
int>(
"csrColumnOffsets_eb_u_u");
450 int LUMPED_MASS_MATRIX = args.
scalar<
int>(
"LUMPED_MASS_MATRIX");
451 assert(a_rowptr.data()[nSpace] ==
nnz);
452 assert(a_rowptr.data()[nSpace] == nSpace);
458 for(
int eN=0;eN<nElements_global;eN++)
460 double elementJacobian_u_u[nDOF_test_element][nDOF_trial_element];
461 for (
int i=0;i<nDOF_test_element;i++)
463 for (
int j=0;j<nDOF_trial_element;j++)
465 elementJacobian_u_u[i][j]=0.0;
468 for (
int k=0;k<nQuadraturePoints_element;k++)
470 int eN_k = eN*nQuadraturePoints_element+k,
471 eN_k_nSpace = eN_k*nSpace,
472 eN_nDOF_trial_element = eN*nDOF_trial_element;
478 f[nSpace],
df[nSpace],
481 dpdeResidual_u_u[nDOF_trial_element],
482 Lstar_u[nDOF_test_element],
483 dsubgridError_u_u[nDOF_trial_element],
484 tau=0.0,tau0=0.0,tau1=0.0,
487 jacInv[nSpace*nSpace],
488 u_grad_trial[nDOF_trial_element*nSpace],
490 u_test_dV[nDOF_test_element],
491 u_grad_test_dV[nDOF_test_element*nSpace],
493 G[nSpace*nSpace],G_dd_G,tr_G;
498 ck.calculateMapping_element(eN,
502 mesh_trial_ref.data(),
503 mesh_grad_trial_ref.data(),
508 ck.calculateMappingVelocity_element(eN,
510 mesh_velocity_dof.data(),
512 mesh_trial_ref.data(),
515 dV = fabs(jacDet)*dV_ref.data()[k];
516 ck.calculateG(jacInv,G,G_dd_G,tr_G);
518 ck.gradTrialFromRef(&u_grad_trial_ref.data()[k*nDOF_trial_element*nSpace],jacInv,u_grad_trial);
520 ck.valFromDOF(u_dof.data(),&u_l2g.data()[eN_nDOF_trial_element],&u_trial_ref.data()[k*nDOF_trial_element],
u);
522 ck.gradFromDOF(u_dof.data(),&u_l2g.data()[eN_nDOF_trial_element],u_grad_trial,grad_u);
524 for (
int j=0;j<nDOF_trial_element;j++)
526 u_test_dV[j] = u_test_ref.data()[k*nDOF_trial_element+j]*dV;
527 for (
int I=0;I<nSpace;I++)
529 u_grad_test_dV[j*nSpace+I] = u_grad_trial[j*nSpace+I]*dV;
541 alpha.data()[elementMaterialTypes.data()[eN]],
542 n.data()[elementMaterialTypes.data()[eN]],
543 thetaR.data()[elementMaterialTypes.data()[eN]],
544 thetaSR.data()[elementMaterialTypes.data()[eN]],
545 &KWs.data()[elementMaterialTypes.data()[eN]*
nnz],
560 q_m_betaBDF.data()[eN_k],
566 for(
int i=0;i<nDOF_test_element;i++)
570 for(
int j=0;j<nDOF_trial_element;j++)
574 int j_nSpace = j*nSpace;
575 int i_nSpace = i*nSpace;
577 elementJacobian_u_u[i][j] +=
ck.MassJacobian_weak(dm_t,u_trial_ref.data()[k*nDOF_trial_element+j],u_test_dV[i]) +
578 ck.AdvectionJacobian_weak(
df,u_trial_ref.data()[k*nDOF_trial_element+j],&u_grad_test_dV[i_nSpace]) +
579 ck.DiffusionJacobian_weak(a_rowptr.data(),a_colind.data(),a,da,
580 grad_u,&u_grad_test_dV[i_nSpace],1.0,
581 u_trial_ref.data()[k*nDOF_trial_element+j],&u_grad_trial[j_nSpace]);
592 for (
int i=0;i<nDOF_test_element;i++)
594 int eN_i = eN*nDOF_test_element+i;
595 for (
int j=0;j<nDOF_trial_element;j++)
597 int eN_i_j = eN_i*nDOF_trial_element+j;
598 globalJacobian.data()[csrRowIndeces_u_u[eN_i] + csrColumnOffsets_u_u[eN_i_j]] += elementJacobian_u_u[i][j];