8#include PROTEUS_LAPACK_H
21 int nElementBoundaryQuadraturePoints_elementBoundary,
23 int nExteriorElementBoundaries_global,
24 int nInteriorElementBoundaries_global,
25 int* elementBoundaryElementsArray,
26 int* elementBoundaryLocalElementBoundariesArray,
27 int* exteriorElementBoundariesArray,
28 int* interiorElementBoundariesArray,
34 int ebNE,ebNI,ebN,k,left_eN_global,left_ebN_element,right_eN_global,right_ebN_element,I;
35 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
37 ebN = exteriorElementBoundariesArray[ebNE];
38 left_eN_global = elementBoundaryElementsArray[ebN*2+0];
39 left_ebN_element = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
40 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
43 xg[ebN*nElementBoundaryQuadraturePoints_elementBoundary*3+
46 x[left_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
47 left_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
50 for (I=0;I<nSpace_global;I++)
51 ng[ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
54 n[left_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
55 left_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
60 for (ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
62 ebN = interiorElementBoundariesArray[ebNI];
63 left_eN_global = elementBoundaryElementsArray[ebN*2+0];
64 left_ebN_element = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
65 right_eN_global = elementBoundaryElementsArray[ebN*2+1];
66 right_ebN_element = elementBoundaryLocalElementBoundariesArray[ebN*2+1];
67 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
71 xg[ebN*nElementBoundaryQuadraturePoints_elementBoundary*3+
74 x[left_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
75 left_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
78 x[right_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
79 right_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
82 x[left_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
83 left_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
87 for (I=0;I<nSpace_global;I++)
89 ng[ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
92 n[left_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
93 left_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
96 n[right_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
97 right_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
100 -
n[left_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
101 left_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
110 int nElementBoundaryQuadraturePoints_elementBoundary,
112 int nExteriorElementBoundaries_global,
113 int nInteriorElementBoundaries_global,
114 int* elementBoundaryElementsArray,
115 int* elementBoundaryLocalElementBoundariesArray,
116 int* exteriorElementBoundariesArray,
117 int* interiorElementBoundariesArray,
125 int ebNE,ebNI,ebN,k,left_eN_global,left_ebN_element,right_eN_global,right_ebN_element,I,J;
127 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
129 ebN = exteriorElementBoundariesArray[ebNE];
130 left_eN_global = elementBoundaryElementsArray[ebN*2+0];
131 left_ebN_element = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
132 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
135 for (J=0;J<nSpace_global;J++)
136 dot+= ebqe_n[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
139 ng[ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
149 x[left_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
150 left_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
152 I] = xg[ebN*nElementBoundaryQuadraturePoints_elementBoundary*3+
155 ebqe_x[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*3+
157 I] = xg[ebN*nElementBoundaryQuadraturePoints_elementBoundary*3+
161 for (I=0;I<nSpace_global;I++)
163 n[left_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
164 left_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
167 ng[ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
170 ebqe_n[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
173 sign*ng[ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
179 for (ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
181 ebN = interiorElementBoundariesArray[ebNI];
182 left_eN_global = elementBoundaryElementsArray[ebN*2+0];
183 left_ebN_element = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
184 right_eN_global = elementBoundaryElementsArray[ebN*2+1];
185 right_ebN_element = elementBoundaryLocalElementBoundariesArray[ebN*2+1];
186 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
190 x[left_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
191 left_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
193 I] = xg[ebN*nElementBoundaryQuadraturePoints_elementBoundary*3+
196 x[right_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
197 right_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
199 I] = xg[ebN*nElementBoundaryQuadraturePoints_elementBoundary*3+
203 for (I=0;I<nSpace_global;I++)
205 n[left_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
206 left_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
208 I] = ng[ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
211 n[right_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
212 right_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
214 I] = -ng[ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global+
223 int nElementBoundaryQuadraturePoints_elementBoundary,
224 int nExteriorElementBoundaries_global,
225 int nInteriorElementBoundaries_global,
226 int* elementBoundaryElementsArray,
227 int* elementBoundaryLocalElementBoundariesArray,
228 int* exteriorElementBoundariesArray,
229 int* interiorElementBoundariesArray,
232 int ebNI,ebN,k,left_eN_global,left_ebN_element,right_eN_global,right_ebN_element,I;
233 for (ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
235 ebN = interiorElementBoundariesArray[ebNI];
236 left_eN_global = elementBoundaryElementsArray[ebN*2+0];
237 left_ebN_element = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
238 right_eN_global = elementBoundaryElementsArray[ebN*2+1];
239 right_ebN_element = elementBoundaryLocalElementBoundariesArray[ebN*2+1];
240 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
243 xt[right_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
244 right_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
247 xt[left_eN_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
248 left_ebN_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
256 int nQuadraturePoints_element,
262 for(eN=0;eN<nElements_global;eN++)
263 for(k=0;k<nQuadraturePoints_element;k++)
264 for(j=0;j<nDOF_element;j++)
265 vArray[eN*nQuadraturePoints_element*nDOF_element+
274 int nElementBoundaries_element,
275 int nElementBoundaryQuadraturePoints_elementBoundary,
282 for(eN=0;eN<nElements_global;eN++)
283 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
284 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
285 for(j=0;j<nDOF_element;j++)
286 vArray[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
287 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
291 psi[permutations[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary+
292 ebN*nElementBoundaryQuadraturePoints_elementBoundary+
298 int nElementBoundaryQuadraturePoints_elementBoundary,
300 int nExteriorElementBoundaries_global,
301 const int* exteriorElementBoundariesArray,
302 const int* elementBoundaryElementsArray,
303 const int* elementBoundaryLocalElementBoundariesArray,
307 int eN,ebN,ebNE,ebN_local,k,j;
308 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
310 ebN = exteriorElementBoundariesArray[ebNE];
311 eN = elementBoundaryElementsArray[ebN*2+0];
312 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
313 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
314 for(j=0;j<nDOF_element;j++)
315 vArray[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
319 psi[ebN_local*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element +
326 int nQuadraturePoints_element,
330 double* inverseJacobianArray,
333 int eN,k,j,I,J,nSpace_global2 = nSpace_global*nSpace_global;
334 for(eN=0;eN<nElements_global;eN++)
335 for(k=0;k<nQuadraturePoints_element;k++)
336 for(j=0;j<nDOF_element;j++)
337 for (I=0;I<nSpace_global;I++)
338 for (J=0;J<nSpace_global;J++)
339 grad_vArray[eN*nQuadraturePoints_element*nDOF_element*nSpace_global+
340 k*nDOF_element*nSpace_global+
344 grad_psi[k*nDOF_element*nSpace_global+
348 inverseJacobianArray[eN*nQuadraturePoints_element*nSpace_global2+
355 int nQuadraturePoints_element,
359 double* inverseJacobianArray,
360 double* Hessian_vArray)
362 int eN,k,j,I,J,K,
L,nSpace_global2 = nSpace_global*nSpace_global;
363 for(eN=0;eN<nElements_global;eN++)
364 for(k=0;k<nQuadraturePoints_element;k++)
365 for(j=0;j<nDOF_element;j++)
366 for (I=0;I<nSpace_global;I++)
367 for (J=0;J<nSpace_global;J++)
368 for (K=0;K<nSpace_global;K++)
369 for (
L=0;
L<nSpace_global;
L++)
370 Hessian_vArray[eN*nQuadraturePoints_element*nDOF_element*nSpace_global2+
371 k*nDOF_element*nSpace_global2+
376 Hessian_psi[k*nDOF_element*nSpace_global2+
381 inverseJacobianArray[eN*nQuadraturePoints_element*nSpace_global2+
386 inverseJacobianArray[eN*nQuadraturePoints_element*nSpace_global2+
393 int nElementBoundaries_element,
394 int nElementBoundaryQuadraturePoints_elementBoundary,
399 double* inverseJacobianArray,
402 int eN,ebN,k,j,I,J,nSpace_global2 = nSpace_global*nSpace_global;
403 for(eN=0;eN<nElements_global;eN++)
404 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
405 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
406 for(j=0;j<nDOF_element;j++)
407 for (I=0;I<nSpace_global;I++)
408 for (J=0;J<nSpace_global;J++)
409 grad_vArray[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace_global+
410 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace_global+
411 k*nDOF_element*nSpace_global+
415 grad_psi[permutations[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary+
416 ebN*nElementBoundaryQuadraturePoints_elementBoundary+
417 k]*nDOF_element*nSpace_global+
421 inverseJacobianArray[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global2+
422 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global2+
429 int nElementBoundaryQuadraturePoints_elementBoundary,
432 int nExteriorElementBoundaries_global,
433 const int *exteriorElementBoundariesArray,
434 const int *elementBoundaryElementsArray,
435 const int *elementBoundaryLocalElementBoundariesArray,
437 double* inverseJacobianArray,
440 int ebN,ebNE,ebN_local,eN,k,j,I,J,nSpace_global2 = nSpace_global*nSpace_global;
441 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
443 ebN = exteriorElementBoundariesArray[ebNE];
444 eN = elementBoundaryElementsArray[ebN*2+0];
445 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
446 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
447 for(j=0;j<nDOF_element;j++)
448 for (I=0;I<nSpace_global;I++)
449 for (J=0;J<nSpace_global;J++)
450 grad_vArray[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace_global+
451 k*nDOF_element*nSpace_global+
455 grad_psi[ebN_local*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace_global+
456 k*nDOF_element*nSpace_global+
460 inverseJacobianArray[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global2+
468 int nElementBoundaries_element,
469 int nElementBoundaryQuadraturePoints_elementBoundary,
474 const int kTot=(nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary);
476 register double errorNorm,errorNormMin;
478 for (k0=0;k0<kTot;k0++)
481 for (eN=1;eN<nElements_global;eN++)
483 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
484 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
487 for (k0=0;k0<kTot;k0++)
490 for (I=0;I<nSpace_global;I++)
492 errorNorm += fabs(xiArray[k0*3+I]
494 xiArray[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
495 ebN*nElementBoundaryQuadraturePoints_elementBoundary*3+
499 if (errorNorm < errorNormMin)
501 permutations[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary+
502 ebN*nElementBoundaryQuadraturePoints_elementBoundary+
504 errorNormMin = errorNorm;
512 int nExteriorElementBoundaries_global,
513 const int * exteriorElementBoundariesArray,
514 const int * elementBoundaryElementsArray,
515 const int * elementBoundaryLocalElementBoundariesArray,
519 const int kTot=nElementBoundaryQuadraturePoints_elementBoundary;
520 int eN,ebN,ebNE,ebN_local,k,k0,I;
521 register double errorNorm,errorNormMin;
523 for (k0=0;k0<kTot;k0++)
526 for (ebNE = 1; ebNE < nExteriorElementBoundaries_global; ebNE++)
528 ebN = exteriorElementBoundariesArray[ebNE];
529 eN = elementBoundaryElementsArray[ebN*2+0];
530 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
531 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
534 for (k0=0;k0<kTot;k0++)
537 for (I=0;I<nSpace_global;I++)
539 errorNorm += fabs(xiArray[k0*3+I]
541 xiArray[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*3+
545 if (errorNorm < errorNormMin)
547 permutations[ebNE*nElementBoundaryQuadraturePoints_elementBoundary+
549 errorNormMin = errorNorm;
557 int nElementBoundaryQuadraturePoints_elementBoundary,
563 register double errorNorm,errorNormMin;
565 for (ebN=0;ebN<nElementBoundaries_global;ebN++)
567 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
570 for (k0=0;k0<nElementBoundaryQuadraturePoints_elementBoundary;k0++)
575 errorNorm += fabs(xArrayNew[ebN*nElementBoundaryQuadraturePoints_elementBoundary*3+
579 xArray[ebN*nElementBoundaryQuadraturePoints_elementBoundary*3+
583 if (errorNorm < errorNormMin)
585 permutations[ebN*nElementBoundaryQuadraturePoints_elementBoundary+
587 errorNormMin = errorNorm;
595 int nQuadraturePoints_element,
603 memset(xArray,0,
sizeof(
double)*nElements_global*nQuadraturePoints_element*3);
604 int eN,k,j,j_global,I;
605 for(eN=0;eN<nElements_global;eN++)
606 for(k=0;k<nQuadraturePoints_element;k++)
607 for(j=0;j<nDOF_element;j++)
609 j_global = l2g[eN*nDOF_element+
612 xArray[eN*nQuadraturePoints_element*3+
619 nodeArray[j_global*3+
625 int nElementBoundaries_element,
626 int nQuadraturePoints_element,
634 memset(xArray,0,
sizeof(
double)*nElements_global*nElementBoundaries_element*nQuadraturePoints_element*3);
635 int eN,ebN,k,j,j_global,I;
636 for(eN=0;eN<nElements_global;eN++)
637 for(ebN=0;ebN<nElementBoundaries_element;ebN++)
638 for(k=0;k<nQuadraturePoints_element;k++)
639 for(j=0;j<nDOF_element;j++)
641 j_global = l2g[eN*nDOF_element+
644 xArray[eN*nElementBoundaries_element*nQuadraturePoints_element*3+
645 ebN*nQuadraturePoints_element*3+
649 psi[ebN*nQuadraturePoints_element*nDOF_element+
653 nodeArray[j_global*3+
661 int nExteriorElementBoundaries_global,
662 const int* exteriorElementBoundariesArray,
663 const int* elementBoundaryElementsArray,
664 const int* elementBoundaryLocalElementBoundariesArray,
670 memset(xArray,0,
sizeof(
double)*nExteriorElementBoundaries_global*nQuadraturePoints_elementBoundary*3);
671 int eN,ebN,ebNE,ebN_local,k,j,j_global,I;
672 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
674 ebN = exteriorElementBoundariesArray[ebNE];
675 eN = elementBoundaryElementsArray[ebN*2 + 0];
676 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2 + 0];
677 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
678 for(j=0;j<nDOF_element;j++)
680 j_global = l2g[eN*nDOF_element+
683 xArray[ebNE*nQuadraturePoints_elementBoundary*3+
687 psi[ebN_local*nQuadraturePoints_elementBoundary*nDOF_element+
691 nodeArray[j_global*3+
698 int nQuadraturePoints_element,
701 double* inverseJacobian,
707 memset(xiArray,0,
sizeof(
double)*nElements_global*nQuadraturePoints_element*3);
708 int eN,k,node0,I,J,nSpace_global2=nSpace_global*nSpace_global;
709 double dx[nSpace_global];
710 for(eN=0;eN<nElements_global;eN++)
711 for(k=0;k<nQuadraturePoints_element;k++)
713 node0 = l2g[eN*nDOF_element];
714 for(I=0;I<nSpace_global;I++)
716 xArray[eN*nQuadraturePoints_element*3+
720 nodeArray[node0*3+I];
721 for(I=0;I<nSpace_global;I++)
722 for(J=0;J<nSpace_global;J++)
723 xiArray[eN*nQuadraturePoints_element*3+
727 inverseJacobian[eN*nQuadraturePoints_element*nSpace_global2+
737 int nElementBoundaries_element,
738 int nElementBoundaryQuadraturePoints_elementBoundary,
741 double* inverseJacobian,
747 memset(xiArray,0,
sizeof(
double)*nElements_global*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3);
748 int eN,ebN,k,node0,I,J,nSpace_global2=nSpace_global*nSpace_global;
749 double dx[nSpace_global];
750 for(eN=0;eN<nElements_global;eN++)
751 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
752 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
754 node0 = l2g[eN*nDOF_element];
755 for(I=0;I<nSpace_global;I++)
757 xArray[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
758 ebN*nElementBoundaryQuadraturePoints_elementBoundary*3+
762 nodeArray[node0*3+I];
763 for(I=0;I<nSpace_global;I++)
764 for(J=0;J<nSpace_global;J++)
765 xiArray[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*3+
766 ebN*nElementBoundaryQuadraturePoints_elementBoundary*3+
770 inverseJacobian[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global2+
771 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global2+
783 int nExteriorElementBoundaries_global,
784 const int* exteriorElementBoundariesArray,
785 const int* elementBoundaryElementsArray,
786 const int* elementBoundaryLocalElementBoundariesArray,
787 double* inverseJacobian,
793 memset(xiArray,0,
sizeof(
double)*nExteriorElementBoundaries_global*nElementBoundaryQuadraturePoints_elementBoundary*3);
794 int eN,ebN,ebNE,ebN_local,k,node0,I,J,nSpace_global2=nSpace_global*nSpace_global;
795 double dx[nSpace_global];
796 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
798 ebN = exteriorElementBoundariesArray[ebNE];
799 eN = elementBoundaryElementsArray[ebN*2+0];
800 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
802 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
804 node0 = l2g[eN*nDOF_element];
805 for(I=0;I<nSpace_global;I++)
807 xArray[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*3+
811 nodeArray[node0*3+I];
812 for(I=0;I<nSpace_global;I++)
813 for(J=0;J<nSpace_global;J++)
814 xiArray[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*3+
818 inverseJacobian[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nSpace_global2+
829 int nQuadraturePoints_element,
834 double* jacobianArray,
835 double* jacobianDeterminantArray,
836 double* jacobianInverseArray)
839 const int X=0,
Y=1,Z=2,
843 double *jac=NULL,*jacDet=NULL,*jacInv=NULL,*grad=NULL,*node=NULL;
844 register double oneOverJacDet=0.0;
845 for(eN=0;eN<nElements_global;eN++)
846 for(k=0;k<nQuadraturePoints_element;k++)
848 jac = jacobianArray +
849 eN*nQuadraturePoints_element*9+
851 jacDet = jacobianDeterminantArray +
852 eN*nQuadraturePoints_element+
854 jacInv = jacobianInverseArray +
855 eN*nQuadraturePoints_element*9+
857 for(j=0;j<nDOF_element;j++)
859 j_global = l2g[eN*nDOF_element+
861 grad = grad_psi + k*nDOF_element*3 + j*3;
862 node = nodeArray + j_global*3;
863 jac[XX] += node[X]*grad[X];
864 jac[XY] += node[X]*grad[
Y];
865 jac[XZ] += node[X]*grad[Z];
866 jac[YX] += node[
Y]*grad[X];
867 jac[YY] += node[
Y]*grad[
Y];
868 jac[YZ] += node[
Y]*grad[Z];
869 jac[ZX] += node[Z]*grad[X];
870 jac[ZY] += node[Z]*grad[
Y];
871 jac[ZZ] += node[Z]*grad[Z];
875 jac[XX]*(jac[YY]*jac[ZZ] - jac[YZ]*jac[ZY]) -
876 jac[XY]*(jac[YX]*jac[ZZ] - jac[YZ]*jac[ZX]) +
877 jac[XZ]*(jac[YX]*jac[ZY] - jac[YY]*jac[ZX]);
878 oneOverJacDet = 1.0/(*jacDet);
879 jacInv[XX] = oneOverJacDet*(jac[YY]*jac[ZZ] - jac[YZ]*jac[ZY]);
880 jacInv[YX] = oneOverJacDet*(jac[YZ]*jac[ZX] - jac[YX]*jac[ZZ]);
881 jacInv[ZX] = oneOverJacDet*(jac[YX]*jac[ZY] - jac[YY]*jac[ZX]);
882 jacInv[XY] = oneOverJacDet*(jac[ZY]*jac[XZ] - jac[ZZ]*jac[XY]);
883 jacInv[YY] = oneOverJacDet*(jac[ZZ]*jac[XX] - jac[ZX]*jac[XZ]);
884 jacInv[ZY] = oneOverJacDet*(jac[ZX]*jac[XY] - jac[ZY]*jac[XX]);
885 jacInv[XZ] = oneOverJacDet*(jac[XY]*jac[YZ] - jac[XZ]*jac[YY]);
886 jacInv[YZ] = oneOverJacDet*(jac[XZ]*jac[YX] - jac[XX]*jac[YZ]);
887 jacInv[ZZ] = oneOverJacDet*(jac[XX]*jac[YY] - jac[XY]*jac[YX]);
892 int nQuadraturePoints_element,
897 double* jacobianArray,
898 double* jacobianDeterminantArray,
899 double* jacobianInverseArray)
905 double *jac=NULL,*jacDet=NULL,*jacInv=NULL,*grad=NULL,*node=NULL;
906 register double oneOverJacDet=0.0;
907 for(eN=0;eN<nElements_global;eN++)
908 for(k=0;k<nQuadraturePoints_element;k++)
910 jac = jacobianArray +
911 eN*nQuadraturePoints_element*4+
913 jacDet = jacobianDeterminantArray +
914 eN*nQuadraturePoints_element+
916 jacInv = jacobianInverseArray +
917 eN*nQuadraturePoints_element*4+
919 for(j=0;j<nDOF_element;j++)
921 j_global = l2g[eN*nDOF_element+
923 grad = grad_psi + k*nDOF_element*2 + j*2;
925 node = nodeArray + j_global*3;
926 jac[XX] += node[X]*grad[X];
927 jac[XY] += node[X]*grad[
Y];
928 jac[YX] += node[
Y]*grad[X];
929 jac[YY] += node[
Y]*grad[
Y];
933 jac[XX]*jac[YY]- jac[XY]*jac[YX];
934 oneOverJacDet = 1.0/(*jacDet);
935 jacInv[XX] = oneOverJacDet*jac[YY];
936 jacInv[YX] = -oneOverJacDet*jac[YX];
937 jacInv[XY] = -oneOverJacDet*jac[XY];
938 jacInv[YY] = oneOverJacDet*jac[XX];
943 int nQuadraturePoints_element,
948 double* jacobianArray,
949 double* jacobianDeterminantArray,
950 double* jacobianInverseArray)
955 double *jac=NULL,*jacDet=NULL,*jacInv=NULL,*grad=NULL,*node=NULL;
956 register double oneOverJacDet=0.0;
957 for(eN=0;eN<nElements_global;eN++)
958 for(k=0;k<nQuadraturePoints_element;k++)
960 jac = jacobianArray +
961 eN*nQuadraturePoints_element+
963 jacDet = jacobianDeterminantArray +
964 eN*nQuadraturePoints_element+
966 jacInv = jacobianInverseArray +
967 eN*nQuadraturePoints_element+
969 for(j=0;j<nDOF_element;j++)
971 j_global = l2g[eN*nDOF_element+
973 grad = grad_psi + k*nDOF_element + j;
975 node = nodeArray + j_global*3;
976 jac[XX] += node[X]*grad[X];
981 oneOverJacDet = 1.0/(*jacDet);
982 jacInv[XX] = oneOverJacDet;
987 int nElementBoundaries_element,
988 int nQuadraturePoints_element,
991 double* boundaryNormals,
992 double* boundaryJacobians,
995 double* jacobianInverseArray,
996 double* metricTensorArray,
997 double* metricTensorDeterminantSqrtArray,
998 double* unitNormalArray)
1000 int eN,ebN,k,j,j_global;
1011 double *jacInv=NULL,*mt=NULL,*mtDetSqrt=NULL,*
n=NULL,*grad=NULL,*node=NULL,*bn,*bj;
1012 register double oneOverJacDet=0.0,oneOverNbn=0.0;
1013 double emj[9],ebmj[6];
1014 for(eN=0;eN<nElements_global;eN++)
1015 for(ebN=0;ebN<nElementBoundaries_element;ebN++)
1016 for(k=0;k<nQuadraturePoints_element;k++)
1033 jacInv = jacobianInverseArray +
1034 eN*nElementBoundaries_element*nQuadraturePoints_element*9+
1035 ebN*nQuadraturePoints_element*9+
1037 mt = metricTensorArray +
1038 eN*nElementBoundaries_element*nQuadraturePoints_element*4+
1039 ebN*nQuadraturePoints_element*4+
1041 mtDetSqrt = metricTensorDeterminantSqrtArray +
1042 eN*nElementBoundaries_element*nQuadraturePoints_element+
1043 ebN*nQuadraturePoints_element+
1045 n = unitNormalArray+
1046 eN*nElementBoundaries_element*nQuadraturePoints_element*3+
1047 ebN*nQuadraturePoints_element*3+
1049 bn = boundaryNormals + ebN*3;
1050 bj = boundaryJacobians + ebN*6;
1051 for(j=0;j<nDOF_element;j++)
1053 j_global = l2g[eN*nDOF_element+
1055 grad = grad_psi + ebN*nQuadraturePoints_element*nDOF_element*3+k*nDOF_element*3 + j*3;
1057 node = nodeArray + j_global*3;
1058 emj[XX] += node[X]*grad[X];
1059 emj[XY] += node[X]*grad[
Y];
1060 emj[XZ] += node[X]*grad[Z];
1061 emj[YX] += node[
Y]*grad[X];
1062 emj[YY] += node[
Y]*grad[
Y];
1063 emj[YZ] += node[
Y]*grad[Z];
1064 emj[ZX] += node[Z]*grad[X];
1065 emj[ZY] += node[Z]*grad[
Y];
1066 emj[ZZ] += node[Z]*grad[Z];
1068 oneOverJacDet = 1.0/(emj[XX]*(emj[YY]*emj[ZZ] - emj[YZ]*emj[ZY]) -
1069 emj[XY]*(emj[YX]*emj[ZZ] - emj[YZ]*emj[ZX]) +
1070 emj[XZ]*(emj[YX]*emj[ZY] - emj[YY]*emj[ZX]));
1071 jacInv[XX] = oneOverJacDet*(emj[YY]*emj[ZZ] - emj[YZ]*emj[ZY]);
1072 jacInv[YX] = oneOverJacDet*(emj[YZ]*emj[ZX] - emj[YX]*emj[ZZ]);
1073 jacInv[ZX] = oneOverJacDet*(emj[YX]*emj[ZY] - emj[YY]*emj[ZX]);
1074 jacInv[XY] = oneOverJacDet*(emj[ZY]*emj[XZ] - emj[ZZ]*emj[XY]);
1075 jacInv[YY] = oneOverJacDet*(emj[ZZ]*emj[XX] - emj[ZX]*emj[XZ]);
1076 jacInv[ZY] = oneOverJacDet*(emj[ZX]*emj[XY] - emj[ZY]*emj[XX]);
1077 jacInv[XZ] = oneOverJacDet*(emj[XY]*emj[YZ] - emj[XZ]*emj[YY]);
1078 jacInv[YZ] = oneOverJacDet*(emj[XZ]*emj[YX] - emj[XX]*emj[YZ]);
1079 jacInv[ZZ] = oneOverJacDet*(emj[XX]*emj[YY] - emj[XY]*emj[YX]);
1081 ebmj[XHX] = emj[XX]*bj[XHX]+emj[XY]*bj[YHX]+emj[XZ]*bj[ZHX];
1082 ebmj[XHY] = emj[XX]*bj[XHY]+emj[XY]*bj[YHY]+emj[XZ]*bj[ZHY];
1083 ebmj[YHX] = emj[YX]*bj[XHX]+emj[YY]*bj[YHX]+emj[YZ]*bj[ZHX];
1084 ebmj[YHY] = emj[YX]*bj[XHY]+emj[YY]*bj[YHY]+emj[YZ]*bj[ZHY];
1085 ebmj[ZHX] = emj[ZX]*bj[XHX]+emj[ZY]*bj[YHX]+emj[ZZ]*bj[ZHX];
1086 ebmj[ZHY] = emj[ZX]*bj[XHY]+emj[ZY]*bj[YHY]+emj[ZZ]*bj[ZHY];
1088 mt[HXHX] = ebmj[XHX]*ebmj[XHX]+ebmj[YHX]*ebmj[YHX]+ebmj[ZHX]*ebmj[ZHX];
1089 mt[HXHY] = ebmj[XHX]*ebmj[XHY]+ebmj[YHX]*ebmj[YHY]+ebmj[ZHX]*ebmj[ZHY];
1090 mt[HYHX] = ebmj[XHY]*ebmj[XHX]+ebmj[YHY]*ebmj[YHX]+ebmj[ZHY]*ebmj[ZHX];
1091 mt[HYHY] = ebmj[XHY]*ebmj[XHY]+ebmj[YHY]*ebmj[YHY]+ebmj[ZHY]*ebmj[ZHY];
1093 *mtDetSqrt=sqrt(mt[HXHX]*mt[HYHY]- mt[HXHY]*mt[HYHX]);
1096 n[X] = (jacInv[XX]*bn[X]+jacInv[YX]*bn[
Y]+jacInv[ZX]*bn[Z]);
1097 n[
Y] = (jacInv[XY]*bn[X]+jacInv[YY]*bn[
Y]+jacInv[ZY]*bn[Z]);
1098 n[Z] = (jacInv[XZ]*bn[X]+jacInv[YZ]*bn[
Y]+jacInv[ZZ]*bn[Z]);
1100 oneOverNbn = 1.0/sqrt(
n[X]*
n[X]+
n[
Y]*
n[
Y]+
n[Z]*
n[Z]);
1110 int nElementBoundaries_element,
1111 int nQuadraturePoints_element,
1114 double* boundaryNormals,
1115 double* boundaryJacobians,
1118 double* jacobianInverseArray,
1119 double* metricTensorArray,
1120 double* metricTensorDeterminantSqrtArray,
1121 double* unitNormalArray)
1123 int eN,ebN,k,j,j_global;
1127 double *jacInv=NULL,*mt,*mtDetSqrt,*
n,*grad=NULL,*node=NULL,*bn,*bj;
1128 register double oneOverJacDet=0.0,oneOverNbn=0.0;
1129 double emj[4],ebmj[2];
1130 for(eN=0;eN<nElements_global;eN++)
1131 for(ebN=0;ebN<nElementBoundaries_element;ebN++)
1132 for(k=0;k<nQuadraturePoints_element;k++)
1140 jacInv = jacobianInverseArray +
1141 eN*nElementBoundaries_element*nQuadraturePoints_element*4+
1142 ebN*nQuadraturePoints_element*4+
1144 mt = metricTensorArray +
1145 eN*nElementBoundaries_element*nQuadraturePoints_element+
1146 ebN*nQuadraturePoints_element+
1148 mtDetSqrt = metricTensorDeterminantSqrtArray +
1149 eN*nElementBoundaries_element*nQuadraturePoints_element+
1150 ebN*nQuadraturePoints_element+
1152 n = unitNormalArray+
1153 eN*nElementBoundaries_element*nQuadraturePoints_element*2+
1154 ebN*nQuadraturePoints_element*2+
1156 bn = boundaryNormals + ebN*2;
1157 bj = boundaryJacobians + ebN*2;
1158 for(j=0;j<nDOF_element;j++)
1160 j_global = l2g[eN*nDOF_element+
1162 grad = grad_psi + ebN*nQuadraturePoints_element*nDOF_element*2+k*nDOF_element*2 + j*2;
1164 node = nodeArray + j_global*3;
1165 emj[XX] += node[X]*grad[X];
1166 emj[XY] += node[X]*grad[
Y];
1167 emj[YX] += node[
Y]*grad[X];
1168 emj[YY] += node[
Y]*grad[
Y];
1170 oneOverJacDet = 1.0/(emj[XX]*emj[YY]- emj[XY]*emj[YX]);
1171 jacInv[XX] = oneOverJacDet*emj[YY];
1172 jacInv[YX] = -oneOverJacDet*emj[YX];
1173 jacInv[XY] = -oneOverJacDet*emj[XY];
1174 jacInv[YY] = oneOverJacDet*emj[XX];
1175 ebmj[X] = emj[XX]*bj[XX]+emj[XY]*bj[
Y];
1176 ebmj[
Y] = emj[YX]*bj[X]+emj[YY]*bj[
Y];
1177 mt[X] = ebmj[X]*ebmj[X]+ebmj[
Y]*ebmj[
Y];
1178 *mtDetSqrt=sqrt(mt[XX]);
1179 n[X] = jacInv[XX]*bn[X]+jacInv[YX]*bn[
Y];
1180 n[
Y] = jacInv[XY]*bn[X]+jacInv[YY]*bn[
Y];
1181 oneOverNbn= 1.0/sqrt(
n[X]*
n[X]+
n[
Y]*
n[
Y]);
1188 int nElementBoundaries_element,
1189 int nQuadraturePoints_element,
1193 double* boundaryNormals,
1194 double* boundaryJacobians,
1197 double* jacobianInverseArray,
1198 double* metricTensorArray,
1199 double* metricTensorDeterminantSqrtArray,
1200 double* unitNormalArray)
1202 int eN,ebN,k,j,j_global;
1206 double *jacInv=NULL,*mt,*mtDetSqrt,*
n,*grad=NULL,*node=NULL,*bn,*bj,*
xt;
1207 register double oneOverJacDet=0.0,oneOverNbn=0.0,xt_dot_xt,xt_dot_n,xt_dot_bj;
1208 double emj[4],ebmj[2];
1209 for(eN=0;eN<nElements_global;eN++)
1210 for(ebN=0;ebN<nElementBoundaries_element;ebN++)
1211 for(k=0;k<nQuadraturePoints_element;k++)
1219 jacInv = jacobianInverseArray +
1220 eN*nElementBoundaries_element*nQuadraturePoints_element*4+
1221 ebN*nQuadraturePoints_element*4+
1223 mt = metricTensorArray +
1224 eN*nElementBoundaries_element*nQuadraturePoints_element+
1225 ebN*nQuadraturePoints_element+
1227 mtDetSqrt = metricTensorDeterminantSqrtArray +
1228 eN*nElementBoundaries_element*nQuadraturePoints_element+
1229 ebN*nQuadraturePoints_element+
1231 n = unitNormalArray+
1232 eN*nElementBoundaries_element*nQuadraturePoints_element*2+
1233 ebN*nQuadraturePoints_element*2+
1235 xt = xtArray + eN*nElementBoundaries_element*nQuadraturePoints_element*3+
1236 ebN*nQuadraturePoints_element*3+
1238 bn = boundaryNormals + ebN*2;
1239 bj = boundaryJacobians + ebN*2;
1240 for(j=0;j<nDOF_element;j++)
1242 j_global = l2g[eN*nDOF_element+
1244 grad = grad_psi + ebN*nQuadraturePoints_element*nDOF_element*2+k*nDOF_element*2 + j*2;
1246 node = nodeArray + j_global*3;
1247 emj[XX] += node[X]*grad[X];
1248 emj[XY] += node[X]*grad[
Y];
1249 emj[YX] += node[
Y]*grad[X];
1250 emj[YY] += node[
Y]*grad[
Y];
1252 oneOverJacDet = 1.0/(emj[XX]*emj[YY]- emj[XY]*emj[YX]);
1253 jacInv[XX] = oneOverJacDet*emj[YY];
1254 jacInv[YX] = -oneOverJacDet*emj[YX];
1255 jacInv[XY] = -oneOverJacDet*emj[XY];
1256 jacInv[YY] = oneOverJacDet*emj[XX];
1257 ebmj[X] = emj[XX]*bj[X]+emj[XY]*bj[
Y];
1258 ebmj[
Y] = emj[YX]*bj[X]+emj[YY]*bj[
Y];
1259 mt[X] = ebmj[X]*ebmj[X]+ebmj[
Y]*ebmj[
Y];
1260 n[X] = jacInv[XX]*bn[X]+jacInv[YX]*bn[
Y];
1261 n[
Y] = jacInv[XY]*bn[X]+jacInv[YY]*bn[
Y];
1262 oneOverNbn= 1.0/sqrt(
n[X]*
n[X]+
n[
Y]*
n[
Y]);
1266 xt_dot_bj =
xt[X]*ebmj[X]+
xt[
Y]*ebmj[
Y];
1270 *mtDetSqrt=sqrt(((1.0+xt_dot_xt)*mt[X] - xt_dot_bj*xt_dot_bj)/(1.0+xt_dot_n*xt_dot_n));
1275 int nElementBoundaries_element,
1276 int nQuadraturePoints_element,
1279 double* boundaryNormals,
1280 double* boundaryJacobians,
1283 double* jacobianInverseArray,
1284 double* metricTensorArray,
1285 double* metricTensorDeterminantSqrtArray,
1286 double* unitNormalArray)
1288 int eN,ebN,k,j,j_global;
1291 double *jacInv=NULL,*mt,*mtDetSqrt,*
n,*grad=NULL,*node=NULL;
1292 register double emj=0.0,ebmj=0.0;
1293 for(eN=0;eN<nElements_global;eN++)
1294 for(ebN=0;ebN<nElementBoundaries_element;ebN++)
1295 for(k=0;k<nQuadraturePoints_element;k++)
1299 jacInv = jacobianInverseArray +
1300 eN*nElementBoundaries_element*nQuadraturePoints_element+
1301 ebN*nQuadraturePoints_element+
1303 mt = metricTensorArray +
1304 eN*nElementBoundaries_element*nQuadraturePoints_element+
1305 ebN*nQuadraturePoints_element+
1307 mtDetSqrt = metricTensorDeterminantSqrtArray +
1308 eN*nElementBoundaries_element*nQuadraturePoints_element+
1309 ebN*nQuadraturePoints_element+
1311 n = unitNormalArray+
1312 eN*nElementBoundaries_element*nQuadraturePoints_element+
1313 ebN*nQuadraturePoints_element+
1315 for(j=0;j<nDOF_element;j++)
1317 j_global = l2g[eN*nDOF_element+
1319 grad = grad_psi + ebN*nQuadraturePoints_element*nDOF_element+k*nDOF_element + j;
1321 node = nodeArray + j_global*3;
1322 emj += node[X]*grad[X];
1324 jacInv[XX] = 1.0/(emj);
1327 n[X] = boundaryNormals[ebN];
1333 int nExteriorElementBoundaries_global,
1334 const int * exteriorElementBoundariesArray,
1335 const int * elementBoundaryElementsArray,
1336 const int * elementBoundaryLocalElementBoundariesArray,
1338 double* boundaryNormals,
1339 double* boundaryJacobians,
1342 double* jacobianInverseArray,
1343 double* metricTensorArray,
1344 double* metricTensorDeterminantSqrtArray,
1345 double* unitNormalArray)
1347 int eN,ebN,ebNE,ebN_local,k,j,j_global;
1350 double *jacInv=NULL,*mt,*mtDetSqrt,*
n,*grad=NULL,*node=NULL;
1351 register double emj=0.0,ebmj=0.0;
1352 for(ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
1354 ebN = exteriorElementBoundariesArray[ebNE];
1355 eN = elementBoundaryElementsArray[ebN*2+0];
1356 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
1357 for(k=0;k<nQuadraturePoints_element;k++)
1361 jacInv = jacobianInverseArray +
1362 ebNE*nQuadraturePoints_element+
1364 mt = metricTensorArray +
1365 ebNE*nQuadraturePoints_element+
1367 mtDetSqrt = metricTensorDeterminantSqrtArray +
1368 ebNE*nQuadraturePoints_element+
1370 n = unitNormalArray+
1371 ebNE*nQuadraturePoints_element+
1373 for(j=0;j<nDOF_element;j++)
1375 j_global = l2g[eN*nDOF_element+
1377 grad = grad_psi + ebN_local*nQuadraturePoints_element*nDOF_element+k*nDOF_element + j;
1379 node = nodeArray + j_global*3;
1380 emj += node[X]*grad[X];
1382 jacInv[XX] = 1.0/(emj);
1385 n[X] = boundaryNormals[ebN_local];
1391 int nExteriorElementBoundaries_global,
1392 const int * exteriorElementBoundariesArray,
1393 const int * elementBoundaryElementsArray,
1394 const int * elementBoundaryLocalElementBoundariesArray,
1396 double* boundaryNormals,
1397 double* boundaryJacobians,
1400 double* jacobianInverseArray,
1401 double* metricTensorArray,
1402 double* metricTensorDeterminantSqrtArray,
1403 double* unitNormalArray)
1405 int eN,ebN,ebNE,ebN_local,k,j,j_global;
1409 double *jacInv=NULL,*mt,*mtDetSqrt,*
n,*grad=NULL,*node=NULL,*bn,*bj;
1410 register double oneOverJacDet=0.0,oneOverNbn=0.0;
1411 double emj[4],ebmj[2];
1412 for(ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
1414 ebN = exteriorElementBoundariesArray[ebNE];
1415 eN = elementBoundaryElementsArray[ebN*2+0];
1416 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
1417 for(k=0;k<nQuadraturePoints_element;k++)
1425 jacInv = jacobianInverseArray +
1426 ebNE*nQuadraturePoints_element*4+
1428 mt = metricTensorArray +
1429 ebNE*nQuadraturePoints_element+
1431 mtDetSqrt = metricTensorDeterminantSqrtArray +
1432 ebNE*nQuadraturePoints_element+
1434 n = unitNormalArray+
1435 ebNE*nQuadraturePoints_element*2+
1437 bn = boundaryNormals + ebN_local*2;
1438 bj = boundaryJacobians + ebN_local*2;
1439 for(j=0;j<nDOF_element;j++)
1441 j_global = l2g[eN*nDOF_element+
1443 grad = grad_psi + ebN_local*nQuadraturePoints_element*nDOF_element*2+k*nDOF_element*2 + j*2;
1445 node = nodeArray + j_global*3;
1446 emj[XX] += node[X]*grad[X];
1447 emj[XY] += node[X]*grad[
Y];
1448 emj[YX] += node[
Y]*grad[X];
1449 emj[YY] += node[
Y]*grad[
Y];
1451 oneOverJacDet = 1.0/(emj[XX]*emj[YY]- emj[XY]*emj[YX]);
1452 jacInv[XX] = oneOverJacDet*emj[YY];
1453 jacInv[YX] = -oneOverJacDet*emj[YX];
1454 jacInv[XY] = -oneOverJacDet*emj[XY];
1455 jacInv[YY] = oneOverJacDet*emj[XX];
1456 ebmj[X] = emj[XX]*bj[XX]+emj[XY]*bj[
Y];
1457 ebmj[
Y] = emj[YX]*bj[X]+emj[YY]*bj[
Y];
1458 mt[X] = ebmj[X]*ebmj[X]+ebmj[
Y]*ebmj[
Y];
1459 *mtDetSqrt=sqrt(mt[XX]);
1460 n[X] = jacInv[XX]*bn[X]+jacInv[YX]*bn[
Y];
1461 n[
Y] = jacInv[XY]*bn[X]+jacInv[YY]*bn[
Y];
1462 oneOverNbn= 1.0/sqrt(
n[X]*
n[X]+
n[
Y]*
n[
Y]);
1471 int nExteriorElementBoundaries_global,
1472 const int * exteriorElementBoundariesArray,
1473 const int * elementBoundaryElementsArray,
1474 const int * elementBoundaryLocalElementBoundariesArray,
1477 double* boundaryNormals,
1478 double* boundaryJacobians,
1481 double* jacobianInverseArray,
1482 double* metricTensorArray,
1483 double* metricTensorDeterminantSqrtArray,
1484 double* unitNormalArray)
1486 int eN,ebN,ebNE,ebN_local,k,j,j_global;
1490 double *jacInv=NULL,*mt,*mtDetSqrt,*
n,*grad=NULL,*node=NULL,*bn,*bj,*
xt;
1491 register double oneOverJacDet=0.0,oneOverNbn=0.0,xt_dot_xt,xt_dot_n,xt_dot_bj;
1492 double emj[4],ebmj[2];
1493 for(ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
1495 ebN = exteriorElementBoundariesArray[ebNE];
1496 eN = elementBoundaryElementsArray[ebN*2+0];
1497 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
1498 for(k=0;k<nQuadraturePoints_element;k++)
1506 jacInv = jacobianInverseArray +
1507 ebNE*nQuadraturePoints_element*4+
1509 mt = metricTensorArray +
1510 ebNE*nQuadraturePoints_element+
1512 mtDetSqrt = metricTensorDeterminantSqrtArray +
1513 ebNE*nQuadraturePoints_element+
1515 n = unitNormalArray+
1516 ebNE*nQuadraturePoints_element*2+
1519 ebNE*nQuadraturePoints_element*3+
1521 bn = boundaryNormals + ebN_local*2;
1522 bj = boundaryJacobians + ebN_local*2;
1523 for(j=0;j<nDOF_element;j++)
1525 j_global = l2g[eN*nDOF_element+
1527 grad = grad_psi + ebN_local*nQuadraturePoints_element*nDOF_element*2+k*nDOF_element*2 + j*2;
1529 node = nodeArray + j_global*3;
1530 emj[XX] += node[X]*grad[X];
1531 emj[XY] += node[X]*grad[
Y];
1532 emj[YX] += node[
Y]*grad[X];
1533 emj[YY] += node[
Y]*grad[
Y];
1535 oneOverJacDet = 1.0/(emj[XX]*emj[YY]- emj[XY]*emj[YX]);
1536 jacInv[XX] = oneOverJacDet*emj[YY];
1537 jacInv[YX] = -oneOverJacDet*emj[YX];
1538 jacInv[XY] = -oneOverJacDet*emj[XY];
1539 jacInv[YY] = oneOverJacDet*emj[XX];
1540 ebmj[X] = emj[XX]*bj[XX]+emj[XY]*bj[
Y];
1541 ebmj[
Y] = emj[YX]*bj[X]+emj[YY]*bj[
Y];
1542 mt[X] = ebmj[X]*ebmj[X]+ebmj[
Y]*ebmj[
Y];
1543 n[X] = jacInv[XX]*bn[X]+jacInv[YX]*bn[
Y];
1544 n[
Y] = jacInv[XY]*bn[X]+jacInv[YY]*bn[
Y];
1545 oneOverNbn= 1.0/sqrt(
n[X]*
n[X]+
n[
Y]*
n[
Y]);
1549 xt_dot_bj =
xt[X]*ebmj[X]+
xt[
Y]*ebmj[
Y];
1552 *mtDetSqrt=sqrt(((1.0+xt_dot_xt)*mt[X] - xt_dot_bj*xt_dot_bj)/(1.0+xt_dot_n*xt_dot_n));
1558 int nExteriorElementBoundaries_global,
1559 const int * exteriorElementBoundariesArray,
1560 const int * elementBoundaryElementsArray,
1561 const int * elementBoundaryLocalElementBoundariesArray,
1563 double* boundaryNormals,
1564 double* boundaryJacobians,
1567 double* jacobianInverseArray,
1568 double* metricTensorArray,
1569 double* metricTensorDeterminantSqrtArray,
1570 double* unitNormalArray)
1572 int eN,ebN,ebNE,ebN_local,k,j,j_global;
1583 double *jacInv=NULL,*mt=NULL,*mtDetSqrt=NULL,*
n=NULL,*grad=NULL,*node=NULL,*bn,*bj;
1584 register double oneOverJacDet=0.0,oneOverNbn=0.0;
1585 double emj[9],ebmj[6];
1586 for(ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
1588 ebN = exteriorElementBoundariesArray[ebNE];
1589 eN = elementBoundaryElementsArray[ebN*2+0];
1590 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
1591 for(k=0;k<nQuadraturePoints_element;k++)
1608 jacInv = jacobianInverseArray +
1609 ebNE*nQuadraturePoints_element*9+
1611 mt = metricTensorArray +
1612 ebNE*nQuadraturePoints_element*4+
1614 mtDetSqrt = metricTensorDeterminantSqrtArray +
1615 ebNE*nQuadraturePoints_element+
1617 n = unitNormalArray+
1618 ebNE*nQuadraturePoints_element*3+
1620 bn = boundaryNormals + ebN_local*3;
1621 bj = boundaryJacobians + ebN_local*6;
1622 for(j=0;j<nDOF_element;j++)
1624 j_global = l2g[eN*nDOF_element+
1626 grad = grad_psi + ebN_local*nQuadraturePoints_element*nDOF_element*3+k*nDOF_element*3 + j*3;
1628 node = nodeArray + j_global*3;
1629 emj[XX] += node[X]*grad[X];
1630 emj[XY] += node[X]*grad[
Y];
1631 emj[XZ] += node[X]*grad[Z];
1632 emj[YX] += node[
Y]*grad[X];
1633 emj[YY] += node[
Y]*grad[
Y];
1634 emj[YZ] += node[
Y]*grad[Z];
1635 emj[ZX] += node[Z]*grad[X];
1636 emj[ZY] += node[Z]*grad[
Y];
1637 emj[ZZ] += node[Z]*grad[Z];
1639 oneOverJacDet = 1.0/(emj[XX]*(emj[YY]*emj[ZZ] - emj[YZ]*emj[ZY]) -
1640 emj[XY]*(emj[YX]*emj[ZZ] - emj[YZ]*emj[ZX]) +
1641 emj[XZ]*(emj[YX]*emj[ZY] - emj[YY]*emj[ZX]));
1642 jacInv[XX] = oneOverJacDet*(emj[YY]*emj[ZZ] - emj[YZ]*emj[ZY]);
1643 jacInv[YX] = oneOverJacDet*(emj[YZ]*emj[ZX] - emj[YX]*emj[ZZ]);
1644 jacInv[ZX] = oneOverJacDet*(emj[YX]*emj[ZY] - emj[YY]*emj[ZX]);
1645 jacInv[XY] = oneOverJacDet*(emj[ZY]*emj[XZ] - emj[ZZ]*emj[XY]);
1646 jacInv[YY] = oneOverJacDet*(emj[ZZ]*emj[XX] - emj[ZX]*emj[XZ]);
1647 jacInv[ZY] = oneOverJacDet*(emj[ZX]*emj[XY] - emj[ZY]*emj[XX]);
1648 jacInv[XZ] = oneOverJacDet*(emj[XY]*emj[YZ] - emj[XZ]*emj[YY]);
1649 jacInv[YZ] = oneOverJacDet*(emj[XZ]*emj[YX] - emj[XX]*emj[YZ]);
1650 jacInv[ZZ] = oneOverJacDet*(emj[XX]*emj[YY] - emj[XY]*emj[YX]);
1652 ebmj[XHX] = emj[XX]*bj[XHX]+emj[XY]*bj[YHX]+emj[XZ]*bj[ZHX];
1653 ebmj[XHY] = emj[XX]*bj[XHY]+emj[XY]*bj[YHY]+emj[XZ]*bj[ZHY];
1654 ebmj[YHX] = emj[YX]*bj[XHX]+emj[YY]*bj[YHX]+emj[YZ]*bj[ZHX];
1655 ebmj[YHY] = emj[YX]*bj[XHY]+emj[YY]*bj[YHY]+emj[YZ]*bj[ZHY];
1656 ebmj[ZHX] = emj[ZX]*bj[XHX]+emj[ZY]*bj[YHX]+emj[ZZ]*bj[ZHX];
1657 ebmj[ZHY] = emj[ZX]*bj[XHY]+emj[ZY]*bj[YHY]+emj[ZZ]*bj[ZHY];
1659 mt[HXHX] = ebmj[XHX]*ebmj[XHX]+ebmj[YHX]*ebmj[YHX]+ebmj[ZHX]*ebmj[ZHX];
1660 mt[HXHY] = ebmj[XHX]*ebmj[XHY]+ebmj[YHX]*ebmj[YHY]+ebmj[ZHX]*ebmj[ZHY];
1661 mt[HYHX] = ebmj[XHY]*ebmj[XHX]+ebmj[YHY]*ebmj[YHX]+ebmj[ZHY]*ebmj[ZHX];
1662 mt[HYHY] = ebmj[XHY]*ebmj[XHY]+ebmj[YHY]*ebmj[YHY]+ebmj[ZHY]*ebmj[ZHY];
1664 *mtDetSqrt=sqrt(mt[HXHX]*mt[HYHY]- mt[HXHY]*mt[HYHX]);
1667 n[X] = (jacInv[XX]*bn[X]+jacInv[YX]*bn[
Y]+jacInv[ZX]*bn[Z]);
1668 n[
Y] = (jacInv[XY]*bn[X]+jacInv[YY]*bn[
Y]+jacInv[ZY]*bn[Z]);
1669 n[Z] = (jacInv[XZ]*bn[X]+jacInv[YZ]*bn[
Y]+jacInv[ZZ]*bn[Z]);
1671 oneOverNbn = 1.0/sqrt(
n[X]*
n[X]+
n[
Y]*
n[
Y]+
n[Z]*
n[Z]);
1713 int nQuadraturePoints_element,
1714 int nDOF_test_element,
1717 double* weak_residual)
1720 for(eN=0;eN<nElements_global;eN++)
1721 for (i=0;i<nDOF_test_element;i++)
1722 for (k=0;k<nQuadraturePoints_element;k++)
1723 weak_residual[eN*nDOF_test_element +
1726 mt[eN*nQuadraturePoints_element +
1729 w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
1730 k*nDOF_test_element +
1774 int nQuadraturePoints_element,
1775 int nDOF_trial_element,
1776 int nDOF_test_element,
1779 double* jacobian_weak_residual)
1781 int eN,i,j,k,nDOF_test_X_trial_element=nDOF_trial_element*nDOF_test_element;
1782 for(eN=0;eN<nElements_global;eN++)
1783 for (i=0;i<nDOF_test_element;i++)
1784 for (k=0;k<nQuadraturePoints_element;k++)
1785 for (j=0;j<nDOF_trial_element;j++)
1786 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
1787 i*nDOF_trial_element+
1790 dmt[eN*nQuadraturePoints_element +
1793 v_X_w_dV[eN*nQuadraturePoints_element*nDOF_test_X_trial_element +
1794 k*nDOF_test_X_trial_element +
1795 j*nDOF_test_element+
1800 int nQuadraturePoints_element,
1801 int nDOF_trial_element,
1802 int nDOF_test_element,
1806 double* jacobian_weak_residual)
1808 int eN,i,j,k,nDOF_test_X_trial_element=nDOF_trial_element*nDOF_test_element;
1809 for(eN=0;eN<nElements_global;eN++)
1810 for (i=0;i<nDOF_test_element;i++)
1811 for (k=0;k<nQuadraturePoints_element;k++)
1812 for (j=0;j<nDOF_trial_element;j++)
1813 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
1814 i*nDOF_trial_element+
1817 dmt[eN*nQuadraturePoints_element +
1820 v[eN*nQuadraturePoints_element*nDOF_trial_element +
1821 k*nDOF_trial_element +
1824 w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
1825 k*nDOF_test_element +
1849 int nQuadraturePoints_element,
1851 double* strong_residual)
1854 for(eN=0;eN<nElements_global;eN++)
1855 for (k=0;k<nQuadraturePoints_element;k++)
1856 strong_residual[eN*nQuadraturePoints_element+
1859 mt[eN*nQuadraturePoints_element+
1888 int nQuadraturePoints_element,
1889 int nDOF_trial_element,
1892 double* dstrong_residual)
1895 for(eN=0;eN<nElements_global;eN++)
1896 for(j=0;j<nDOF_trial_element;j++)
1897 for (k=0;k<nQuadraturePoints_element;k++)
1898 dstrong_residual[eN*nQuadraturePoints_element*nDOF_trial_element+
1899 k*nDOF_trial_element +
1902 dmt[eN*nQuadraturePoints_element+
1905 v[eN*nQuadraturePoints_element*nDOF_trial_element+
1906 k*nDOF_trial_element +
1936 int nQuadraturePoints_element,
1937 int nDOF_test_element,
1943 for(eN=0;eN<nElements_global;eN++)
1944 for (i=0;i<nDOF_test_element;i++)
1945 for (k=0;k<nQuadraturePoints_element;k++)
1946 Lstar_w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
1947 k*nDOF_test_element +
1950 dmt[eN*nQuadraturePoints_element +
1953 w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
1954 k*nDOF_test_element +
2000 int nQuadraturePoints_element,
2001 int nDOF_test_element,
2005 double* weak_residual)
2008 for(eN=0;eN<nElements_global;eN++)
2009 for (i=0;i<nDOF_test_element;i++)
2010 for (k=0;k<nQuadraturePoints_element;k++)
2011 for (I=0;I<nSpace;I++)
2012 weak_residual[eN*nDOF_test_element +
2015 f[eN*nQuadraturePoints_element*nSpace +
2019 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
2020 k*nDOF_test_element*nSpace +
2070 int nQuadraturePoints_element,
2071 int nDOF_trial_element,
2072 int nDOF_test_element,
2075 double* v_X_grad_w_dV,
2076 double* jacobian_weak_residual)
2078 int eN,i,j,k,I,nDOF_test_X_trial_element=nDOF_trial_element*nDOF_test_element;
2079 for(eN=0;eN<nElements_global;eN++)
2080 for (i=0;i<nDOF_test_element;i++)
2081 for (k=0;k<nQuadraturePoints_element;k++)
2082 for (j=0;j<nDOF_trial_element;j++)
2083 for (I=0;I<nSpace;I++)
2084 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
2085 i*nDOF_trial_element+
2088 df[eN*nQuadraturePoints_element*nSpace +
2092 v_X_grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_X_trial_element*nSpace +
2093 k*nDOF_test_X_trial_element*nSpace +
2094 j*nDOF_test_element*nSpace +
2100 int nQuadraturePoints_element,
2101 int nDOF_trial_element,
2102 int nDOF_test_element,
2107 double* jacobian_weak_residual)
2109 int eN,i,j,k,I,nDOF_test_X_trial_element=nDOF_trial_element*nDOF_test_element;
2110 for(eN=0;eN<nElements_global;eN++)
2111 for (i=0;i<nDOF_test_element;i++)
2112 for (k=0;k<nQuadraturePoints_element;k++)
2113 for (j=0;j<nDOF_trial_element;j++)
2114 for (I=0;I<nSpace;I++)
2115 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
2116 i*nDOF_trial_element+
2119 df[eN*nQuadraturePoints_element*nSpace +
2123 v[eN*nQuadraturePoints_element*nDOF_trial_element +
2124 k*nDOF_trial_element +
2127 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
2128 k*nDOF_test_element*nSpace +
2158 int nQuadraturePoints_element,
2162 double* strong_residual)
2165 for(eN=0;eN<nElements_global;eN++)
2166 for (k=0;k<nQuadraturePoints_element;k++)
2167 for(I=0;I<nSpace;I++)
2168 strong_residual[eN*nQuadraturePoints_element+
2171 df[eN*nQuadraturePoints_element*nSpace +
2175 grad_u[eN*nQuadraturePoints_element*nSpace +
2205 int nQuadraturePoints_element,
2206 int nDOF_trial_element,
2210 double* dstrong_residual)
2213 for(eN=0;eN<nElements_global;eN++)
2214 for(j=0;j<nDOF_trial_element;j++)
2215 for (k=0;k<nQuadraturePoints_element;k++)
2216 for (I=0;I<nSpace;I++)
2217 dstrong_residual[eN*nQuadraturePoints_element*nDOF_trial_element+
2218 k*nDOF_trial_element +
2221 df[eN*nQuadraturePoints_element*nSpace +
2225 grad_v[eN*nQuadraturePoints_element*nSpace*nDOF_trial_element +
2226 k*nSpace*nDOF_trial_element +
2262 int nQuadraturePoints_element,
2263 int nDOF_test_element,
2270 for(eN=0;eN<nElements_global;eN++)
2271 for (i=0;i<nDOF_test_element;i++)
2272 for (k=0;k<nQuadraturePoints_element;k++)
2273 for (I=0;I<nSpace;I++)
2274 Lstar_w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
2275 k*nDOF_test_element +
2278 df[eN*nQuadraturePoints_element*nSpace +
2282 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
2283 k*nDOF_test_element*nSpace +
2321 int nQuadraturePoints_element,
2322 int nDOF_test_element,
2325 double* weak_residual)
2328 for(eN=0;eN<nElements_global;eN++)
2329 for (i=0;i<nDOF_test_element;i++)
2330 for (k=0;k<nQuadraturePoints_element;k++)
2331 weak_residual[eN*nDOF_test_element + i]
2333 H[eN*nQuadraturePoints_element +
2336 w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
2337 k*nDOF_test_element +
2387 int nQuadraturePoints_element,
2388 int nDOF_trial_element,
2389 int nDOF_test_element,
2392 double* grad_v_X_w_dV,
2393 double* jacobian_weak_residual)
2395 int eN,i,j,k,I,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
2396 for(eN=0;eN<nElements_global;eN++)
2397 for (i=0;i<nDOF_test_element;i++)
2398 for (k=0;k<nQuadraturePoints_element;k++)
2399 for (j=0;j<nDOF_trial_element;j++)
2400 for (I=0;I<nSpace;I++)
2401 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
2402 i*nDOF_trial_element +
2405 dH[eN*nQuadraturePoints_element*nSpace +
2409 grad_v_X_w_dV[eN*nQuadraturePoints_element*nDOF_test_X_trial_element*nSpace +
2410 k*nDOF_test_X_trial_element*nSpace +
2411 j*nDOF_test_element*nSpace +
2417 int nQuadraturePoints_element,
2418 int nDOF_trial_element,
2419 int nDOF_test_element,
2424 double* jacobian_weak_residual)
2426 int eN,i,j,k,I,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
2427 for(eN=0;eN<nElements_global;eN++)
2428 for (i=0;i<nDOF_test_element;i++)
2429 for (k=0;k<nQuadraturePoints_element;k++)
2430 for (j=0;j<nDOF_trial_element;j++)
2431 for (I=0;I<nSpace;I++)
2432 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
2433 i*nDOF_trial_element +
2436 dH[eN*nQuadraturePoints_element*nSpace +
2440 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
2441 k*nDOF_trial_element*nSpace +
2445 w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
2446 k*nDOF_test_element +
2477 int nQuadraturePoints_element,
2481 double* strong_residual)
2484 for(eN=0;eN<nElements_global;eN++)
2485 for (k=0;k<nQuadraturePoints_element;k++)
2486 for (I=0;I<nSpace;I++)
2487 strong_residual[eN*nQuadraturePoints_element+k]
2489 dH[eN*nQuadraturePoints_element*nSpace+
2493 grad_u[eN*nQuadraturePoints_element*nSpace+
2523 int nQuadraturePoints_element,
2524 int nDOF_trial_element,
2528 double* dstrong_residual)
2531 for(eN=0;eN<nElements_global;eN++)
2532 for(j=0;j<nDOF_trial_element;j++)
2533 for (k=0;k<nQuadraturePoints_element;k++)
2534 for (I=0;I<nSpace;I++)
2535 dstrong_residual[eN*nQuadraturePoints_element*nDOF_trial_element+
2536 k*nDOF_trial_element +
2539 dH[eN*nQuadraturePoints_element*nSpace+
2543 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace+
2544 k*nDOF_trial_element*nSpace +
2581 int nQuadraturePoints_element,
2582 int nDOF_test_element,
2589 for(eN=0;eN<nElements_global;eN++)
2590 for (i=0;i<nDOF_test_element;i++)
2591 for (k=0;k<nQuadraturePoints_element;k++)
2592 for (I=0;I<nSpace;I++)
2593 Lstar_w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
2594 k*nDOF_test_element +
2597 dH[eN*nQuadraturePoints_element*nSpace +
2601 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
2602 k*nDOF_test_element*nSpace +
2649 int nQuadraturePoints_element,
2650 int nDOF_test_element,
2653 double* grad_phi_X_grad_w_dV,
2654 double* weak_residual)
2656 int eN,i,k,I,J,nSpace2=nSpace*nSpace;
2657 for(eN=0;eN<nElements_global;eN++)
2658 for (i=0;i<nDOF_test_element;i++)
2659 for (k=0;k<nQuadraturePoints_element;k++)
2660 for (I=0;I<nSpace;I++)
2661 for (J=0;J<nSpace;J++)
2662 weak_residual[eN*nDOF_test_element + i]
2664 a[eN*nQuadraturePoints_element*nSpace2 +
2669 grad_phi_X_grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace2 +
2670 k*nDOF_test_element*nSpace2 +
2677 int nQuadraturePoints_element,
2678 int nDOF_test_element,
2683 double* weak_residual)
2685 int eN,i,k,I,J,nSpace2=nSpace*nSpace;
2686 for(eN=0;eN<nElements_global;eN++)
2687 for (i=0;i<nDOF_test_element;i++)
2688 for (k=0;k<nQuadraturePoints_element;k++)
2689#ifdef SCALAR_DIFFUSION
2690 for (I=0;I<nSpace;I++)
2693 weak_residual[eN*nDOF_test_element + i]
2695 a[eN*nQuadraturePoints_element*nSpace2 +
2698 grad_phi[eN*nQuadraturePoints_element*nSpace +
2702 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
2703 k*nDOF_test_element*nSpace +
2708 for (I=0;I<nSpace;I++)
2709 for (J=0;J<nSpace;J++)
2710 weak_residual[eN*nDOF_test_element + i]
2712 a[eN*nQuadraturePoints_element*nSpace2 +
2717 grad_phi[eN*nQuadraturePoints_element*nSpace +
2721 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
2722 k*nDOF_test_element*nSpace +
2729 int nQuadraturePoints_element,
2730 int nDOF_test_element,
2737 double* weak_residual)
2739 int eN,i,k,I,m,
nnz=rowptr[nSpace];
2740 for(eN=0;eN<nElements_global;eN++)
2741 for (i=0;i<nDOF_test_element;i++)
2742 for (k=0;k<nQuadraturePoints_element;k++)
2743 for (I=0;I<nSpace;I++)
2744 for (m=rowptr[I];m<rowptr[I+1];m++)
2745 weak_residual[eN*nDOF_test_element + i]
2747 a[eN*nQuadraturePoints_element*
nnz+
2751 grad_phi[eN*nQuadraturePoints_element*nSpace +
2755 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
2756 k*nDOF_test_element*nSpace +
2834 int nQuadraturePoints_element,
2835 int nDOF_trial_element,
2836 int nDOF_test_element,
2841 double* grad_phi_X_grad_w_dV,
2844 double* grad_v_X_grad_w_dV,
2845 double* jacobian_weak_residual)
2847 int eN,i,j,k,I,J,nSpace2=nSpace*nSpace,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
2848 double daProduct,dphiProduct;
2849 for(eN=0;eN<nElements_global;eN++)
2850 for (i=0;i<nDOF_test_element;i++)
2851 for (k=0;k<nQuadraturePoints_element;k++)
2854 for (I=0;I<nSpace;I++)
2855 for (J=0;J<nSpace;J++)
2858 da[eN*nQuadraturePoints_element*nSpace2 +
2863 grad_phi_X_grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace2 +
2864 k*nDOF_test_element*nSpace2 +
2868 for (j=0;j<nDOF_trial_element;j++)
2871 for (I=0;I<nSpace;I++)
2872 for (J=0;J<nSpace;J++)
2875 a[eN*nQuadraturePoints_element*nSpace2 +
2880 grad_v_X_grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_X_trial_element*nSpace2 +
2881 k*nDOF_test_X_trial_element*nSpace2 +
2882 j*nDOF_test_element*nSpace2 +
2886 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
2887 i*nDOF_trial_element +
2892 v[eN*nQuadraturePoints_element*nDOF_trial_element+
2893 k*nDOF_trial_element+
2898 dphi[l2g[eN*nDOF_trial_element +
2905 int nQuadraturePoints_element,
2906 int nDOF_trial_element,
2907 int nDOF_test_element,
2917 double* jacobian_weak_residual)
2919 int eN,i,j,k,I,J,nSpace2=nSpace*nSpace,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
2920 double daProduct,dphiProduct;
2921 for(eN=0;eN<nElements_global;eN++)
2922 for (i=0;i<nDOF_test_element;i++)
2923 for (k=0;k<nQuadraturePoints_element;k++)
2926#ifdef SCALAR_DIFFUSION
2927 for (I=0;I<nSpace;I++)
2932 da[eN*nQuadraturePoints_element*nSpace2 +
2935 grad_phi[eN*nQuadraturePoints_element*nSpace +
2939 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
2940 k*nDOF_test_element*nSpace +
2944 for (j=0;j<nDOF_trial_element;j++)
2947 for (I=0;I<nSpace;I++)
2952 a[eN*nQuadraturePoints_element*nSpace2 +
2955 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
2956 k*nDOF_trial_element*nSpace +
2960 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
2961 k*nDOF_test_element*nSpace +
2965 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
2966 i*nDOF_trial_element +
2971 v[eN*nQuadraturePoints_element*nDOF_trial_element+
2972 k*nDOF_trial_element+
2977 dphi[l2g[eN*nDOF_trial_element +
2981 for (I=0;I<nSpace;I++)
2982 for (J=0;J<nSpace;J++)
2985 da[eN*nQuadraturePoints_element*nSpace2 +
2990 grad_phi[eN*nQuadraturePoints_element*nSpace +
2994 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
2995 k*nDOF_test_element*nSpace +
2998 for (j=0;j<nDOF_trial_element;j++)
3001 for (I=0;I<nSpace;I++)
3002 for (J=0;J<nSpace;J++)
3005 a[eN*nQuadraturePoints_element*nSpace2 +
3010 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
3011 k*nDOF_trial_element*nSpace +
3015 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
3016 k*nDOF_test_element*nSpace +
3019 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
3020 i*nDOF_trial_element +
3025 v[eN*nQuadraturePoints_element*nDOF_trial_element+
3026 k*nDOF_trial_element+
3031 dphi[l2g[eN*nDOF_trial_element +
3038 int nQuadraturePoints_element,
3039 int nDOF_trial_element,
3040 int nDOF_test_element,
3052 double* jacobian_weak_residual)
3054 int eN,i,j,k,I,m,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,
nnz=rowptr[nSpace];
3055 double daProduct,dphiProduct;
3056 for(eN=0;eN<nElements_global;eN++)
3057 for (i=0;i<nDOF_test_element;i++)
3058 for (k=0;k<nQuadraturePoints_element;k++)
3061 for (I=0;I<nSpace;I++)
3062 for (m=rowptr[I];m<rowptr[I+1];m++)
3065 da[eN*nQuadraturePoints_element*
nnz+
3069 grad_phi[eN*nQuadraturePoints_element*nSpace +
3073 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
3074 k*nDOF_test_element*nSpace +
3077 for (j=0;j<nDOF_trial_element;j++)
3080 for (I=0;I<nSpace;I++)
3081 for(m=rowptr[I];m<rowptr[I+1];m++)
3084 a[eN*nQuadraturePoints_element*
nnz +
3088 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
3089 k*nDOF_trial_element*nSpace +
3093 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
3094 k*nDOF_test_element*nSpace +
3097 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
3098 i*nDOF_trial_element +
3103 v[eN*nQuadraturePoints_element*nDOF_trial_element+
3104 k*nDOF_trial_element+
3109 dphi[l2g[eN*nDOF_trial_element +
3140 int nQuadraturePoints_element,
3145 double* strong_residual)
3147 int eN,k,I,J,nSpace2=nSpace*nSpace;
3148 for(eN=0;eN<nElements_global;eN++)
3149 for (k=0;k<nQuadraturePoints_element;k++)
3150 for(I=0;I<nSpace;I++)
3151 for (J=0;J<nSpace;J++)
3152 strong_residual[eN*nQuadraturePoints_element+
3155 da[eN*nQuadraturePoints_element*nSpace2 +
3160 grad_phi[eN*nQuadraturePoints_element*nSpace +
3163 *grad_u[eN*nQuadraturePoints_element*nSpace +
3168 int nQuadraturePoints_element,
3175 double* strong_residual)
3177 int eN,k,I,m,
nnz=rowptr[nSpace];
3178 for(eN=0;eN<nElements_global;eN++)
3179 for (k=0;k<nQuadraturePoints_element;k++)
3180 for(I=0;I<nSpace;I++)
3181 for(m=rowptr[I];m<rowptr[I+1];m++)
3182 strong_residual[eN*nQuadraturePoints_element+
3185 da[eN*nQuadraturePoints_element*
nnz +
3189 grad_phi[eN*nQuadraturePoints_element*nSpace +
3192 *grad_u[eN*nQuadraturePoints_element*nSpace +
3222 int nQuadraturePoints_element,
3223 int nDOF_trial_element,
3231 double* dstrong_residual)
3233 int eN,k,j,I,J,nSpace2=nSpace*nSpace;
3234 for(eN=0;eN<nElements_global;eN++)
3235 for (k=0;k<nQuadraturePoints_element;k++)
3236 for(j=0;j<nDOF_trial_element;j++)
3237 for(I=0;I<nSpace;I++)
3238 for(J=0;J<nSpace;J++)
3240 dstrong_residual[eN*nQuadraturePoints_element*nDOF_trial_element+
3241 k*nDOF_trial_element +
3244 da[eN*nQuadraturePoints_element*nSpace2 +
3250 grad_phi[eN*nQuadraturePoints_element*nSpace +
3254 grad_v[eN*nQuadraturePoints_element*nSpace*nDOF_trial_element +
3255 k*nSpace*nDOF_trial_element +
3259 dphi[l2g[eN*nDOF_trial_element +
3261 grad_v[eN*nQuadraturePoints_element*nSpace*nDOF_trial_element +
3262 k*nSpace*nDOF_trial_element +
3266 grad_u[eN*nQuadraturePoints_element*nSpace+
3273 int nQuadraturePoints_element,
3274 int nDOF_trial_element,
3284 double* dstrong_residual)
3286 int eN,k,j,I,m,
nnz=rowptr[nSpace];
3287 for(eN=0;eN<nElements_global;eN++)
3288 for (k=0;k<nQuadraturePoints_element;k++)
3289 for(j=0;j<nDOF_trial_element;j++)
3290 for(I=0;I<nSpace;I++)
3291 for(m=rowptr[I];m<rowptr[I+1];m++)
3293 dstrong_residual[eN*nQuadraturePoints_element*nDOF_trial_element+
3294 k*nDOF_trial_element +
3297 da[eN*nQuadraturePoints_element*
nnz +
3302 grad_phi[eN*nQuadraturePoints_element*nSpace +
3306 grad_v[eN*nQuadraturePoints_element*nSpace*nDOF_trial_element +
3307 k*nSpace*nDOF_trial_element +
3311 dphi[l2g[eN*nDOF_trial_element +
3313 grad_v[eN*nQuadraturePoints_element*nSpace*nDOF_trial_element +
3314 k*nSpace*nDOF_trial_element +
3318 grad_u[eN*nQuadraturePoints_element*nSpace+
3359 int nQuadraturePoints_element,
3360 int nDOF_test_element,
3367 int eN,i,k,I,J,nSpace2=nSpace*nSpace;
3368 for(eN=0;eN<nElements_global;eN++)
3369 for (i=0;i<nDOF_test_element;i++)
3370 for (k=0;k<nQuadraturePoints_element;k++)
3371 for (I=0;I<nSpace;I++)
3372 for(J=0;J<nSpace;J++)
3373 Lstar_w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
3374 k*nDOF_test_element +
3377 da[eN*nQuadraturePoints_element*nSpace2 +
3382 grad_phi[eN*nQuadraturePoints_element*nSpace+
3386 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
3387 k*nDOF_test_element*nSpace +
3393 int nQuadraturePoints_element,
3394 int nDOF_test_element,
3403 int eN,i,k,I,m,
nnz=rowptr[nSpace];
3404 for(eN=0;eN<nElements_global;eN++)
3405 for (i=0;i<nDOF_test_element;i++)
3406 for (k=0;k<nQuadraturePoints_element;k++)
3407 for (I=0;I<nSpace;I++)
3408 for(m=rowptr[I];m<rowptr[I+1];m++)
3409 Lstar_w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
3410 k*nDOF_test_element +
3413 da[eN*nQuadraturePoints_element*
nnz +
3417 grad_phi[eN*nQuadraturePoints_element*nSpace+
3421 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
3422 k*nDOF_test_element*nSpace +
3428 int nQuadraturePoints_element,
3432 double* strong_residual)
3434 int eN,k,I,J,nSpace2=nSpace*nSpace;
3435 for(eN=0;eN<nElements_global;eN++)
3436 for (k=0;k<nQuadraturePoints_element;k++)
3437 for(I=0;I<nSpace;I++)
3438 for (J=0;J<nSpace;J++)
3440 strong_residual[eN*nQuadraturePoints_element+
3443 a[eN*nQuadraturePoints_element*nSpace2 +
3448 Hess_phi[eN*nQuadraturePoints_element*nSpace2 +
3456 int nQuadraturePoints_element,
3462 double* strong_residual)
3464 int eN,k,I,m,nSpace2=nSpace*nSpace,
nnz=rowptr[nSpace];
3465 for(eN=0;eN<nElements_global;eN++)
3466 for (k=0;k<nQuadraturePoints_element;k++)
3467 for(I=0;I<nSpace;I++)
3468 for (m=rowptr[I];m<rowptr[I+1];m++)
3470 strong_residual[eN*nQuadraturePoints_element+
3473 a[eN*nQuadraturePoints_element*
nnz +
3477 Hess_phi[eN*nQuadraturePoints_element*nSpace2 +
3485 int nQuadraturePoints_element,
3486 int nDOF_trial_element,
3495 double* dstrong_residual)
3497 int eN,k,j,I,J,nSpace2=nSpace*nSpace;
3499 for(eN=0;eN<nElements_global;eN++)
3500 for (k=0;k<nQuadraturePoints_element;k++)
3501 for (j=0;j<nDOF_trial_element;j++)
3502 for(I=0;I<nSpace;I++)
3503 for (J=0;J<nSpace;J++)
3505 dstrong_residual[eN*nQuadraturePoints_element*nDOF_trial_element+
3506 k*nDOF_trial_element+
3509 (da[eN*nQuadraturePoints_element*nSpace2 +
3514 v[eN*nQuadraturePoints_element*nDOF_trial_element+
3515 k*nDOF_trial_element+
3518 Hess_phi[eN*nQuadraturePoints_element*nSpace2 +
3523 a[eN*nQuadraturePoints_element*nSpace2 +
3528 dphi[l2g[eN*nDOF_trial_element +
3531 Hess_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace2 +
3532 k*nDOF_trial_element*nSpace2 +
3540 int nQuadraturePoints_element,
3541 int nDOF_trial_element,
3552 double* dstrong_residual)
3554 int eN,k,j,I,m,nSpace2=nSpace*nSpace,
nnz=rowptr[nSpace];
3556 for(eN=0;eN<nElements_global;eN++)
3557 for (k=0;k<nQuadraturePoints_element;k++)
3558 for (j=0;j<nDOF_trial_element;j++)
3559 for(I=0;I<nSpace;I++)
3560 for (m=rowptr[I];m<rowptr[I+1];m++)
3562 dstrong_residual[eN*nQuadraturePoints_element*nDOF_trial_element+
3563 k*nDOF_trial_element+
3566 (da[eN*nQuadraturePoints_element*
nnz+
3570 v[eN*nQuadraturePoints_element*nDOF_trial_element+
3571 k*nDOF_trial_element+
3574 Hess_phi[eN*nQuadraturePoints_element*nSpace2 +
3579 a[eN*nQuadraturePoints_element*
nnz+
3583 dphi[l2g[eN*nDOF_trial_element +
3586 Hess_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace2 +
3587 k*nDOF_trial_element*nSpace2 +
3595 int nQuadraturePoints_element,
3596 int nDOF_test_element,
3602 int eN,i,k,I,J,nSpace2=nSpace*nSpace;
3603 for(eN=0;eN<nElements_global;eN++)
3604 for (i=0;i<nDOF_test_element;i++)
3605 for (k=0;k<nQuadraturePoints_element;k++)
3606 for (I=0;I<nSpace;I++)
3607 for(J=0;J<nSpace;J++)
3609 Lstar_w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
3610 k*nDOF_test_element +
3613 a[eN*nQuadraturePoints_element*nSpace2 +
3618 Hess_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace2 +
3619 k*nDOF_test_element*nSpace2 +
3628 int nQuadraturePoints_element,
3629 int nDOF_test_element,
3637 int eN,i,k,I,m,nSpace2=nSpace*nSpace,
nnz=rowptr[nSpace];
3638 for(eN=0;eN<nElements_global;eN++)
3639 for (i=0;i<nDOF_test_element;i++)
3640 for (k=0;k<nQuadraturePoints_element;k++)
3641 for (I=0;I<nSpace;I++)
3642 for(m=rowptr[I];m<rowptr[I+1];m++)
3644 Lstar_w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
3645 k*nDOF_test_element +
3648 a[eN*nQuadraturePoints_element*
nnz+
3652 Hess_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace2 +
3653 k*nDOF_test_element*nSpace2 +
3695 int nQuadraturePoints_element,
3696 int nDOF_test_element,
3699 double* weak_residual)
3701 updateMass_weak(nElements_global,nQuadraturePoints_element,nDOF_test_element,
r,w_dV,weak_residual);
3744 int nQuadraturePoints_element,
3745 int nDOF_trial_element,
3746 int nDOF_test_element,
3749 double* jacobian_weak_residual)
3751 updateMassJacobian_weak(nElements_global,nQuadraturePoints_element,nDOF_trial_element,nDOF_test_element,dr,v_X_w_dV,jacobian_weak_residual);
3755 int nQuadraturePoints_element,
3756 int nDOF_trial_element,
3757 int nDOF_test_element,
3761 double* jacobian_weak_residual)
3764 v,w_dV,jacobian_weak_residual);
3786 int nQuadraturePoints_element,
3788 double* strong_residual)
3791 for(eN=0;eN<nElements_global;eN++)
3792 for (k=0;k<nQuadraturePoints_element;k++)
3793 strong_residual[eN*nQuadraturePoints_element+
3796 r[eN*nQuadraturePoints_element+
3820 int nQuadraturePoints_element,
3821 int nDOF_trial_element,
3824 double* dstrong_residual)
3827 for(eN=0;eN<nElements_global;eN++)
3828 for(j=0;j<nDOF_trial_element;j++)
3829 for (k=0;k<nQuadraturePoints_element;k++)
3830 dstrong_residual[eN*nQuadraturePoints_element*nDOF_trial_element+
3831 k*nDOF_trial_element +
3834 dr[eN*nQuadraturePoints_element+
3837 v[eN*nQuadraturePoints_element*nDOF_trial_element+
3838 k*nDOF_trial_element +
3867 int nQuadraturePoints_element,
3868 int nDOF_test_element,
3874 for(eN=0;eN<nElements_global;eN++)
3875 for (i=0;i<nDOF_test_element;i++)
3876 for (k=0;k<nQuadraturePoints_element;k++)
3877 Lstar_w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
3878 k*nDOF_test_element +
3881 dr[eN*nQuadraturePoints_element +
3884 w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
3885 k*nDOF_test_element +
3924 int nQuadraturePoints_element,
3925 int nDOF_test_element,
3928 double* weak_residual)
3931 for(eN=0;eN<nElements_global;eN++)
3932 for (i=0;i<nDOF_test_element;i++)
3933 for (k=0;k<nQuadraturePoints_element;k++)
3934 weak_residual[eN*nDOF_test_element + i]
3936 error[eN*nQuadraturePoints_element +
3939 Lstar_w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
3940 k*nDOF_test_element +
3984 int nQuadraturePoints_element,
3985 int nDOF_trial_element,
3986 int nDOF_test_element,
3989 double* jacobian_weak_residual)
3991 int eN,i,j,k,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
3992 for(eN=0;eN<nElements_global;eN++)
3993 for (i=0;i<nDOF_test_element;i++)
3994 for (k=0;k<nQuadraturePoints_element;k++)
3995 for (j=0;j<nDOF_trial_element;j++)
3996 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
3997 i*nDOF_trial_element +
4000 derror[eN*nQuadraturePoints_element*nDOF_trial_element+
4001 k*nDOF_trial_element+
4004 Lstar_w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
4005 k*nDOF_test_element +
4049 int nQuadraturePoints_element,
4050 int nDOF_test_element,
4053 double* grad_u_X_grad_w_dV,
4054 double* weak_residual)
4056 int eN,i,k,I,nSpace2=nSpace*nSpace;
4057 for(eN=0;eN<nElements_global;eN++)
4058 for (i=0;i<nDOF_test_element;i++)
4059 for (k=0;k<nQuadraturePoints_element;k++)
4060 for (I=0;I<nSpace;I++)
4061 weak_residual[eN*nDOF_test_element + i]
4063 numDiff[eN*nQuadraturePoints_element +
4066 grad_u_X_grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace2 +
4067 k*nDOF_test_element*nSpace2 +
4074 int nQuadraturePoints_element,
4075 int nDOF_test_element,
4080 double* weak_residual)
4083 for(eN=0;eN<nElements_global;eN++)
4084 for (i=0;i<nDOF_test_element;i++)
4085 for (k=0;k<nQuadraturePoints_element;k++)
4086 for (I=0;I<nSpace;I++)
4087 weak_residual[eN*nDOF_test_element + i]
4089 numDiff[eN*nQuadraturePoints_element +
4092 grad_u[eN*nQuadraturePoints_element*nSpace +
4096 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
4097 k*nDOF_test_element*nSpace +
4146 int nQuadraturePoints_element,
4147 int nDOF_trial_element,
4148 int nDOF_test_element,
4151 double* grad_v_X_grad_w_dV,
4152 double* jacobian_weak_residual)
4154 int eN,i,j,k,I,nSpace2=nSpace*nSpace,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
4155 for(eN=0;eN<nElements_global;eN++)
4156 for (i=0;i<nDOF_test_element;i++)
4157 for (k=0;k<nQuadraturePoints_element;k++)
4158 for (j=0;j<nDOF_trial_element;j++)
4159 for (I=0;I<nSpace;I++)
4160 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
4161 i*nDOF_trial_element +
4164 numDiff[eN*nQuadraturePoints_element +
4167 grad_v_X_grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_X_trial_element*nSpace2 +
4168 k*nDOF_test_X_trial_element*nSpace2 +
4169 j*nDOF_test_element*nSpace2 +
4176 int nQuadraturePoints_element,
4177 int nDOF_trial_element,
4178 int nDOF_test_element,
4183 double* jacobian_weak_residual)
4185 int eN,i,j,k,I,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
4186 for(eN=0;eN<nElements_global;eN++)
4187 for (i=0;i<nDOF_test_element;i++)
4188 for (k=0;k<nQuadraturePoints_element;k++)
4189 for (j=0;j<nDOF_trial_element;j++)
4190 for (I=0;I<nSpace;I++)
4191 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
4192 i*nDOF_trial_element +
4195 numDiff[eN*nQuadraturePoints_element +
4198 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
4199 k*nDOF_trial_element*nSpace +
4203 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
4204 k*nDOF_test_element*nSpace +
4213 int nQuadraturePoints_element,
4219 for(eN=0;eN<nElements_global;eN++)
4220 for (k=0;k<nQuadraturePoints_element;k++)
4221 sResult[eN*nQuadraturePoints_element +
4224 s1[eN*nQuadraturePoints_element +
4227 s2[eN*nQuadraturePoints_element +
4235 int nQuadraturePoints_element,
4242 for(eN=0;eN<nElements_global;eN++)
4243 for (k=0;k<nQuadraturePoints_element;k++)
4244 for (I=0;I<nSpace;I++)
4245 vResult[eN*nQuadraturePoints_element*nSpace +
4249 v[eN*nQuadraturePoints_element*nSpace +
4253 s[eN*nQuadraturePoints_element +
4261 int nQuadraturePoints_element,
4267 int eN,k,I,J,nSpace2=nSpace*nSpace;
4268 for(eN=0;eN<nElements_global;eN++)
4269 for (k=0;k<nQuadraturePoints_element;k++)
4270 for (I=0;I<nSpace;I++)
4271 for (J=0;J<nSpace;J++)
4272 tResult[eN*nQuadraturePoints_element*nSpace2 +
4277 t[eN*nQuadraturePoints_element*nSpace2 +
4282 s[eN*nQuadraturePoints_element +
4295 int nElementBoundaries_element,
4296 int nQuadraturePoints_elementBoundary,
4297 int nDOF_test_element,
4298 int* interiorElementBoundaries,
4299 int* elementBoundaryElements,
4300 int* elementBoundaryLocalElementBoundaries,
4305 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,i,k;
4306 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
4308 ebN = interiorElementBoundaries[ebNI];
4309 left_eN_global = elementBoundaryElements[ebN*2+0];
4310 right_eN_global = elementBoundaryElements[ebN*2+1];
4311 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
4312 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
4313 for(i=0;i<nDOF_test_element;i++)
4314 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
4316 residual[left_eN_global*nDOF_test_element+
4319 flux[ebN*nQuadraturePoints_elementBoundary+
4321 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4322 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4323 k*nDOF_test_element+
4325 residual[right_eN_global*nDOF_test_element+
4328 flux[ebN*nQuadraturePoints_elementBoundary+
4330 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4331 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4332 k*nDOF_test_element+
4342 int nElementBoundaries_element,
4343 int nQuadraturePoints_elementBoundary,
4344 int nDOF_test_element,
4345 int* exteriorElementBoundaries,
4346 int* elementBoundaryElements,
4347 int* elementBoundaryLocalElementBoundaries,
4352 int ebNE,ebN,eN_global,ebN_element,i,k;
4353 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
4355 ebN = exteriorElementBoundaries[ebNE];
4356 eN_global = elementBoundaryElements[ebN*2+0];
4357 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
4358 for(i=0;i<nDOF_test_element;i++)
4359 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
4361 residual[eN_global*nDOF_test_element+
4364 flux[ebN*nQuadraturePoints_elementBoundary+
4367 w_dS[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4368 ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4369 k*nDOF_test_element+
4376 int nQuadraturePoints_elementBoundary,
4377 int nDOF_test_element,
4378 int* exteriorElementBoundaries,
4379 int* elementBoundaryElements,
4380 int* elementBoundaryLocalElementBoundaries,
4385 int ebNE,ebN,eN_global,ebN_element,i,k;
4386 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
4388 ebN = exteriorElementBoundaries[ebNE];
4389 eN_global = elementBoundaryElements[ebN*2+0];
4390 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
4391 for(i=0;i<nDOF_test_element;i++)
4392 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
4394 residual[eN_global*nDOF_test_element+
4397 flux[ebNE*nQuadraturePoints_elementBoundary+
4400 w_dS[ebNE*nQuadraturePoints_elementBoundary*nDOF_test_element+
4401 k*nDOF_test_element+
4407 int nQuadraturePoints_elementBoundary,
4408 int nDOF_test_element,
4409 int* exteriorElementBoundaries,
4410 int* elementBoundaryElements,
4411 int* elementBoundaryLocalElementBoundaries,
4416 int ebNE,ebN,eN_global,ebN_element,i,k,I;
4417 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
4419 ebN = exteriorElementBoundaries[ebNE];
4420 eN_global = elementBoundaryElements[ebN*2+0];
4421 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
4422 for(i=0;i<nDOF_test_element;i++)
4423 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
4424 residual[eN_global*nDOF_test_element+
4427 stressFlux[ebNE*nQuadraturePoints_elementBoundary+
4430 w_dS[ebNE*nQuadraturePoints_elementBoundary*nDOF_test_element+
4431 k*nDOF_test_element+
4439 int nElementBoundaries_element,
4440 int nQuadraturePoints_elementBoundary,
4441 int nDOF_test_element,
4442 int* interiorElementBoundaries,
4443 int* elementBoundaryElements,
4444 int* elementBoundaryLocalElementBoundaries,
4449 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,i,k;
4450 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
4452 ebN = interiorElementBoundaries[ebNI];
4453 left_eN_global = elementBoundaryElements[ebN*2+0];
4454 right_eN_global = elementBoundaryElements[ebN*2+1];
4455 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
4456 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
4457 for(i=0;i<nDOF_test_element;i++)
4458 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
4460 residual[left_eN_global*nDOF_test_element+
4463 flux[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
4464 left_ebN_element*nQuadraturePoints_elementBoundary+
4466 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4467 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4468 k*nDOF_test_element+
4470 residual[right_eN_global*nDOF_test_element+
4473 flux[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
4474 right_ebN_element*nQuadraturePoints_elementBoundary+
4476 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4477 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4478 k*nDOF_test_element+
4485 int nQuadraturePoints_elementBoundary,
4486 int* elementBoundaryMaterialTypes,
4487 int* exteriorElementBoundaries,
4488 int* elementBoundaryElements,
4489 int* elementBoundaryLocalElementBoundaries,
4491 double* mom_flux_vec_u,
4492 double* mom_flux_vec_v,
4493 double* mom_flux_vec_w,
4498 int ebNE,ebN,eN_global,ebN_element,k,I;
4499 double stress_x,stress_y,stress_z;
4500 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
4502 ebN = exteriorElementBoundaries[ebNE];
4503 eN_global = elementBoundaryElements[ebN*2+0];
4504 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
4505 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
4510 stress_x += p[ebNE*nQuadraturePoints_elementBoundary+
4513 n[ebNE*nQuadraturePoints_elementBoundary*3+
4516 stress_y += p[ebNE*nQuadraturePoints_elementBoundary+
4519 n[ebNE*nQuadraturePoints_elementBoundary*3+
4522 stress_z += p[ebNE*nQuadraturePoints_elementBoundary+
4525 n[ebNE*nQuadraturePoints_elementBoundary*3+
4530 stress_x += mom_flux_vec_u[ebNE*nQuadraturePoints_elementBoundary*3+
4534 n[ebNE*nQuadraturePoints_elementBoundary*3+
4537 stress_y += mom_flux_vec_v[ebNE*nQuadraturePoints_elementBoundary*3+
4541 n[ebNE*nQuadraturePoints_elementBoundary*3+
4544 stress_z += mom_flux_vec_w[ebNE*nQuadraturePoints_elementBoundary*3+
4548 n[ebNE*nQuadraturePoints_elementBoundary*3+
4552 F[elementBoundaryMaterialTypes[ebN]*3 + 0] += stress_x*
4553 dS[ebNE*nQuadraturePoints_elementBoundary+
4555 F[elementBoundaryMaterialTypes[ebN]*3 + 1] += stress_y*
4556 dS[ebNE*nQuadraturePoints_elementBoundary+
4558 F[elementBoundaryMaterialTypes[ebN]*3 + 2] += stress_z*
4559 dS[ebNE*nQuadraturePoints_elementBoundary+
4566 int nQuadraturePoints_elementBoundary,
4567 int* elementBoundaryMaterialTypes,
4568 int* exteriorElementBoundaries,
4569 int* elementBoundaryElements,
4570 int* elementBoundaryLocalElementBoundaries,
4572 double* mom_flux_vec_u,
4573 double* mom_flux_vec_v,
4578 int ebNE,ebN,eN_global,ebN_element,k,I;
4579 double stress_x,stress_y;
4580 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
4582 ebN = exteriorElementBoundaries[ebNE];
4583 eN_global = elementBoundaryElements[ebN*2+0];
4584 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
4585 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
4589 stress_x += p[ebNE*nQuadraturePoints_elementBoundary+
4592 n[ebNE*nQuadraturePoints_elementBoundary*2+
4595 stress_y += p[ebNE*nQuadraturePoints_elementBoundary+
4598 n[ebNE*nQuadraturePoints_elementBoundary*2+
4618 F[elementBoundaryMaterialTypes[ebN]*2 + 0] += stress_x*
4619 dS[ebNE*nQuadraturePoints_elementBoundary+
4621 F[elementBoundaryMaterialTypes[ebN]*2 + 1] += stress_y*
4622 dS[ebNE*nQuadraturePoints_elementBoundary+
4633 int nQuadraturePoints_elementBoundary,
4634 int* elementBoundaryMaterialTypes,
4635 int* exteriorElementBoundaries,
4639 double* boundaryMeasure)
4641 int ebNE,ebN,k,elementBoundaryFlag;
4643 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
4646 ebN = exteriorElementBoundaries[ebNE];
4648 elementBoundaryFlag = elementBoundaryMaterialTypes[ebN];
4650 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
4652 P[elementBoundaryFlag] += p[ebNE*nQuadraturePoints_elementBoundary+k]
4654 dS[ebNE*nQuadraturePoints_elementBoundary+k];
4655 boundaryMeasure[elementBoundaryFlag] +=
4656 dS[ebNE*nQuadraturePoints_elementBoundary+k];
4666 int nDOF_test_element,
4669 int* nFreeDOF_element_r,
4672 double* elementResidual,
4673 double* globalResidual)
4676 for (eN=0;eN<nElements_global;eN++)
4677 for (ii=0;ii<nFreeDOF_element_r[eN];ii++)
4678 globalResidual[offset_r +
4679 stride_r*freeGlobal_r[eN*nDOF_test_element+
4682 elementResidual[eN*nDOF_test_element +
4683 freeLocal_r[eN*nDOF_test_element+
4691 int nDOF_test_element,
4692 int nDOF_trial_element,
4697 int nFreeVDOF_global,
4698 int* nFreeDOF_element_r,
4701 int* nFreeDOF_element_u,
4704 double* elementJacobian,
4705 double* globalJacobian)
4707 int eN,ii,jj,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,i,j,jacIndex,I,J;
4708 for (eN=0;eN<nElements_global;eN++)
4709 for (ii=0;ii<nFreeDOF_element_r[eN];ii++)
4711 i = freeLocal_r[eN*nDOF_test_element+
4713 I = offset_r + stride_r*freeGlobal_r[eN*nDOF_test_element+
4715 for (jj=0;jj<nFreeDOF_element_u[eN];jj++)
4717 j = freeLocal_u[eN*nDOF_trial_element+
4719 J = offset_u + stride_u*freeGlobal_u[eN*nDOF_trial_element+
4721 jacIndex = I + J*nFreeVDOF_global;
4722 globalJacobian[jacIndex]
4724 elementJacobian[eN*nDOF_test_X_trial_element +
4725 i*nDOF_trial_element+
4735 int nElements_global,
4736 int nElementBoundaries_element,
4737 int nDOF_test_element,
4738 int nDOF_trial_element,
4743 int nFreeVDOF_global,
4744 int* nFreeDOF_element_r,
4747 int* nFreeDOF_element_u,
4750 double* elementJacobian_eb,
4751 double* globalJacobian)
4753 int eN,ebN,eN_ebN,ii,jj,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,i,j,jacIndex,I,J;
4754 for (eN=0;eN<nElements_global;eN++)
4755 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
4763 eN_ebN = elementNeighbors[eN*nElementBoundaries_element+ebN];
4765 for (ii=0;ii<nFreeDOF_element_r[eN];ii++)
4767 i = freeLocal_r[eN*nDOF_test_element+
4769 I = offset_r + stride_r*freeGlobal_r[eN*nDOF_test_element+
4771 for (jj=0;jj<nFreeDOF_element_u[eN_ebN];jj++)
4773 j = freeLocal_u[eN_ebN*nDOF_trial_element+
4775 J = offset_u + stride_u*freeGlobal_u[eN_ebN*nDOF_trial_element+
4777 jacIndex = I + J*nFreeVDOF_global;
4778 globalJacobian[jacIndex]
4780 elementJacobian_eb[eN*nElementBoundaries_element*nDOF_test_X_trial_element +
4781 ebN*nDOF_test_X_trial_element+
4782 i*nDOF_trial_element+
4793 int nElementBoundaries_element,
4794 int nQuadraturePoints_elementBoundary,
4795 int nDOF_test_element,
4796 int nDOF_trial_element,
4801 int nFreeVDOF_global,
4802 int* interiorElementBoundaries,
4803 int* elementBoundaryElements,
4804 int* elementBoundaryLocalElementBoundaries,
4805 int* nFreeDOF_element_r,
4808 int* nFreeDOF_element_u,
4811 double* elementBoundaryFluxJacobian,
4815 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,ii,i,k,jj,j,jacIndex,I,J;
4816 for (ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
4818 ebN = interiorElementBoundaries[ebNI];
4819 left_eN_global = elementBoundaryElements[ebN*2+0];
4820 right_eN_global = elementBoundaryElements[ebN*2+1];
4821 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
4822 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
4823 for(ii=0;ii<nFreeDOF_element_r[left_eN_global];ii++)
4825 i = freeLocal_r[left_eN_global*nDOF_test_element+
4827 I = offset_r + stride_r*freeGlobal_r[left_eN_global*nDOF_test_element+
4829 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
4831 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
4833 j = freeLocal_u[left_eN_global*nDOF_trial_element+
4835 J = offset_u + stride_u*freeGlobal_u[left_eN_global*nDOF_trial_element+
4837 jacIndex = I+J*nFreeVDOF_global;
4840 elementBoundaryFluxJacobian[ebN*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
4841 0*nQuadraturePoints_elementBoundary*nDOF_trial_element+
4842 k*nDOF_trial_element+
4845 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
4846 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4847 k*nDOF_test_element+
4850 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
4852 j = freeLocal_u[right_eN_global*nDOF_trial_element+
4854 J = offset_u + stride_u*freeGlobal_u[right_eN_global*nDOF_trial_element+
4856 jacIndex = I+J*nFreeVDOF_global;
4859 elementBoundaryFluxJacobian[ebN*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
4860 1*nQuadraturePoints_elementBoundary*nDOF_trial_element+
4861 k*nDOF_trial_element+
4863 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
4864 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4865 k*nDOF_test_element+i];
4869 for(ii=0;ii<nFreeDOF_element_r[right_eN_global];ii++)
4871 i = freeLocal_r[right_eN_global*nDOF_test_element+
4873 I = offset_r + stride_r*freeGlobal_r[right_eN_global*nDOF_test_element+
4875 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
4877 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
4879 j = freeLocal_u[left_eN_global*nDOF_trial_element+
4881 J = offset_u + stride_u*freeGlobal_u[left_eN_global*nDOF_trial_element+
4883 jacIndex = I+J*nFreeVDOF_global;
4886 elementBoundaryFluxJacobian[ebN*2*nQuadraturePoints_elementBoundary*nDOF_trial_element+
4887 0*nQuadraturePoints_elementBoundary*nDOF_trial_element+
4888 k*nDOF_trial_element+
4891 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4892 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4893 k*nDOF_test_element+
4896 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
4898 j = freeLocal_u[right_eN_global*nDOF_trial_element+
4900 J = offset_u + stride_u*freeGlobal_u[right_eN_global*nDOF_trial_element+
4902 jacIndex = I+J*nFreeVDOF_global;
4905 elementBoundaryFluxJacobian[ebN*2*nQuadraturePoints_elementBoundary*nDOF_trial_element+
4906 1*nQuadraturePoints_elementBoundary*nDOF_trial_element+
4907 k*nDOF_trial_element+
4909 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4910 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4911 k*nDOF_test_element+
4923 int nElements_global,
4924 int nInteriorElementBoundaries_global,
4925 int nElementBoundaries_element,
4926 int nQuadraturePoints_elementBoundary,
4927 int nDOF_test_element,
4928 int nDOF_trial_element,
4933 int nFreeVDOF_global,
4934 int* interiorElementBoundaries,
4935 int* elementBoundaryElements,
4936 int* elementBoundaryLocalElementBoundaries,
4937 int* nFreeDOF_element_r,
4940 int* nFreeDOF_element_u,
4943 double* elementBoundaryFluxJacobian_eb,
4947 int ebNI,ebN,ebN_element,left_eN_ebN,right_eN_ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,ii,i,k,jj,j,jacIndex,I,J;
4948 for (ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
4950 ebN = interiorElementBoundaries[ebNI];
4951 left_eN_global = elementBoundaryElements[ebN*2+0];
4952 right_eN_global = elementBoundaryElements[ebN*2+1];
4953 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
4954 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
4955 for(ebN_element=0;ebN_element<nElementBoundaries_element;ebN_element++)
4966 left_eN_ebN = elementNeighbors[left_eN_global*nElementBoundaries_element+ebN_element];
4967 right_eN_ebN = elementNeighbors[right_eN_global*nElementBoundaries_element+ebN_element];
4968 for(ii=0;ii<nFreeDOF_element_r[left_eN_global];ii++)
4970 i = freeLocal_r[left_eN_global*nDOF_test_element+
4972 I = offset_r + stride_r*freeGlobal_r[left_eN_global*nDOF_test_element+
4974 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
4977 if(left_eN_ebN >= 0)
4978 for(jj=0;jj<nFreeDOF_element_u[left_eN_ebN];jj++)
4980 j = freeLocal_u[left_eN_ebN*nDOF_trial_element+
4982 J = offset_u + stride_u*freeGlobal_u[left_eN_ebN*nDOF_trial_element+
4984 jacIndex = I+J*nFreeVDOF_global;
4987 elementBoundaryFluxJacobian_eb[ebN*2*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element +
4988 0*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
4989 ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
4990 k*nDOF_trial_element+
4993 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
4994 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
4995 k*nDOF_test_element+
5010 if(right_eN_ebN >= 0)
5011 for(jj=0;jj<nFreeDOF_element_u[right_eN_ebN];jj++)
5013 j = freeLocal_u[right_eN_ebN*nDOF_trial_element+
5015 J = offset_u + stride_u*freeGlobal_u[right_eN_ebN*nDOF_trial_element+
5017 jacIndex = I+J*nFreeVDOF_global;
5020 elementBoundaryFluxJacobian_eb[ebN*2*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5021 1*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5022 ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5023 k*nDOF_trial_element+
5025 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
5026 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5027 k*nDOF_test_element+i];
5042 for(ii=0;ii<nFreeDOF_element_r[right_eN_global];ii++)
5044 i = freeLocal_r[right_eN_global*nDOF_test_element+
5046 I = offset_r + stride_r*freeGlobal_r[right_eN_global*nDOF_test_element+
5048 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
5051 if(left_eN_ebN >= 0)
5052 for(jj=0;jj<nFreeDOF_element_u[left_eN_ebN];jj++)
5054 j = freeLocal_u[left_eN_ebN*nDOF_trial_element+
5056 J = offset_u + stride_u*freeGlobal_u[left_eN_ebN*nDOF_trial_element+
5058 jacIndex = I+J*nFreeVDOF_global;
5061 elementBoundaryFluxJacobian_eb[ebN*2*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5062 0*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5063 ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5064 k*nDOF_trial_element+
5067 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5068 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5069 k*nDOF_test_element+
5084 if(right_eN_ebN >= 0)
5085 for(jj=0;jj<nFreeDOF_element_u[right_eN_ebN];jj++)
5087 j = freeLocal_u[right_eN_ebN*nDOF_trial_element+
5089 J = offset_u + stride_u*freeGlobal_u[right_eN_ebN*nDOF_trial_element+
5091 jacIndex = I+J*nFreeVDOF_global;
5094 elementBoundaryFluxJacobian_eb[ebN*2*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5095 1*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5096 ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5097 k*nDOF_trial_element+
5099 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5100 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5101 k*nDOF_test_element+
5124 int nElementBoundaries_element,
5125 int nQuadraturePoints_elementBoundary,
5126 int nDOF_test_element,
5127 int nDOF_trial_element,
5132 int nFreeVDOF_global,
5133 int* interiorElementBoundaries,
5134 int* elementBoundaryElements,
5135 int* elementBoundaryLocalElementBoundaries,
5136 int* nFreeDOF_element_r,
5139 int* nFreeDOF_element_u,
5142 double* elementBoundaryFluxJacobian_2sided,
5146 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,ii,i,k,jj,j,jacIndex,I,J;
5147 for (ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
5149 ebN = interiorElementBoundaries[ebNI];
5150 left_eN_global = elementBoundaryElements[ebN*2+0];
5151 right_eN_global = elementBoundaryElements[ebN*2+1];
5152 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
5153 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
5155 for(ii=0;ii<nFreeDOF_element_r[left_eN_global];ii++)
5157 i = freeLocal_r[left_eN_global*nDOF_test_element+
5159 I = offset_r + stride_r*freeGlobal_r[left_eN_global*nDOF_test_element+
5161 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
5163 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
5165 j = freeLocal_u[left_eN_global*nDOF_trial_element+
5167 J = offset_u + stride_u*freeGlobal_u[left_eN_global*nDOF_trial_element+
5169 jacIndex = I+J*nFreeVDOF_global;
5172 elementBoundaryFluxJacobian_2sided[ebN*2*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5173 0*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5174 0*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5175 k*nDOF_trial_element+
5178 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
5179 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5180 k*nDOF_test_element+
5183 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
5185 j = freeLocal_u[right_eN_global*nDOF_trial_element+
5187 J = offset_u + stride_u*freeGlobal_u[right_eN_global*nDOF_trial_element+
5189 jacIndex = I+J*nFreeVDOF_global;
5192 elementBoundaryFluxJacobian_2sided[ebN*2*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5193 0*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5194 1*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5195 k*nDOF_trial_element+
5197 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
5198 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5199 k*nDOF_test_element+i];
5204 for(ii=0;ii<nFreeDOF_element_r[right_eN_global];ii++)
5206 i = freeLocal_r[right_eN_global*nDOF_test_element+
5208 I = offset_r + stride_r*freeGlobal_r[right_eN_global*nDOF_test_element+
5210 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
5212 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
5214 j = freeLocal_u[left_eN_global*nDOF_trial_element+
5216 J = offset_u + stride_u*freeGlobal_u[left_eN_global*nDOF_trial_element+
5218 jacIndex = I+J*nFreeVDOF_global;
5221 elementBoundaryFluxJacobian_2sided[ebN*2*2*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5222 1*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5223 0*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5224 k*nDOF_trial_element+
5227 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5228 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5229 k*nDOF_test_element+
5232 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
5234 j = freeLocal_u[right_eN_global*nDOF_trial_element+
5236 J = offset_u + stride_u*freeGlobal_u[right_eN_global*nDOF_trial_element+
5238 jacIndex = I+J*nFreeVDOF_global;
5241 elementBoundaryFluxJacobian_2sided[ebN*2*2*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5242 1*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5243 1*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5244 k*nDOF_trial_element+
5246 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5247 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5248 k*nDOF_test_element+
5260 int nElementBoundaries_element,
5261 int nQuadraturePoints_elementBoundary,
5262 int nDOF_test_element,
5263 int nDOF_trial_element,
5268 int nFreeVDOF_global,
5269 int* exteriorElementBoundaries,
5270 int* elementBoundaryElements,
5271 int* elementBoundaryLocalElementBoundaries,
5272 int* nFreeDOF_element_r,
5275 int* nFreeDOF_element_u,
5278 double* elementBoundaryFluxJacobian,
5282 int ebNE,ebN,eN_global,ebN_element,ii,i,k,jj,j,I,J,jacIndex;
5283 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
5285 ebN = exteriorElementBoundaries[ebNE];
5286 eN_global = elementBoundaryElements[ebN*2+0];
5287 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
5288 for(ii=0;ii<nFreeDOF_element_r[eN_global];ii++)
5290 i = freeLocal_r[eN_global*nDOF_test_element+
5292 I = offset_r + stride_r*freeGlobal_r[eN_global*nDOF_test_element+
5294 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
5296 for(jj=0;jj<nFreeDOF_element_u[eN_global];jj++)
5298 j = freeLocal_u[eN_global*nDOF_trial_element+
5300 J = offset_u + stride_u*freeGlobal_u[eN_global*nDOF_trial_element+
5302 jacIndex = I+J*nFreeVDOF_global;
5305 elementBoundaryFluxJacobian[ebN*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5306 0*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5307 k*nDOF_trial_element+
5310 w_dS[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
5311 ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5312 k*nDOF_test_element+
5324 int nElements_global,
5325 int nExteriorElementBoundaries_global,
5326 int nElementBoundaries_element,
5327 int nQuadraturePoints_elementBoundary,
5328 int nDOF_test_element,
5329 int nDOF_trial_element,
5334 int nFreeVDOF_global,
5335 int* exteriorElementBoundaries,
5336 int* elementBoundaryElements,
5337 int* elementBoundaryLocalElementBoundaries,
5338 int* nFreeDOF_element_r,
5341 int* nFreeDOF_element_u,
5344 double* elementBoundaryFluxJacobian_eb,
5348 int ebNE,ebN,eN_global,ebN_element,ebN_eN,eN_ebN,ii,i,k,jj,j,I,J,jacIndex;
5349 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
5351 ebN = exteriorElementBoundaries[ebNE];
5352 eN_global = elementBoundaryElements[ebN*2+0];
5353 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
5354 for (ebN_eN=0;ebN_eN<nElementBoundaries_element;ebN_eN++)
5361 eN_ebN = elementNeighbors[eN_global*nElementBoundaries_element+ebN_eN];
5362 for(ii=0;ii<nFreeDOF_element_r[eN_global];ii++)
5364 i = freeLocal_r[eN_global*nDOF_test_element+
5366 I = offset_r + stride_r*freeGlobal_r[eN_global*nDOF_test_element+
5368 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
5372 for(jj=0;jj<nFreeDOF_element_u[eN_ebN];jj++)
5374 j = freeLocal_u[eN_ebN*nDOF_trial_element+
5376 J = offset_u + stride_u*freeGlobal_u[eN_ebN*nDOF_trial_element+
5378 jacIndex = I+J*nFreeVDOF_global;
5381 elementBoundaryFluxJacobian_eb[ebN*2*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5382 0*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5383 ebN_eN*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5384 k*nDOF_trial_element+
5387 w_dS[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
5388 ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5389 k*nDOF_test_element+
5414 int nElements_global,
5415 int nExteriorElementBoundaries_global,
5416 int nElementBoundaries_element,
5417 int nQuadraturePoints_elementBoundary,
5418 int nDOF_test_element,
5419 int nDOF_trial_element,
5424 int nFreeVDOF_global,
5425 int* exteriorElementBoundaries,
5426 int* elementBoundaryElements,
5427 int* elementBoundaryLocalElementBoundaries,
5428 int* nFreeDOF_element_r,
5431 int* nFreeDOF_element_u,
5434 double* elementBoundaryFluxJacobian_eb,
5438 int ebNE,ebN,eN_global,ebN_element,ebN_eN,eN_ebN,ii,i,k,jj,j,I,J,jacIndex;
5439 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
5441 ebN = exteriorElementBoundaries[ebNE];
5442 eN_global = elementBoundaryElements[ebN*2+0];
5443 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
5444 for (ebN_eN=0;ebN_eN<nElementBoundaries_element;ebN_eN++)
5451 eN_ebN = elementNeighbors[eN_global*nElementBoundaries_element+ebN_eN];
5452 for(ii=0;ii<nFreeDOF_element_r[eN_global];ii++)
5454 i = freeLocal_r[eN_global*nDOF_test_element+
5456 I = offset_r + stride_r*freeGlobal_r[eN_global*nDOF_test_element+
5458 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
5462 for(jj=0;jj<nFreeDOF_element_u[eN_ebN];jj++)
5464 j = freeLocal_u[eN_ebN*nDOF_trial_element+
5466 J = offset_u + stride_u*freeGlobal_u[eN_ebN*nDOF_trial_element+
5468 jacIndex = I+J*nFreeVDOF_global;
5471 elementBoundaryFluxJacobian_eb[ebN*2*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5472 0*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5473 ebN_eN*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5474 k*nDOF_trial_element+
5477 w_dS[ebNE*nQuadraturePoints_elementBoundary*nDOF_test_element+
5478 k*nDOF_test_element+
5501 int nQuadraturePoints_elementBoundary,
5502 int nDOF_test_element,
5503 int nDOF_trial_element,
5508 int nFreeVDOF_global,
5509 int* exteriorElementBoundaries,
5510 int* elementBoundaryElements,
5511 int* elementBoundaryLocalElementBoundaries,
5512 int* nFreeDOF_element_r,
5515 int* nFreeDOF_element_u,
5518 double* elementBoundaryFluxJacobian,
5522 int ebNE,ebN,eN_global,ebN_element,ii,i,k,jj,j,I,J,jacIndex;
5523 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
5525 ebN = exteriorElementBoundaries[ebNE];
5526 eN_global = elementBoundaryElements[ebN*2+0];
5527 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
5528 for(ii=0;ii<nFreeDOF_element_r[eN_global];ii++)
5530 i = freeLocal_r[eN_global*nDOF_test_element+
5532 I = offset_r + stride_r*freeGlobal_r[eN_global*nDOF_test_element+
5534 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
5536 for(jj=0;jj<nFreeDOF_element_u[eN_global];jj++)
5538 j = freeLocal_u[eN_global*nDOF_trial_element+
5540 J = offset_u + stride_u*freeGlobal_u[eN_global*nDOF_trial_element+
5542 jacIndex = I+J*nFreeVDOF_global;
5545 elementBoundaryFluxJacobian[ebNE*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5546 k*nDOF_trial_element+
5549 w_dS[ebNE*nQuadraturePoints_elementBoundary*nDOF_test_element+
5550 k*nDOF_test_element+
5562 int nDOF_test_element,
5563 int nDOF_trial_element,
5564 int* nFreeDOF_element_r,
5566 int* nFreeDOF_element_u,
5568 int* csrRowIndeces_ru,
5569 int* csrColumnOffsets_ru,
5570 double* elementJacobian,
5571 double* globalJacobian)
5573 int eN,ii,jj,i,j,jacIndex,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
5574 for (eN=0;eN<nElements_global;eN++)
5575 for (ii=0;ii<nFreeDOF_element_r[eN];ii++)
5577 i = freeLocal_r[eN*nDOF_test_element+
5579 for (jj=0;jj<nFreeDOF_element_u[eN];jj++)
5581 j = freeLocal_u[eN*nDOF_trial_element+
5583 jacIndex = csrRowIndeces_ru[eN*nDOF_test_element+
5586 csrColumnOffsets_ru[eN*nDOF_test_X_trial_element+
5587 ii*nDOF_trial_element+
5589 globalJacobian[jacIndex]
5591 elementJacobian[eN*nDOF_test_X_trial_element +
5592 i*nDOF_trial_element +
5602 int nElements_global,
5603 int nElementBoundaries_element,
5604 int nDOF_test_element,
5605 int nDOF_trial_element,
5606 int* nFreeDOF_element_r,
5608 int* nFreeDOF_element_u,
5610 int* csrRowIndeces_ru,
5611 int* csrColumnOffsets_eb_ru,
5612 double* elementJacobian_eb,
5613 double* globalJacobian)
5615 int eN,ebN,eN_ebN,ii,jj,i,j,jacIndex,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
5616 for (eN=0;eN<nElements_global;eN++)
5617 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
5626 eN_ebN = elementNeighbors[eN*nElementBoundaries_element+ebN];
5628 for (ii=0;ii<nFreeDOF_element_r[eN];ii++)
5630 i = freeLocal_r[eN*nDOF_test_element+
5632 for (jj=0;jj<nFreeDOF_element_u[eN_ebN];jj++)
5634 j = freeLocal_u[eN_ebN*nDOF_trial_element+
5636 jacIndex = csrRowIndeces_ru[eN*nDOF_test_element+
5639 csrColumnOffsets_eb_ru[eN*nElementBoundaries_element*nDOF_test_X_trial_element+
5640 ebN*nDOF_test_X_trial_element+
5641 ii*nDOF_trial_element+
5643 globalJacobian[jacIndex]
5645 elementJacobian_eb[eN*nElementBoundaries_element*nDOF_test_X_trial_element +
5646 ebN*nDOF_test_X_trial_element+
5647 i*nDOF_trial_element +
5658 int nElementBoundaries_element,
5659 int nQuadraturePoints_elementBoundary,
5660 int nDOF_test_element,
5661 int nDOF_trial_element,
5662 int* interiorElementBoundaries,
5663 int* elementBoundaryElements,
5664 int* elementBoundaryLocalElementBoundaries,
5665 int* nFreeDOF_element_r,
5667 int* nFreeDOF_element_u,
5669 int* csrRowIndeces_ru,
5670 int* csrColumnOffsets_eb_ru,
5671 double* elementBoundaryFluxJacobian,
5675 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,ii,i,k,jj,j,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,jacIndex;
5676 for (ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
5678 ebN = interiorElementBoundaries[ebNI];
5679 left_eN_global = elementBoundaryElements[ebN*2+0];
5680 right_eN_global = elementBoundaryElements[ebN*2+1];
5681 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
5682 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
5683 for(ii=0;ii<nFreeDOF_element_r[left_eN_global];ii++)
5685 i = freeLocal_r[left_eN_global*nDOF_test_element+ii];
5686 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
5688 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
5690 j = freeLocal_u[left_eN_global*nDOF_trial_element+
5692 jacIndex = csrRowIndeces_ru[left_eN_global*nDOF_test_element+
5695 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element +
5696 0*2*nDOF_test_X_trial_element +
5697 0*nDOF_test_X_trial_element +
5698 ii*nDOF_trial_element +
5702 elementBoundaryFluxJacobian[ebN*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5703 0*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5704 k*nDOF_trial_element+
5707 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
5708 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5709 k*nDOF_test_element+
5712 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
5714 j = freeLocal_u[right_eN_global*nDOF_trial_element+
5716 jacIndex = csrRowIndeces_ru[left_eN_global*nDOF_test_element+
5719 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element+
5720 0*2*nDOF_test_X_trial_element+
5721 1*nDOF_test_X_trial_element+
5722 ii*nDOF_trial_element+
5726 elementBoundaryFluxJacobian[ebN*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5727 1*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5728 k*nDOF_trial_element+
5731 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
5732 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5733 k*nDOF_test_element+
5738 for(ii=0;ii<nFreeDOF_element_r[right_eN_global];ii++)
5740 i = freeLocal_r[right_eN_global*nDOF_test_element+
5742 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
5744 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
5746 j = freeLocal_u[left_eN_global*nDOF_trial_element+
5748 jacIndex = csrRowIndeces_ru[right_eN_global*nDOF_test_element+
5751 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element+
5752 1*2*nDOF_test_X_trial_element+
5753 0*nDOF_test_X_trial_element+
5754 ii*nDOF_trial_element+
5758 elementBoundaryFluxJacobian[ebN*2*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5759 0*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5760 k*nDOF_trial_element+
5763 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5764 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5765 k*nDOF_test_element+
5768 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
5770 j = freeLocal_u[right_eN_global*nDOF_trial_element+
5772 jacIndex = csrRowIndeces_ru[right_eN_global*nDOF_test_element+
5775 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element+
5776 1*2*nDOF_test_X_trial_element+
5777 1*nDOF_test_X_trial_element+
5778 ii*nDOF_trial_element+
5782 elementBoundaryFluxJacobian[ebN*2*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5783 1*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5784 k*nDOF_trial_element+
5786 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5787 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5788 k*nDOF_test_element+
5800 int nElementBoundaries_element,
5801 int nQuadraturePoints_elementBoundary,
5802 int nDOF_test_element,
5803 int nDOF_trial_element,
5804 int* exteriorElementBoundaries,
5805 int* elementBoundaryElements,
5806 int* elementBoundaryLocalElementBoundaries,
5807 int* nFreeDOF_element_r,
5809 int* nFreeDOF_element_u,
5811 int* csrRowIndeces_ru,
5812 int* csrColumnOffsets_eb_ru,
5813 double* elementBoundaryFluxJacobian,
5817 int ebNE,ebN,eN_global,ebN_element,ii,i,k,jj,j,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,jacIndex;
5818 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
5820 ebN = exteriorElementBoundaries[ebNE];
5821 eN_global = elementBoundaryElements[ebN*2+0];
5822 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
5823 for(ii=0;ii<nFreeDOF_element_r[eN_global];ii++)
5825 i = freeLocal_r[eN_global*nDOF_test_element+ii];
5826 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
5828 for(jj=0;jj<nFreeDOF_element_u[eN_global];jj++)
5830 j = freeLocal_u[eN_global*nDOF_trial_element+
5832 jacIndex = csrRowIndeces_ru[eN_global*nDOF_test_element+
5835 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element +
5836 0*2*nDOF_test_X_trial_element +
5837 0*nDOF_test_X_trial_element +
5838 ii*nDOF_trial_element +
5842 elementBoundaryFluxJacobian[ebN*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5843 0*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5844 k*nDOF_trial_element+
5847 w_dS[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
5848 ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5849 k*nDOF_test_element+
5860 int nQuadraturePoints_elementBoundary,
5861 int nDOF_test_element,
5862 int nDOF_trial_element,
5863 int* exteriorElementBoundaries,
5864 int* elementBoundaryElements,
5865 int* elementBoundaryLocalElementBoundaries,
5866 int* nFreeDOF_element_r,
5868 int* nFreeDOF_element_u,
5870 int* csrRowIndeces_ru,
5871 int* csrColumnOffsets_eb_ru,
5872 double* elementBoundaryFluxJacobian,
5876 int ebNE,ebN,eN_global,ii,i,k,jj,j,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,jacIndex;
5877 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
5879 ebN = exteriorElementBoundaries[ebNE];
5880 eN_global = elementBoundaryElements[ebN*2+0];
5881 for(ii=0;ii<nFreeDOF_element_r[eN_global];ii++)
5883 i = freeLocal_r[eN_global*nDOF_test_element+ii];
5884 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
5886 for(jj=0;jj<nFreeDOF_element_u[eN_global];jj++)
5888 j = freeLocal_u[eN_global*nDOF_trial_element+
5890 jacIndex = csrRowIndeces_ru[eN_global*nDOF_test_element+
5893 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element +
5894 0*2*nDOF_test_X_trial_element +
5895 0*nDOF_test_X_trial_element +
5896 ii*nDOF_trial_element +
5900 elementBoundaryFluxJacobian[ebNE*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5901 k*nDOF_trial_element+
5904 w_dS[ebNE*nQuadraturePoints_elementBoundary*nDOF_test_element+
5905 k*nDOF_test_element+
5917 int nInteriorElementBoundaries_global,
5918 int nElementBoundaries_element,
5919 int nQuadraturePoints_elementBoundary,
5920 int nDOF_test_element,
5921 int nDOF_trial_element,
5922 int* interiorElementBoundaries,
5923 int* elementBoundaryElements,
5924 int* elementBoundaryLocalElementBoundaries,
5925 int* nFreeDOF_element_r,
5927 int* nFreeDOF_element_u,
5929 int* csrRowIndeces_ru,
5930 int* csrColumnOffsets_eb_eNebN_ru,
5931 double* elementBoundaryFluxJacobian_eb,
5935 int ebNI,ebN,ebN_element,left_eN_ebN,right_eN_ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,ii,i,k,jj,j,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,jacIndex;
5936 for (ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
5938 ebN = interiorElementBoundaries[ebNI];
5939 left_eN_global = elementBoundaryElements[ebN*2+0];
5940 right_eN_global = elementBoundaryElements[ebN*2+1];
5941 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
5942 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
5943 for(ebN_element=0;ebN_element<nElementBoundaries_element;ebN_element++)
5945 left_eN_ebN = elementNeighbors[left_eN_global*nElementBoundaries_element+ebN_element];
5946 right_eN_ebN = elementNeighbors[right_eN_global*nElementBoundaries_element+ebN_element];
5947 for(ii=0;ii<nFreeDOF_element_r[left_eN_global];ii++)
5949 i = freeLocal_r[left_eN_global*nDOF_test_element+ii];
5950 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
5952 if(left_eN_ebN >= 0)
5953 for(jj=0;jj<nFreeDOF_element_u[left_eN_ebN];jj++)
5955 j = freeLocal_u[left_eN_ebN*nDOF_trial_element+
5957 jacIndex = csrRowIndeces_ru[left_eN_global*nDOF_test_element+
5960 csrColumnOffsets_eb_eNebN_ru[ebN*4*nElementBoundaries_element*nDOF_test_X_trial_element +
5961 0*2*nElementBoundaries_element*nDOF_test_X_trial_element +
5962 0*nElementBoundaries_element*nDOF_test_X_trial_element +
5963 ebN_element*nDOF_test_X_trial_element+
5964 ii*nDOF_trial_element +
5968 elementBoundaryFluxJacobian_eb[ebN*2*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element +
5969 0*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5970 ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
5971 k*nDOF_trial_element+
5974 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
5975 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
5976 k*nDOF_test_element+
5990 if(right_eN_ebN >= 0)
5991 for(jj=0;jj<nFreeDOF_element_u[right_eN_ebN];jj++)
5993 j = freeLocal_u[right_eN_ebN*nDOF_trial_element+
5995 jacIndex = csrRowIndeces_ru[left_eN_global*nDOF_test_element+
5998 csrColumnOffsets_eb_eNebN_ru[ebN*4*nElementBoundaries_element*nDOF_test_X_trial_element+
5999 0*2*nElementBoundaries_element*nDOF_test_X_trial_element+
6000 1*nElementBoundaries_element*nDOF_test_X_trial_element+
6001 ebN_element*nDOF_test_X_trial_element+
6002 ii*nDOF_trial_element+
6006 elementBoundaryFluxJacobian_eb[ebN*2*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element +
6007 1*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6008 ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6009 k*nDOF_trial_element+
6012 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
6013 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
6014 k*nDOF_test_element+
6030 for(ii=0;ii<nFreeDOF_element_r[right_eN_global];ii++)
6032 i = freeLocal_r[right_eN_global*nDOF_test_element+
6034 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
6036 if(left_eN_ebN >= 0)
6037 for(jj=0;jj<nFreeDOF_element_u[left_eN_ebN];jj++)
6039 j = freeLocal_u[left_eN_ebN*nDOF_trial_element+
6041 jacIndex = csrRowIndeces_ru[right_eN_global*nDOF_test_element+
6044 csrColumnOffsets_eb_eNebN_ru[ebN*4*nElementBoundaries_element*nDOF_test_X_trial_element+
6045 1*2*nElementBoundaries_element*nDOF_test_X_trial_element+
6046 0*nElementBoundaries_element*nDOF_test_X_trial_element+
6047 ebN_element*nDOF_test_X_trial_element+
6048 ii*nDOF_trial_element+
6052 elementBoundaryFluxJacobian_eb[ebN*2*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6053 0*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6054 ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6055 k*nDOF_trial_element+
6058 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
6059 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
6060 k*nDOF_test_element+
6074 if(right_eN_ebN >= 0)
6075 for(jj=0;jj<nFreeDOF_element_u[right_eN_ebN];jj++)
6077 j = freeLocal_u[right_eN_ebN*nDOF_trial_element+
6079 jacIndex = csrRowIndeces_ru[right_eN_global*nDOF_test_element+
6082 csrColumnOffsets_eb_eNebN_ru[ebN*4*nElementBoundaries_element*nDOF_test_X_trial_element+
6083 1*2*nElementBoundaries_element*nDOF_test_X_trial_element+
6084 1*nElementBoundaries_element*nDOF_test_X_trial_element+
6085 ebN_element*nDOF_test_X_trial_element+
6086 ii*nDOF_trial_element+
6090 elementBoundaryFluxJacobian_eb[ebN*2*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6091 1*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6092 ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6093 k*nDOF_trial_element+
6095 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
6096 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
6097 k*nDOF_test_element+
6121 int nExteriorElementBoundaries_global,
6122 int nElementBoundaries_element,
6123 int nQuadraturePoints_elementBoundary,
6124 int nDOF_test_element,
6125 int nDOF_trial_element,
6126 int* exteriorElementBoundaries,
6127 int* elementBoundaryElements,
6128 int* elementBoundaryLocalElementBoundaries,
6129 int* nFreeDOF_element_r,
6131 int* nFreeDOF_element_u,
6133 int* csrRowIndeces_ru,
6134 int* csrColumnOffsets_eb_eNebN_ru,
6135 double* elementBoundaryFluxJacobian_eb,
6139 int ebNE,ebN,ebN_eN,eN_ebN,eN_global,ebN_element,ii,i,k,jj,j,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,jacIndex;
6140 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
6142 ebN = exteriorElementBoundaries[ebNE];
6143 eN_global = elementBoundaryElements[ebN*2+0];
6144 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
6145 for(ebN_eN=0;ebN_eN<nElementBoundaries_element;ebN_eN++)
6147 eN_ebN = elementNeighbors[eN_global*nElementBoundaries_element+ebN_eN];
6148 for(ii=0;ii<nFreeDOF_element_r[eN_global];ii++)
6150 i = freeLocal_r[eN_global*nDOF_test_element+ii];
6151 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
6154 for(jj=0;jj<nFreeDOF_element_u[eN_ebN];jj++)
6156 j = freeLocal_u[eN_ebN*nDOF_trial_element+
6158 jacIndex = csrRowIndeces_ru[eN_global*nDOF_test_element+
6161 csrColumnOffsets_eb_eNebN_ru[ebN*4*nElementBoundaries_element*nDOF_test_X_trial_element +
6162 0*2*nElementBoundaries_element*nDOF_test_X_trial_element +
6163 0*nElementBoundaries_element*nDOF_test_X_trial_element +
6164 ebN_eN*nDOF_test_X_trial_element +
6165 ii*nDOF_trial_element +
6169 elementBoundaryFluxJacobian_eb[ebN*2*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element +
6170 0*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6171 ebN_eN*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6172 k*nDOF_trial_element+
6175 w_dS[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
6176 ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
6177 k*nDOF_test_element+
6202 int nExteriorElementBoundaries_global,
6203 int nElementBoundaries_element,
6204 int nQuadraturePoints_elementBoundary,
6205 int nDOF_test_element,
6206 int nDOF_trial_element,
6207 int* exteriorElementBoundaries,
6208 int* elementBoundaryElements,
6209 int* elementBoundaryLocalElementBoundaries,
6210 int* nFreeDOF_element_r,
6212 int* nFreeDOF_element_u,
6214 int* csrRowIndeces_ru,
6215 int* csrColumnOffsets_eb_eNebN_ru,
6216 double* elementBoundaryFluxJacobian_eb,
6220 int ebNE,ebN,ebN_eN,eN_ebN,eN_global,ebN_element,ii,i,k,jj,j,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,jacIndex;
6221 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
6223 ebN = exteriorElementBoundaries[ebNE];
6224 eN_global = elementBoundaryElements[ebN*2+0];
6225 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
6226 for(ebN_eN=0;ebN_eN<nElementBoundaries_element;ebN_eN++)
6228 eN_ebN = elementNeighbors[eN_global*nElementBoundaries_element+ebN_eN];
6229 for(ii=0;ii<nFreeDOF_element_r[eN_global];ii++)
6231 i = freeLocal_r[eN_global*nDOF_test_element+ii];
6232 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
6235 for(jj=0;jj<nFreeDOF_element_u[eN_ebN];jj++)
6237 j = freeLocal_u[eN_ebN*nDOF_trial_element+
6239 jacIndex = csrRowIndeces_ru[eN_global*nDOF_test_element+
6242 csrColumnOffsets_eb_eNebN_ru[ebN*4*nElementBoundaries_element*nDOF_test_X_trial_element +
6243 0*2*nElementBoundaries_element*nDOF_test_X_trial_element +
6244 0*nElementBoundaries_element*nDOF_test_X_trial_element +
6245 ebN_eN*nDOF_test_X_trial_element +
6246 ii*nDOF_trial_element +
6250 elementBoundaryFluxJacobian_eb[ebN*2*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element +
6251 0*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6252 ebN_eN*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6253 k*nDOF_trial_element+
6256 w_dS[ebNE*nQuadraturePoints_elementBoundary*nDOF_test_element+
6257 k*nDOF_test_element+
6280 int nElementBoundaries_element,
6281 int nQuadraturePoints_elementBoundary,
6282 int nDOF_test_element,
6283 int nDOF_trial_element,
6284 int* interiorElementBoundaries,
6285 int* elementBoundaryElements,
6286 int* elementBoundaryLocalElementBoundaries,
6287 int* nFreeDOF_element_r,
6289 int* nFreeDOF_element_u,
6291 int* csrRowIndeces_ru,
6292 int* csrColumnOffsets_eb_ru,
6293 double* elementBoundaryFluxJacobian_2sided,
6297 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,ii,i,k,jj,j,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,jacIndex;
6298 for (ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
6300 ebN = interiorElementBoundaries[ebNI];
6301 left_eN_global = elementBoundaryElements[ebN*2+0];
6302 right_eN_global = elementBoundaryElements[ebN*2+1];
6303 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
6304 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
6306 for(ii=0;ii<nFreeDOF_element_r[left_eN_global];ii++)
6308 i = freeLocal_r[left_eN_global*nDOF_test_element+ii];
6309 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
6311 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
6313 j = freeLocal_u[left_eN_global*nDOF_trial_element+
6315 jacIndex = csrRowIndeces_ru[left_eN_global*nDOF_test_element+
6318 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element +
6319 0*2*nDOF_test_X_trial_element +
6320 0*nDOF_test_X_trial_element +
6321 ii*nDOF_trial_element +
6325 elementBoundaryFluxJacobian_2sided[ebN*2*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
6326 0*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
6327 0*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6328 k*nDOF_trial_element+
6331 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
6332 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
6333 k*nDOF_test_element+
6336 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
6338 j = freeLocal_u[right_eN_global*nDOF_trial_element+
6340 jacIndex = csrRowIndeces_ru[left_eN_global*nDOF_test_element+
6343 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element+
6344 0*2*nDOF_test_X_trial_element+
6345 1*nDOF_test_X_trial_element+
6346 ii*nDOF_trial_element+
6350 elementBoundaryFluxJacobian_2sided[ebN*2*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
6351 0*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
6352 1*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6353 k*nDOF_trial_element+
6356 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element +
6357 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
6358 k*nDOF_test_element+
6364 for(ii=0;ii<nFreeDOF_element_r[right_eN_global];ii++)
6366 i = freeLocal_r[right_eN_global*nDOF_test_element+
6368 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
6370 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
6372 j = freeLocal_u[left_eN_global*nDOF_trial_element+
6374 jacIndex = csrRowIndeces_ru[right_eN_global*nDOF_test_element+
6377 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element+
6378 1*2*nDOF_test_X_trial_element+
6379 0*nDOF_test_X_trial_element+
6380 ii*nDOF_trial_element+
6384 elementBoundaryFluxJacobian_2sided[ebN*2*2*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6385 1*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
6386 0*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6387 k*nDOF_trial_element+
6390 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
6391 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
6392 k*nDOF_test_element+
6395 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
6397 j = freeLocal_u[right_eN_global*nDOF_trial_element+
6399 jacIndex = csrRowIndeces_ru[right_eN_global*nDOF_test_element+
6402 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element+
6403 1*2*nDOF_test_X_trial_element+
6404 1*nDOF_test_X_trial_element+
6405 ii*nDOF_trial_element+
6409 elementBoundaryFluxJacobian_2sided[ebN*2*2*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6410 1*2*nQuadraturePoints_elementBoundary*nDOF_trial_element +
6411 1*nQuadraturePoints_elementBoundary*nDOF_trial_element+
6412 k*nDOF_trial_element+
6414 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
6415 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
6416 k*nDOF_test_element+
6428 int nQuadraturePoints_element,
6429 int nDOF_test_element,
6431 double* abs_det_jac,
6436 for (eN=0;eN<nElements_global;eN++)
6437 for (k=0;k<nQuadraturePoints_element;k++)
6438 for (i=0;i<nDOF_test_element;i++)
6439 w_dV[eN*nQuadraturePoints_element*nDOF_test_element+
6440 k*nDOF_test_element+
6443 w[eN*nQuadraturePoints_element*nDOF_test_element+
6444 k*nDOF_test_element+
6449 abs_det_jac[eN*nQuadraturePoints_element+
6457 int nQuadraturePoints_element,
6458 int nDOF_test_element,
6461 double* abs_det_jac,
6466 for (eN=0;eN<nElements_global;eN++)
6467 for (k=0;k<nQuadraturePoints_element;k++)
6468 for (i=0;i<nDOF_test_element;i++)
6469 for (I=0;I<nSpace;I++)
6470 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace+
6471 k*nDOF_test_element*nSpace+
6475 grad_w[eN*nQuadraturePoints_element*nDOF_test_element*nSpace+
6476 k*nDOF_test_element*nSpace+
6482 abs_det_jac[eN*nQuadraturePoints_element+
6488 int nQuadraturePoints_element,
6489 int nDOF_test_element,
6492 double* abs_det_jac,
6497 for (eN=0;eN<nElements_global;eN++)
6498 for (k=0;k<nQuadraturePoints_element;k++)
6499 for (i=0;i<nDOF_test_element;i++)
6500 for (I=0;I<nSpace;I++)
6501 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace+
6502 k*nDOF_test_element*nSpace+
6506 grad_w[eN*nQuadraturePoints_element*nDOF_test_element*nSpace+
6507 k*nDOF_test_element*nSpace+
6516 int nQuadraturePoints_element,
6517 int nDOF_test_element,
6520 double* abs_det_jac,
6524 int eN,i,k,I,J,nSpace2=nSpace*nSpace;
6525 for (eN=0;eN<nElements_global;eN++)
6526 for (k=0;k<nQuadraturePoints_element;k++)
6527 for (i=0;i<nDOF_test_element;i++)
6528 for (I=0;I<nSpace;I++)
6529 for (J=0;J<nSpace;J++)
6530 Hess_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace2+
6531 k*nDOF_test_element*nSpace2+
6536 Hess_w[eN*nQuadraturePoints_element*nDOF_test_element*nSpace2+
6537 k*nDOF_test_element*nSpace2+
6544 abs_det_jac[eN*nQuadraturePoints_element+
6552 int nQuadraturePoints_element,
6553 int nDOF_trial_element,
6554 int nDOF_test_element,
6559 int eN,k,i,j,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
6560 for (eN=0;eN<nElements_global;eN++)
6561 for (k=0;k<nQuadraturePoints_element;k++)
6562 for (i=0;i<nDOF_test_element;i++)
6563 for (j=0;j<nDOF_trial_element;j++)
6564 v_X_w_dV[eN*nQuadraturePoints_element*nDOF_test_X_trial_element +
6565 k*nDOF_test_X_trial_element+
6566 j*nDOF_test_element+
6569 v[eN*nQuadraturePoints_element*nDOF_trial_element +
6570 k*nDOF_trial_element+
6573 w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
6574 k*nDOF_test_element+
6582 int nQuadraturePoints_element,
6583 int nDOF_trial_element,
6584 int nDOF_test_element,
6588 double* v_X_grad_w_dV)
6590 int eN,k,i,j,I,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
6591 for (eN=0;eN<nElements_global;eN++)
6592 for (k=0;k<nQuadraturePoints_element;k++)
6593 for (i=0;i<nDOF_test_element;i++)
6594 for (j=0;j<nDOF_trial_element;j++)
6595 for (I=0;I<nSpace;I++)
6596 v_X_grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_X_trial_element*nSpace +
6597 k*nDOF_test_X_trial_element*nSpace+
6598 j*nDOF_test_element*nSpace+
6602 v[eN*nQuadraturePoints_element*nDOF_trial_element +
6603 k*nDOF_trial_element+
6606 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
6607 k*nDOF_test_element*nSpace+
6616 int nQuadraturePoints_element,
6617 int nDOF_trial_element,
6618 int nDOF_test_element,
6622 double* grad_v_X_w_dV)
6624 int eN,k,i,j,I,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
6625 for (eN=0;eN<nElements_global;eN++)
6626 for (k=0;k<nQuadraturePoints_element;k++)
6627 for (i=0;i<nDOF_test_element;i++)
6628 for (j=0;j<nDOF_trial_element;j++)
6629 for (I=0;I<nSpace;I++)
6630 grad_v_X_w_dV[eN*nQuadraturePoints_element*nDOF_test_X_trial_element*nSpace +
6631 k*nDOF_test_X_trial_element*nSpace+
6632 j*nDOF_test_element*nSpace+
6636 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
6637 k*nDOF_trial_element*nSpace+
6641 w_dV[eN*nQuadraturePoints_element*nDOF_test_element +
6642 k*nDOF_test_element+
6650 int nQuadraturePoints_element,
6651 int nDOF_trial_element,
6652 int nDOF_test_element,
6656 double* grad_v_X_grad_w_dV)
6658 int eN,k,i,j,I,J,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,nSpace2=nSpace*nSpace;
6659 for (eN=0;eN<nElements_global;eN++)
6660 for (k=0;k<nQuadraturePoints_element;k++)
6661 for (i=0;i<nDOF_test_element;i++)
6662 for (j=0;j<nDOF_trial_element;j++)
6663 for (I=0;I<nSpace;I++)
6664 for (J=0;J<nSpace;J++)
6665 grad_v_X_grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_X_trial_element*nSpace2 +
6666 k*nDOF_test_X_trial_element*nSpace2+
6667 j*nDOF_test_element*nSpace2+
6672 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
6673 k*nDOF_trial_element*nSpace+
6677 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
6678 k*nDOF_test_element*nSpace+
6687 int nElementBoundaries_element,
6688 int nElementBoundaryQuadraturePoints_elementBoundary,
6689 int nDOF_test_element,
6696 for (eN=0;eN<nElements_global;eN++)
6697 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
6698 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
6699 for (i=0;i<nDOF_test_element;i++)
6701 w_dS[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element+
6702 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element +
6703 k*nDOF_test_element+
6706 w[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element+
6707 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element +
6708 k*nDOF_test_element+
6713 sqrt_det_g[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary+
6714 ebN*nElementBoundaryQuadraturePoints_elementBoundary+
6719 int nElementBoundaries_element,
6720 int nElementBoundaryQuadraturePoints_elementBoundary,
6721 int nDOF_test_element,
6728 for (eN=0;eN<nElements_global;eN++)
6729 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
6730 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
6731 for (i=0;i<nDOF_test_element;i++)
6733 w_dS[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element+
6734 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element +
6735 k*nDOF_test_element+
6738 w[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element+
6739 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element +
6740 k*nDOF_test_element+
6745 sqrt_det_g[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary+
6746 ebN*nElementBoundaryQuadraturePoints_elementBoundary+
6755 int nElementBoundaries_element,
6756 int nElementBoundaryQuadraturePoints_elementBoundary,
6757 int nDOF_trial_element,
6758 int nDOF_test_element,
6763 int eN,ebN,k,i,j,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
6764 for (eN=0;eN<nElements_global;eN++)
6765 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
6766 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
6767 for (i=0;i<nDOF_test_element;i++)
6768 for (j=0;j<nDOF_trial_element;j++)
6769 v_X_w_dS[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_X_trial_element +
6770 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_X_trial_element +
6771 k*nDOF_test_X_trial_element+
6772 j*nDOF_test_element+
6775 v[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_trial_element +
6776 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_trial_element +
6777 k*nDOF_trial_element+
6780 w_dS[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element +
6781 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element +
6782 k*nDOF_trial_element+
6790 int nElementBoundaries_element,
6791 int nElementBoundaryQuadraturePoints_elementBoundary,
6792 int nDOF_trial_element,
6793 int nDOF_test_element,
6797 double* grad_v_X_w_dS)
6799 int eN,ebN,k,i,j,I,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
6800 for (eN=0;eN<nElements_global;eN++)
6801 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
6802 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
6803 for (i=0;i<nDOF_test_element;i++)
6804 for (j=0;j<nDOF_trial_element;j++)
6805 for (I=0;I<nSpace;I++)
6806 grad_v_X_w_dS[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_X_trial_element*nSpace +
6807 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_X_trial_element*nSpace +
6808 k*nDOF_test_X_trial_element*nSpace+
6809 j*nDOF_test_element*nSpace+
6813 grad_v[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace +
6814 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace +
6815 k*nDOF_trial_element*nSpace+
6819 w_dS[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element +
6820 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element +
6821 k*nDOF_test_element+
6829 int nDOF_test_element,
6830 int nExteriorElementBoundaries_global,
6831 const int* exteriorElementBoundariesArray,
6832 const int* elementBoundaryElementsArray,
6833 const int* elementBoundaryLocalElementBoundariesArray,
6840 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
6842 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
6843 for (i=0;i<nDOF_test_element;i++)
6845 w_dS[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element +
6846 k*nDOF_test_element+
6849 w[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element +
6850 k*nDOF_test_element+
6855 sqrt_det_g[ebNE*nElementBoundaryQuadraturePoints_elementBoundary+
6865 int nDOF_trial_element,
6866 int nDOF_test_element,
6867 int nExteriorElementBoundaries_global,
6868 const int* exteriorElementBoundariesArray,
6869 const int* elementBoundaryElementsArray,
6870 const int* elementBoundaryLocalElementBoundariesArray,
6875 int ebNE,k,i,j,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
6876 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
6877 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
6878 for (i=0;i<nDOF_test_element;i++)
6879 for (j=0;j<nDOF_trial_element;j++)
6880 v_X_w_dS[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_X_trial_element +
6881 k*nDOF_test_X_trial_element+
6882 j*nDOF_test_element+
6885 v[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_trial_element +
6886 k*nDOF_trial_element+
6889 w_dS[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element +
6890 k*nDOF_trial_element+
6898 int nDOF_trial_element,
6899 int nDOF_test_element,
6901 int nExteriorElementBoundaries_global,
6902 const int* exteriorElementBoundariesArray,
6903 const int* elementBoundaryElementsArray,
6904 const int* elementBoundaryLocalElementBoundariesArray,
6907 double* grad_v_X_w_dS)
6909 int ebNE,k,i,j,I,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
6910 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
6911 for (k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
6912 for (i=0;i<nDOF_test_element;i++)
6913 for (j=0;j<nDOF_trial_element;j++)
6914 for (I=0;I<nSpace;I++)
6915 grad_v_X_w_dS[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_X_trial_element*nSpace +
6916 k*nDOF_test_X_trial_element*nSpace+
6917 j*nDOF_test_element*nSpace+
6921 grad_v[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace +
6922 k*nDOF_trial_element*nSpace+
6926 w_dS[ebNE*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_test_element +
6927 k*nDOF_test_element+
6936 int nQuadraturePoints_element,
6938 double* referenceWeights,
6942 for (eN=0;eN<nElements_global;eN++)
6943 for (k=0;k<nQuadraturePoints_element;k++)
6944 weights[eN*nQuadraturePoints_element+
6947 abs_det_J[eN*nQuadraturePoints_element+
6950 referenceWeights[k];
6954 int nElementBoundaries_element,
6955 int nQuadraturePoints_elementBoundary,
6957 double* referenceWeights,
6961 for (eN=0;eN<nElements_global;eN++)
6962 for (ebN=0; ebN < nElementBoundaries_element; ebN++)
6963 for (k=0;k<nQuadraturePoints_elementBoundary;k++)
6964 weights[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
6965 ebN*nQuadraturePoints_elementBoundary +
6968 sqrt_det_g[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
6969 ebN*nQuadraturePoints_elementBoundary +
6972 referenceWeights[k];
6976 int nExteriorElementBoundaries_global,
6978 double* referenceWeights,
6982 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
6983 for (k=0;k<nQuadraturePoints_elementBoundary;k++)
6984 weights[ebNE*nQuadraturePoints_elementBoundary +
6987 sqrt_det_g[ebNE*nQuadraturePoints_elementBoundary +
6990 referenceWeights[k];
6997 int nQuadraturePoints_element,
6998 int nDOF_trial_element,
7006 memset(
u,0,
sizeof(
double)*nElements_global*nQuadraturePoints_element*nComponents);
7007 for (eN=0;eN<nElements_global;eN++)
7008 for (k=0;k<nQuadraturePoints_element;k++)
7009 for (j=0;j<nDOF_trial_element;j++)
7010 for (t=0;t<nComponents;t++)
7011 u[eN*nQuadraturePoints_element*nComponents+
7015 dof[l2g[eN*nDOF_trial_element+
7019 v[eN*nQuadraturePoints_element*nDOF_trial_element+
7020 k*nDOF_trial_element+
7028 int nQuadraturePoints_element,
7029 int nDOF_trial_element,
7038 memset(grad_u,0,
sizeof(
double)*nElements_global*nQuadraturePoints_element*nComponents*nSpace);
7039 for (eN=0;eN<nElements_global;eN++)
7040 for (k=0;k<nQuadraturePoints_element;k++)
7041 for (j=0;j<nDOF_trial_element;j++)
7042 for (t=0;t<nComponents;t++)
7043 for (I=0;I<nSpace;I++)
7044 grad_u[eN*nQuadraturePoints_element*nComponents*nSpace+
7045 k*nComponents*nSpace+
7049 dof[l2g[eN*nDOF_trial_element+
7053 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace+
7054 k*nDOF_trial_element*nSpace+
7060 int nQuadraturePoints_element,
7061 int nDOF_trial_element,
7069 int eN,k,j,t,I,J,nSpace2=nSpace*nSpace;
7070 memset(Hessian_u,0,
sizeof(
double)*nElements_global*nQuadraturePoints_element*nComponents*nSpace2);
7071 for (eN=0;eN<nElements_global;eN++)
7072 for (k=0;k<nQuadraturePoints_element;k++)
7073 for (j=0;j<nDOF_trial_element;j++)
7074 for (t=0;t<nComponents;t++)
7075 for (I=0;I<nSpace;I++)
7076 for (J=0;J<nSpace;J++)
7077 Hessian_u[eN*nQuadraturePoints_element*nComponents*nSpace2+
7078 k*nComponents*nSpace2+
7083 dof[l2g[eN*nDOF_trial_element+
7087 Hessian_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace2+
7088 k*nDOF_trial_element*nSpace2+
7139 int nQuadraturePoints_element,
7140 int nDOF_trial_element,
7141 int nDOF_test_element,
7146 double* grad_v_X_grad_w_dV,
7147 double* grad_u_X_grad_w_dV)
7149 int eN,k,j,i,I,J,t,nSpace2=nSpace*nSpace;
7150 int nDOF_test_X_trial_element = nDOF_test_element*nDOF_trial_element;
7151 memset(grad_u_X_grad_w_dV,0,
sizeof(
double)*nElements_global*nQuadraturePoints_element*nDOF_test_element*nComponents*nSpace2);
7152 for(eN=0;eN<nElements_global;eN++)
7153 for(k=0;k<nQuadraturePoints_element;k++)
7154 for(j=0;j<nDOF_trial_element;j++)
7155 for(i=0;i<nDOF_test_element;i++)
7156 for (t=0;t<nComponents;t++)
7157 for(I=0;I<nSpace;I++)
7158 for(J=0;J<nSpace;J++)
7159 grad_u_X_grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nComponents*nSpace2+
7160 k*nDOF_test_element*nComponents*nSpace2 +
7161 i*nComponents*nSpace2 +
7166 dof[l2g[eN*nDOF_trial_element+
7170 grad_v_X_grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_X_trial_element*nSpace2 +
7171 k*nDOF_test_X_trial_element*nSpace2 +
7172 j*nDOF_test_element*nSpace2 +
7182 int nElementBoundaries_element,
7183 int nQuadraturePoints_elementBoundary,
7184 int nDOF_trial_element,
7192 memset(
u,0,
sizeof(
double)*nElements_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nComponents);
7193 for(eN=0;eN<nElements_global;eN++)
7194 for(ebN=0;ebN<nElementBoundaries_element;ebN++)
7195 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
7196 for(j=0;j<nDOF_trial_element;j++)
7197 for(t=0;t<nComponents;t++)
7198 u[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nComponents+
7199 ebN*nQuadraturePoints_elementBoundary*nComponents+
7203 dof[l2g[eN*nDOF_trial_element+j]*nComponents+
7206 v[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
7207 ebN*nQuadraturePoints_elementBoundary*nDOF_trial_element+
7208 k*nDOF_trial_element+
7217 int nElementBoundaries_element,
7218 int nQuadraturePoints_elementBoundary,
7219 int nDOF_trial_element,
7228 memset(grad_u,0,
sizeof(
double)*nElements_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nComponents*nSpace);
7229 for(eN=0;eN<nElements_global;eN++)
7230 for(ebN=0;ebN<nElementBoundaries_element;ebN++)
7231 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
7232 for(j=0;j<nDOF_trial_element;j++)
7233 for(t=0;t<nComponents;t++)
7234 for(I=0;I<nSpace;I++)
7235 grad_u[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nComponents*nSpace+
7236 ebN*nQuadraturePoints_elementBoundary*nComponents*nSpace+
7237 k*nComponents*nSpace+
7241 dof[l2g[eN*nDOF_trial_element+j]*nComponents+
7244 grad_v[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
7245 ebN*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
7246 k*nDOF_trial_element*nSpace+
7251 int nDOF_trial_element,
7253 int nExteriorElementBoundaries_global,
7254 const int * exteriorElementBoundariesArray,
7255 const int * elementBoundaryElementsArray,
7256 const int * elementBoundaryLocalElementBoundariesArray,
7262 int eN,ebN,ebNE,ebN_local,k,j,t;
7263 memset(
u,0,
sizeof(
double)*nExteriorElementBoundaries_global*nQuadraturePoints_elementBoundary*nComponents);
7264 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
7266 ebN = exteriorElementBoundariesArray[ebNE];
7267 eN = elementBoundaryElementsArray[ebN*2+0];
7268 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
7269 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
7270 for(j=0;j<nDOF_trial_element;j++)
7271 for(t=0;t<nComponents;t++)
7272 u[ebNE*nQuadraturePoints_elementBoundary*nComponents+
7276 dof[l2g[eN*nDOF_trial_element+j]*nComponents+
7279 v[ebNE*nQuadraturePoints_elementBoundary*nDOF_trial_element+
7280 k*nDOF_trial_element+
7286 int nDOF_trial_element,
7289 int nExteriorElementBoundaries_global,
7290 const int * exteriorElementBoundariesArray,
7291 const int * elementBoundaryElementsArray,
7292 const int * elementBoundaryLocalElementBoundariesArray,
7298 int eN,ebN,ebNE,ebN_local,k,j,t,I;
7299 memset(grad_u,0,
sizeof(
double)*nExteriorElementBoundaries_global*nQuadraturePoints_elementBoundary*nComponents*nSpace);
7300 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
7302 ebN = exteriorElementBoundariesArray[ebNE];
7303 eN = elementBoundaryElementsArray[ebN*2+0];
7304 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
7305 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
7306 for(j=0;j<nDOF_trial_element;j++)
7307 for(t=0;t<nComponents;t++)
7308 for(I=0;I<nSpace;I++)
7309 grad_u[ebNE*nQuadraturePoints_elementBoundary*nComponents*nSpace+
7310 k*nComponents*nSpace+
7314 dof[l2g[eN*nDOF_trial_element+j]*nComponents+
7317 grad_v[ebNE*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
7318 k*nDOF_trial_element*nSpace+
7329 int nQuadraturePoints_element,
7336 int eN,k,I,J,nSpace2=nSpace*nSpace;
7337 for (eN=0;eN<nElements_global;eN++)
7338 for (k=0;k<nQuadraturePoints_element;k++)
7339 for (I=0;I<nSpace;I++)
7341 v[eN*nQuadraturePoints_element*nSpace+
7345 f[eN*nQuadraturePoints_element*nSpace+
7348 for (J=0;J<nSpace;J++)
7349 v[eN*nQuadraturePoints_element*nSpace+
7353 a[eN*nQuadraturePoints_element*nSpace2+
7358 grad_phi[eN*nQuadraturePoints_element*nSpace+
7371 jac[jacIndex] += val;
7380 memset(jac,0,
sizeof(
double)*nNonzeros);
7384 int nElementBoundaries_element,
7385 int nQuadraturePoints_elementBoundary,
7387 int* interiorElementBoundaries,
7388 int* elementBoundaryElements,
7389 int* elementBoundaryLocalElementBoundaries,
7399 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,k,I,J,nSpace2=nSpace*nSpace;
7400 register double vLeft,vRight,mLeft,mRight;
7401 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
7403 ebN = interiorElementBoundaries[ebNI];
7404 left_eN_global = elementBoundaryElements[ebN*2+0];
7405 right_eN_global = elementBoundaryElements[ebN*2+1];
7406 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
7407 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
7408 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
7412 m[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
7413 left_ebN_element*nQuadraturePoints_elementBoundary+
7417 m[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
7418 right_ebN_element*nQuadraturePoints_elementBoundary+
7420 for (I=0;I<nSpace;I++)
7424 f[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7425 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7430 f[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7431 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7434 for (J=0;J<nSpace;J++)
7438 a[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace2+
7439 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace2+
7444 grad_phi[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7445 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7449 a[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace2+
7450 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace2+
7455 grad_phi[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7456 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7460 vAverage[ebN*nQuadraturePoints_elementBoundary*nSpace+
7462 I] = 0.5*(vLeft + vRight);
7463 vJump[ebN*nQuadraturePoints_elementBoundary*nSpace+
7465 I] = (vLeft - vRight);
7467 mAverage[ebN*nQuadraturePoints_elementBoundary+
7468 k] = 0.5*(mLeft+mRight);
7469 mJump[ebN*nQuadraturePoints_elementBoundary+
7470 k] = mLeft - mRight;
7476 int nElementBoundaries_element,
7477 int nQuadraturePoints_elementBoundary,
7479 int* exteriorElementBoundaries,
7480 int* elementBoundaryElements,
7481 int* elementBoundaryLocalElementBoundaries,
7491 int ebNE,ebN,left_eN_global,left_ebN_element,k,I,J,nSpace2=nSpace*nSpace;
7492 register double vLeft,mLeft;
7493 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
7495 ebN = exteriorElementBoundaries[ebNE];
7496 left_eN_global = elementBoundaryElements[ebN*2+0];
7497 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
7498 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
7502 m[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
7503 left_ebN_element*nQuadraturePoints_elementBoundary+
7505 for (I=0;I<nSpace;I++)
7509 f[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7510 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7513 for (J=0;J<nSpace;J++)
7517 a[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace2+
7518 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace2+
7523 grad_phi[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7524 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7528 vAverage[ebN*nQuadraturePoints_elementBoundary*nSpace+
7531 vJump[ebN*nQuadraturePoints_elementBoundary*nSpace+
7535 mAverage[ebN*nQuadraturePoints_elementBoundary+
7537 mJump[ebN*nQuadraturePoints_elementBoundary+
7547 int nExteriorElementBoundaries_global,
7548 int nQuadraturePoints_elementBoundary,
7550 int* exteriorElementBoundaries,
7551 int* elementBoundaryElements,
7552 int* elementBoundaryLocalElementBoundaries,
7558 double multiple = 0.0;
7559 if (updateFluxValues > 0)
7562 printf(
"setExteriorGlobalElementBoundaryVelocityValues update= %d nExtElmBndr_global= %d nQuadElmBndr= %d nSpace=%d \n",
7563 updateFluxValues,nExteriorElementBoundaries_global,nQuadraturePoints_elementBoundary,nSpace);
7564 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
7566 ebN = exteriorElementBoundaries[ebNE];
7567 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
7568 for (I=0;I<nSpace;I++)
7570 v_out[ebN*nQuadraturePoints_elementBoundary*nSpace+
7573 multiple*v_out[ebN*nQuadraturePoints_elementBoundary*nSpace+
7577 n[ebN*nQuadraturePoints_elementBoundary*nSpace+
7581 vn_in[ebN*nQuadraturePoints_elementBoundary+
7585 printf(
"setExtGlobElmVel ebN=%d k=%d I=%d vn_in=%g v_out=%g \n",
7587 vn_in[ebN*nQuadraturePoints_elementBoundary+
7589 v_out[ebN*nQuadraturePoints_elementBoundary*nSpace+
7603 int nQuadraturePoints_element,
7605 int computeDiffusiveTimeStepLimit,
7606 double* elementDiameter,
7615 int eN,k,I,nSpace2=nSpace*nSpace;
7616 double h,Vlin,Alin,A_II,
num,den,cfl1,cfl2;
7617 for(eN=0;eN<nElements_global;eN++)
7619 h = elementDiameter[eN];
7620 for (k=0;k<nQuadraturePoints_element;k++)
7624 for(I=0;I<nSpace;I++)
7627 df[eN*nQuadraturePoints_element*nSpace +
7631 df[eN*nQuadraturePoints_element*nSpace +
7636 for(I=0;I<nSpace;I++)
7638 A_II = a[eN*nQuadraturePoints_element*nSpace2 +
7642 Alin = (A_II > Alin) ? A_II : Alin;
7644 Alin*=dphi[eN*nQuadraturePoints_element +
7648 if (computeDiffusiveTimeStepLimit)
7649 cfl[eN*nQuadraturePoints_element +
7652 cfl[eN*nQuadraturePoints_element +
7654 num = 0.5*Vlin*h + 1.0e-8;
7655 den = Alin +
num*1.0e-8;
7656 pe[eN*nQuadraturePoints_element + k] =
num/den;
7662 int nQuadraturePoints_element,
7664 int computeDiffusiveTimeStepLimit,
7667 double* elementDiameter,
7676 int eN,k,I,m,
nnz=rowptr[nSpace];
7677 double h,Vlin,Alin,A_II,
num,den,cfl1,cfl2;
7678 for(eN=0;eN<nElements_global;eN++)
7680 h = elementDiameter[eN];
7681 for (k=0;k<nQuadraturePoints_element;k++)
7685 for(I=0;I<nSpace;I++)
7689 df[eN*nQuadraturePoints_element*nSpace +
7693 df[eN*nQuadraturePoints_element*nSpace +
7699 for(I=0;I<nSpace;I++)
7701 for(m=rowptr[I];m<rowptr[I+1];m++)
7705 A_II = a[eN*nQuadraturePoints_element*
nnz+
7708 Alin = (A_II > Alin) ? A_II : Alin;
7712 Alin*=dphi[eN*nQuadraturePoints_element +
7716 if (computeDiffusiveTimeStepLimit)
7717 cfl[eN*nQuadraturePoints_element +
7720 cfl[eN*nQuadraturePoints_element +
7722 num = 0.5*Vlin*h + 1.0e-8;
7723 den = Alin +
num*1.0e-8;
7724 pe[eN*nQuadraturePoints_element + k] =
num/den;
7731 int nQuadraturePoints_element,
7733 double* elementDiameter,
7739 double h,Vlin,dmdu,cfl1;
7740 for(eN=0;eN<nElements_global;eN++)
7742 h = elementDiameter[eN];
7743 for (k=0;k<nQuadraturePoints_element;k++)
7745 dmdu = dm[eN*nQuadraturePoints_element + k];
7747 for(I=0;I<nSpace;I++)
7750 df[eN*nQuadraturePoints_element*nSpace +
7754 df[eN*nQuadraturePoints_element*nSpace +
7757 Vlin = sqrt(Vlin)/(dmdu+1.0e-10);
7759 cfl[eN*nQuadraturePoints_element +
7767 int nQuadraturePoints_element,
7769 double* elementDiameter,
7776 double h,Vlin,dmdu,cfl1;
7777 for(eN=0;eN<nElements_global;eN++)
7779 h = elementDiameter[eN];
7780 for (k=0;k<nQuadraturePoints_element;k++)
7782 dmdu = dm[eN*nQuadraturePoints_element + k];
7784 for(I=0;I<nSpace;I++)
7787 df1[eN*nQuadraturePoints_element*nSpace +
7791 df1[eN*nQuadraturePoints_element*nSpace +
7795 df2[eN*nQuadraturePoints_element*nSpace +
7799 df2[eN*nQuadraturePoints_element*nSpace +
7803 Vlin = sqrt(Vlin)/(dmdu+1.0e-10);
7805 cfl[eN*nQuadraturePoints_element +
7817 int nElementBoundaries_element,
7818 int nQuadraturePoints_elementBoundary,
7820 int* interiorElementBoundaries,
7821 int* elementBoundaryElements,
7822 int* elementBoundaryLocalElementBoundaries,
7827 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,k,J,I,nSpace2=nSpace*nSpace;
7828 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
7830 ebN = interiorElementBoundaries[ebNI];
7831 left_eN_global = elementBoundaryElements[ebN*2+0];
7832 right_eN_global = elementBoundaryElements[ebN*2+1];
7833 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
7834 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
7835 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
7836 for(I=0;I<nSpace;I++)
7837 for(J=0;J<nSpace;J++)
7839 velocity[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7840 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7843 a[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace2+
7844 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace2+
7849 grad_phi[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7850 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7852 velocity[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7853 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7856 a[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace2+
7857 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace2+
7862 grad_phi[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7863 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7870 int nElementBoundaries_element,
7871 int nQuadraturePoints_elementBoundary,
7875 int* interiorElementBoundaries,
7876 int* elementBoundaryElements,
7877 int* elementBoundaryLocalElementBoundaries,
7882 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,k,m,I,
nnz=rowptr[nSpace];
7883 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
7885 ebN = interiorElementBoundaries[ebNI];
7886 left_eN_global = elementBoundaryElements[ebN*2+0];
7887 right_eN_global = elementBoundaryElements[ebN*2+1];
7888 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
7889 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
7890 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
7891 for(I=0;I<nSpace;I++)
7892 for(m=rowptr[I];m<rowptr[I+1];m++)
7894 velocity[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7895 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7898 a[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
7899 left_ebN_element*nQuadraturePoints_elementBoundary*
nnz+
7903 grad_phi[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7904 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7905 k*nSpace+colind[m]];
7906 velocity[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7907 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7910 a[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
7911 right_ebN_element*nQuadraturePoints_elementBoundary*
nnz+
7915 grad_phi[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7916 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7917 k*nSpace+colind[m]];
7926 int nElementBoundaries_element,
7927 int nQuadraturePoints_elementBoundary,
7929 int* exteriorElementBoundaries,
7930 int* elementBoundaryElements,
7931 int* elementBoundaryLocalElementBoundaries,
7936 int ebNE,ebN,eN_global,ebN_element,k,J,I,nSpace2=nSpace*nSpace;
7937 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
7939 ebN = exteriorElementBoundaries[ebNE];
7940 eN_global = elementBoundaryElements[ebN*2+0];
7941 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
7942 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
7943 for(I=0;I<nSpace;I++)
7945 for(J=0;J<nSpace;J++)
7947 velocity[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7948 ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7951 a[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace2+
7952 ebN_element*nQuadraturePoints_elementBoundary*nSpace2+
7957 grad_phi[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7958 ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7966 int nElementBoundaries_element,
7967 int nQuadraturePoints_elementBoundary,
7971 int* exteriorElementBoundaries,
7972 int* elementBoundaryElements,
7973 int* elementBoundaryLocalElementBoundaries,
7978 int ebNE,ebN,eN_global,ebN_element,k,m,I,
nnz=rowptr[nSpace];
7979 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
7981 ebN = exteriorElementBoundaries[ebNE];
7982 eN_global = elementBoundaryElements[ebN*2+0];
7983 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
7984 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
7985 for(I=0;I<nSpace;I++)
7987 for(m=rowptr[I];m<rowptr[I+1];m++)
7989 velocity[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7990 ebN_element*nQuadraturePoints_elementBoundary*nSpace+
7993 a[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
7994 ebN_element*nQuadraturePoints_elementBoundary*
nnz+
7998 grad_phi[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
7999 ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8000 k*nSpace+colind[m]];
8010 int nQuadraturePoints_elementBoundary,
8012 int* exteriorElementBoundaries,
8013 int* elementBoundaryElements,
8014 int* elementBoundaryLocalElementBoundaries,
8019 int ebNE,k,J,I,nSpace2=nSpace*nSpace;
8020 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
8022 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8023 for(I=0;I<nSpace;I++)
8025 for(J=0;J<nSpace;J++)
8027 velocity[ebNE*nQuadraturePoints_elementBoundary*nSpace+
8030 a[ebNE*nQuadraturePoints_elementBoundary*nSpace2+
8035 grad_phi[ebNE*nQuadraturePoints_elementBoundary*nSpace+
8043 int nQuadraturePoints_elementBoundary,
8047 int* exteriorElementBoundaries,
8048 int* elementBoundaryElements,
8049 int* elementBoundaryLocalElementBoundaries,
8054 int ebNE,k,m,I,
nnz=rowptr[nSpace];
8055 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
8057 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8058 for(I=0;I<nSpace;I++)
8060 for(m=rowptr[I];m<rowptr[I+1];m++)
8062 velocity[ebNE*nQuadraturePoints_elementBoundary*nSpace+
8065 a[ebNE*nQuadraturePoints_elementBoundary*
nnz+
8069 grad_phi[ebNE*nQuadraturePoints_elementBoundary*nSpace+
8070 k*nSpace+colind[m]];
8081 int nElementBoundaries_element,
8082 int nQuadraturePoints_elementBoundary,
8084 int* interiorElementBoundaries,
8085 int* elementBoundaryElements,
8086 int* elementBoundaryLocalElementBoundaries,
8090 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,k,J;
8091 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
8093 ebN = interiorElementBoundaries[ebNI];
8094 left_eN_global = elementBoundaryElements[ebN*2+0];
8095 right_eN_global = elementBoundaryElements[ebN*2+1];
8096 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
8097 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
8098 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8099 for (J=0;J<nSpace;J++)
8101 velocity[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8102 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8106 f[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8107 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8110 velocity[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8111 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8115 f[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8116 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8128 int nElementBoundaries_element,
8129 int nQuadraturePoints_elementBoundary,
8131 int* exteriorElementBoundaries,
8132 int* elementBoundaryElements,
8133 int* elementBoundaryLocalElementBoundaries,
8137 int ebNE,ebN,eN_global,ebN_element,k,J;
8138 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
8140 ebN = exteriorElementBoundaries[ebNE];
8141 eN_global = elementBoundaryElements[ebN*2+0];
8142 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
8143 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8144 for(J=0;J<nSpace;J++)
8146 velocity[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8147 ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8151 f[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8152 ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8162 int nQuadraturePoints_elementBoundary,
8164 int* exteriorElementBoundaries,
8165 int* elementBoundaryElements,
8166 int* elementBoundaryLocalElementBoundaries,
8171 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
8173 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8174 for(J=0;J<nSpace;J++)
8176 velocity[ebNE*nQuadraturePoints_elementBoundary*nSpace+
8180 f[ebNE*nQuadraturePoints_elementBoundary*nSpace+
8191 int nElementBoundaries_element,
8192 int nQuadraturePoints_elementBoundary,
8193 int nQuadraturePoints_element,
8195 int* interiorElementBoundaries,
8196 int* elementBoundaryElements,
8197 int* elementBoundaryLocalElementBoundaries,
8202 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,k,I;
8203 double numDiffAvg_left,numDiffAvg_right;
8204 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
8206 ebN = interiorElementBoundaries[ebNI];
8207 left_eN_global = elementBoundaryElements[ebN*2+0];
8208 right_eN_global = elementBoundaryElements[ebN*2+1];
8209 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
8210 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
8212 numDiffAvg_left = numDiff[left_eN_global*nQuadraturePoints_element+0];
8213 numDiffAvg_right = numDiff[right_eN_global*nQuadraturePoints_element+0];
8214 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8215 for(I=0;I<nSpace;I++)
8217 velocity[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8218 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8223 grad_u[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8224 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8226 velocity[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8227 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8232 grad_u[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8233 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8243 int nElementBoundaries_element,
8244 int nQuadraturePoints_elementBoundary,
8245 int nQuadraturePoints_element,
8247 int* exteriorElementBoundaries,
8248 int* elementBoundaryElements,
8249 int* elementBoundaryLocalElementBoundaries,
8254 int ebNE,ebN,eN_global,ebN_element,k,I;
8256 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
8258 ebN = exteriorElementBoundaries[ebNE];
8259 eN_global = elementBoundaryElements[ebN*2+0];
8260 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
8262 numDiffAvg = numDiff[eN_global*nQuadraturePoints_element+0];
8263 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8264 for(I=0;I<nSpace;I++)
8266 velocity[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8267 ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8272 grad_u[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8273 ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8285 int nQuadraturePoints_elementBoundary,
8287 int* exteriorElementBoundaries,
8288 int* elementBoundaryElements,
8289 int* elementBoundaryLocalElementBoundaries,
8296 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
8298 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8299 for(I=0;I<nSpace;I++)
8301 numDiffAvg = numDiff[ebNE*nQuadraturePoints_elementBoundary+k];
8302 velocity[ebNE*nQuadraturePoints_elementBoundary*nSpace+
8307 grad_u[ebNE*nQuadraturePoints_elementBoundary*nSpace+
8314 int nElementBoundaries_element,
8315 int nQuadraturePoints_elementBoundary,
8317 int* interiorElementBoundaries,
8318 int* elementBoundaryElements,
8319 int* elementBoundaryLocalElementBoundaries,
8323 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,k,I;
8324 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
8326 ebN = interiorElementBoundaries[ebNI];
8327 left_eN_global = elementBoundaryElements[ebN*2+0];
8328 right_eN_global = elementBoundaryElements[ebN*2+1];
8329 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
8330 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
8331 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8332 for (I=0;I<nSpace;I++)
8333 vAverage[ebN*nQuadraturePoints_elementBoundary*nSpace+
8336 = 0.5*(
v[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8337 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8341 v[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8342 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8349 int nElementBoundaries_element,
8350 int nQuadraturePoints_elementBoundary,
8352 int* exteriorElementBoundaries,
8353 int* elementBoundaryElements,
8354 int* elementBoundaryLocalElementBoundaries,
8358 int ebNE,ebN,left_eN_global,left_ebN_element,k,I;
8359 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
8361 ebN = exteriorElementBoundaries[ebNE];
8362 left_eN_global = elementBoundaryElements[ebN*2+0];
8363 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
8364 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8365 for (I=0;I<nSpace;I++)
8368 vAverage[ebN*nQuadraturePoints_elementBoundary*nSpace+
8371 =
v[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8372 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8391 int nDOF_test_element,
8392 double * elementResidual,
8393 double * conservationResidual)
8396 for (eN = 0; eN < nElements_global; eN++)
8398 conservationResidual[eN] = 0.0;
8399 for (i = 0; i < nDOF_test_element; i++)
8400 conservationResidual[eN] += elementResidual[eN*nDOF_test_element + i];
8412 int nDOF_test_element,
8413 int nElementBoundaries_element,
8414 int nQuadraturePoints_elementBoundary,
8418 double * elementResidual,
8420 double * conservationResidual)
8423 double boundaryFlux;
8424 for (eN = 0; eN < nElements_global; eN++)
8426 conservationResidual[eN] = 0.0;
8428 for (i = 0; i < nDOF_test_element; i++)
8429 conservationResidual[eN] += elementResidual[eN*nDOF_test_element + i];
8432 for (ebN = 0; ebN < nElementBoundaries_element; ebN++)
8434 for (k = 0; k < nQuadraturePoints_elementBoundary; k++)
8436 for (I = 0; I < nSpace; I++)
8439 n[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace +
8440 ebN*nQuadraturePoints_elementBoundary*nSpace +
8444 velocity[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace +
8445 ebN*nQuadraturePoints_elementBoundary*nSpace +
8449 dS_u[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary +
8450 ebN*nQuadraturePoints_elementBoundary +
8460 conservationResidual[eN] += boundaryFlux;
8557 int nInteriorElementBoundaries_global,
8558 int nExteriorElementBoundaries_global,
8559 int nElementBoundaries_global,
8560 int nElementBoundaries_element,
8561 int nQuadraturePoints_elementBoundary,
8563 int * interiorElementBoundaries,
8564 int * exteriorElementBoundaries,
8565 int * elementBoundaryElementsArray,
8566 int * elementBoundaryLocalElementBoundariesArray,
8567 double * velocityBoundary_global,
8568 double * velocityBoundary_element)
8570 int ebN,ebNE,ebNI,eN_left,eN_right,ebN_left_element,ebN_right_element,k,I;
8572 for (ebNI = 0; ebNI < nInteriorElementBoundaries_global; ebNI++)
8574 ebN = interiorElementBoundaries[ebNI];
8575 eN_left = elementBoundaryElementsArray[ebN*2 + 0];
8576 eN_right= elementBoundaryElementsArray[ebN*2 + 1];
8577 ebN_left_element = elementBoundaryLocalElementBoundariesArray[ebN*2 + 0];
8578 ebN_right_element= elementBoundaryLocalElementBoundariesArray[ebN*2 + 1];
8580 for (k = 0; k < nQuadraturePoints_elementBoundary; k++)
8581 for (I = 0; I < nSpace; I++)
8583 velocityBoundary_element[eN_left*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace +
8584 ebN_left_element*nQuadraturePoints_elementBoundary*nSpace +
8587 velocityBoundary_global[ebN*nQuadraturePoints_elementBoundary*nSpace +
8590 velocityBoundary_element[eN_right*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace +
8591 ebN_right_element*nQuadraturePoints_elementBoundary*nSpace +
8594 velocityBoundary_global[ebN*nQuadraturePoints_elementBoundary*nSpace +
8601 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
8603 ebN = exteriorElementBoundaries[ebNE];
8604 eN_left = elementBoundaryElementsArray[ebN*2 + 0];
8605 ebN_left_element = elementBoundaryLocalElementBoundariesArray[ebN*2 + 0];
8607 for (k = 0; k < nQuadraturePoints_elementBoundary; k++)
8608 for (I = 0; I < nSpace; I++)
8610 velocityBoundary_element[eN_left*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace +
8611 ebN_left_element*nQuadraturePoints_elementBoundary*nSpace +
8614 velocityBoundary_global[ebN*nQuadraturePoints_elementBoundary*nSpace +
8621 int nQuadraturePoints_elementBoundary,
8623 int* exteriorElementBoundaries,
8624 int* fluxElementBoundaries,
8632 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
8634 ebN = exteriorElementBoundaries[ebNE];
8635 if (fluxElementBoundaries[ebNE] > 0)
8637 for (k = 0; k < nQuadraturePoints_elementBoundary; k++)
8639 for (I=0; I < nSpace; I++)
8641 val = velocity[ebN*nQuadraturePoints_elementBoundary*nSpace +
8643 velocity[ebN*nQuadraturePoints_elementBoundary*nSpace +
8646 flux[ebN*nQuadraturePoints_elementBoundary +
8649 normal[ebN*nQuadraturePoints_elementBoundary*nSpace +
8667#define TR_ALPHA_EXT 1.0
8673 int nElementBoundaries_element,
8674 int nQuadraturePoints_elementBoundary,
8675 int* interiorElementBoundaries,
8676 int* elementBoundaryElements,
8677 int* elementBoundaryLocalElementBoundaries,
8681 double* dphi_trace_left,
8682 double* dphi_trace_right)
8684 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,k;
8685 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
8687 ebN = interiorElementBoundaries[ebNI];
8688 left_eN_global = elementBoundaryElements[ebN*2+0];
8689 right_eN_global = elementBoundaryElements[ebN*2+1];
8690 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
8691 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
8692 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8694 phi_trace[ebN*nQuadraturePoints_elementBoundary+
8696 = (1.0-
TR_ALPHA)*
phi[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
8697 left_ebN_element*nQuadraturePoints_elementBoundary+
8700 TR_ALPHA*
phi[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
8701 right_ebN_element*nQuadraturePoints_elementBoundary+
8703 dphi_trace_left[ebN*nQuadraturePoints_elementBoundary+
8706 dphi[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
8707 left_ebN_element*nQuadraturePoints_elementBoundary+
8709 dphi_trace_right[ebN*nQuadraturePoints_elementBoundary+
8711 =
TR_ALPHA*dphi[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
8712 right_ebN_element*nQuadraturePoints_elementBoundary+
8722 int nExteriorElementBoundaries_global,
8723 int nElementBoundaries_element,
8724 int nQuadraturePoints_elementBoundary,
8725 int* exteriorElementBoundaries,
8726 int* elementBoundaryElements,
8727 int* elementBoundaryLocalElementBoundaries,
8732 double* dphi_trace_left)
8734 int ebNE,ebN,eN_global,ebN_element,k;
8735 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
8737 ebN = exteriorElementBoundaries[ebNE];
8738 eN_global = elementBoundaryElements[ebN*2+0];
8739 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
8740 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8742 phi_trace[ebN*nQuadraturePoints_elementBoundary+
8744 = (1.0-
TR_ALPHA_EXT)*
phi[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
8745 ebN_element*nQuadraturePoints_elementBoundary+
8748 TR_ALPHA_EXT*phi_bc[ebNE*nQuadraturePoints_elementBoundary+
8750 if(isDOFBoundary[ebNE*nQuadraturePoints_elementBoundary+k] == 1)
8751 dphi_trace_left[ebN*nQuadraturePoints_elementBoundary+
8753 = (1.0-
TR_ALPHA_EXT)*dphi[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
8754 ebN_element*nQuadraturePoints_elementBoundary+
8757 dphi_trace_left[ebN*nQuadraturePoints_elementBoundary+
8759 = dphi[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
8760 ebN_element*nQuadraturePoints_elementBoundary+
8769 int nElementBoundaries_element,
8770 int nQuadraturePoints_elementBoundary,
8771 int nDOF_test_element,
8773 int* interiorElementBoundaries,
8774 int* elementBoundaryElements,
8775 int* elementBoundaryLocalElementBoundaries,
8781 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,i,k,I;
8782 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
8784 ebN = interiorElementBoundaries[ebNI];
8785 left_eN_global = elementBoundaryElements[ebN*2+0];
8786 right_eN_global = elementBoundaryElements[ebN*2+1];
8787 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
8788 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
8789 for(i=0;i<nDOF_test_element;i++)
8790 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8791 for(I=0;I<nSpace;I++)
8793 b[left_eN_global*nDOF_test_element*nSpace+
8794 I*nDOF_test_element+
8797 phi_trace[ebN*nQuadraturePoints_elementBoundary+
8800 n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8801 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8805 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8806 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8807 k*nDOF_test_element+
8809 b[right_eN_global*nDOF_test_element*nSpace+
8810 I*nDOF_test_element+
8813 phi_trace[ebN*nQuadraturePoints_elementBoundary+
8816 n[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8817 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8821 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8822 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8823 k*nDOF_test_element+
8833 int nElementBoundaries_element,
8834 int nQuadraturePoints_elementBoundary,
8835 int nDOF_test_element,
8837 int* interiorElementBoundaries,
8838 int* elementBoundaryElements,
8839 int* elementBoundaryLocalElementBoundaries,
8841 double* dphi_trace_left,
8842 double* dphi_trace_right,
8848 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,i,j,k,I,nDOF_test_element2=nDOF_test_element*nDOF_test_element;
8849 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
8851 ebN = interiorElementBoundaries[ebNI];
8852 left_eN_global = elementBoundaryElements[ebN*2+0];
8853 right_eN_global = elementBoundaryElements[ebN*2+1];
8854 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
8855 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
8856 for(i=0;i<nDOF_test_element;i++)
8857 for(j=0;j<nDOF_test_element;j++)
8858 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8859 for(I=0;I<nSpace;I++)
8861 db[left_eN_global*nDOF_test_element2*nSpace+
8862 I*nDOF_test_element2+
8863 i*nDOF_test_element+
8866 dphi_trace_left[ebN*nQuadraturePoints_elementBoundary+
8869 v[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8870 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8871 k*nDOF_test_element+
8874 n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8875 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8879 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8880 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8881 k*nDOF_test_element+
8883 db_eb[left_eN_global*nElementBoundaries_element*nDOF_test_element2*nSpace+
8884 left_ebN_element*nDOF_test_element2*nSpace+
8885 I*nDOF_test_element2+
8886 i*nDOF_test_element+
8889 dphi_trace_right[ebN*nQuadraturePoints_elementBoundary+
8892 v[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8893 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8894 k*nDOF_test_element+
8897 n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8898 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8902 w_dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8903 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8904 k*nDOF_test_element+
8906 db_eb[right_eN_global*nElementBoundaries_element*nDOF_test_element2*nSpace+
8907 right_ebN_element*nDOF_test_element2*nSpace+
8908 I*nDOF_test_element2+
8909 i*nDOF_test_element+
8912 dphi_trace_left[ebN*nQuadraturePoints_elementBoundary+
8915 v[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8916 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8917 k*nDOF_test_element+
8920 n[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8921 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8925 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8926 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8927 k*nDOF_test_element+
8929 db[right_eN_global*nDOF_test_element2*nSpace+
8930 I*nDOF_test_element2+
8931 i*nDOF_test_element+
8934 dphi_trace_right[ebN*nQuadraturePoints_elementBoundary+
8937 v[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8938 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8939 k*nDOF_test_element+
8942 n[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8943 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8947 w_dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8948 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8949 k*nDOF_test_element+
8959 int nElementBoundaries_element,
8960 int nQuadraturePoints_elementBoundary,
8961 int nDOF_test_element,
8963 int* exteriorElementBoundaries,
8964 int* elementBoundaryElements,
8965 int* elementBoundaryLocalElementBoundaries,
8971 int ebNE,ebN,eN_global,ebN_element,i,k,I;
8972 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
8974 ebN = exteriorElementBoundaries[ebNE];
8975 eN_global = elementBoundaryElements[ebN*2+0];
8976 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
8977 for(i=0;i<nDOF_test_element;i++)
8978 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
8979 for (I=0;I<nSpace;I++)
8980 b[eN_global*nDOF_test_element*nSpace+
8981 I*nDOF_test_element+
8984 phi_trace[ebN*nQuadraturePoints_elementBoundary+
8987 n[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
8988 ebN_element*nQuadraturePoints_elementBoundary*nSpace+
8992 w_dS[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8993 ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
8994 k*nDOF_test_element+
9003 int nElementBoundaries_element,
9004 int nQuadraturePoints_elementBoundary,
9005 int nDOF_test_element,
9007 int* exteriorElementBoundaries,
9008 int* elementBoundaryElements,
9009 int* elementBoundaryLocalElementBoundaries,
9011 double* dphi_trace_left,
9017 int ebNE,ebN,eN_global,ebN_element,i,j,k,I,nDOF_test_element2=nDOF_test_element*nDOF_test_element;
9018 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
9020 ebN = exteriorElementBoundaries[ebNE];
9021 eN_global = elementBoundaryElements[ebN*2+0];
9022 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
9023 for(i=0;i<nDOF_test_element;i++)
9024 for(j=0;j<nDOF_test_element;j++)
9025 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
9026 for(I=0;I<nSpace;I++)
9028 db[eN_global*nDOF_test_element2*nSpace+
9029 I*nDOF_test_element2+
9030 i*nDOF_test_element+
9033 dphi_trace_left[ebN*nQuadraturePoints_elementBoundary+
9036 v[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
9037 ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
9038 k*nDOF_test_element+
9041 n[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
9042 ebN_element*nQuadraturePoints_elementBoundary*nSpace+
9046 w_dS[eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
9047 ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element+
9048 k*nDOF_test_element+
9055 int nQuadraturePoints_element,
9056 int nDOF_test_element,
9063 for(eN=0;eN<nElements_global;eN++)
9064 for (I=0;I<nSpace;I++)
9065 for (i=0;i<nDOF_test_element;i++)
9066 for (k=0;k<nQuadraturePoints_element;k++)
9067 b[eN*nDOF_test_element*nSpace +
9068 I*nDOF_test_element+
9071 phi[eN*nQuadraturePoints_element+
9074 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
9075 k*nDOF_test_element*nSpace +
9081 int nQuadraturePoints_element,
9082 int nDOF_test_element,
9092 for(eN=0;eN<nElements_global;eN++)
9093 for (I=0;I<nSpace;I++)
9094 for (i=0;i<nDOF_test_element;i++)
9095 for (k=0;k<nQuadraturePoints_element;k++)
9097 b[eN*nDOF_test_element*nSpace +
9098 I*nDOF_test_element+i]
9100 phi[eN*nQuadraturePoints_element+
9103 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
9104 k*nDOF_test_element*nSpace +
9109 b[eN*nDOF_test_element*nSpace +
9110 I*nDOF_test_element+i]
9111 -= epsilon*mf[eN*nQuadraturePoints_element+
9112 k ]*w_dV[eN*nQuadraturePoints_element*nDOF_test_element+ k*nDOF_test_element + i ];
9118 int nQuadraturePoints_element,
9119 int nDOF_test_element,
9126 int eN,i,j,k,I,nDOF_test_element2=nDOF_test_element*nDOF_test_element;
9127 for(eN=0;eN<nElements_global;eN++)
9128 for (I=0;I<nSpace;I++)
9129 for (i=0;i<nDOF_test_element;i++)
9130 for (j=0;j<nDOF_test_element;j++)
9131 for (k=0;k<nQuadraturePoints_element;k++)
9132 db[eN*nDOF_test_element2*nSpace +
9133 I*nDOF_test_element2+
9134 i*nDOF_test_element+
9137 dphi[eN*nQuadraturePoints_element+
9140 v[eN*nQuadraturePoints_element*nDOF_test_element+
9141 k*nDOF_test_element+
9144 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
9145 k*nDOF_test_element*nSpace +
9151 int nElementBoundaries_element,
9152 int nElementBoundaryQuadraturePoints_elementBoundary,
9155 int nQuadraturePoints_element,
9163 int eN,ebN,k,i,j,I,nDOF_element2=nDOF_element*nDOF_element;
9164 double V_dof[nSpace][nDOF_element];
9165 memset(V,0,
sizeof(
double)*
9167 nElementBoundaries_element*
9168 nElementBoundaryQuadraturePoints_elementBoundary*
9170 memset(qV,0,
sizeof(
double)*
9172 nQuadraturePoints_element*
9174 for(eN=0;eN<nElements_global;eN++)
9177 for(I=0;I<nSpace;I++)
9178 for(i=0;i<nDOF_element;i++)
9181 for(j=0;j<nDOF_element;j++)
9184 A_inv[eN*nDOF_element2+
9188 b[eN*nSpace*nDOF_element+
9193 for(k=0;k<nQuadraturePoints_element;k++)
9194 for(j=0;j<nDOF_element;j++)
9195 for(I=0;I<nSpace;I++)
9196 qV[eN*nQuadraturePoints_element*nSpace+
9202 qv[eN*nQuadraturePoints_element*nDOF_element+
9206 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
9207 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
9208 for(j=0;j<nDOF_element;j++)
9209 for(I=0;I<nSpace;I++)
9210 V[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace+
9211 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace+
9217 v[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9218 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9225 int nElementBoundaries_element,
9226 int nElementBoundaryQuadraturePoints_elementBoundary,
9229 int nQuadraturePoints_element,
9238 int eN,ebN,k,i,j,I,nDOF_element2=nDOF_element*nDOF_element,nSpace2=nSpace*nSpace;
9239 PROTEUS_LAPACK_INTEGER ipiv[nDOF_element],lwork=((PROTEUS_LAPACK_INTEGER)nDOF_element),dim=((PROTEUS_LAPACK_INTEGER)nDOF_element),info=0;
9240 double work[nDOF_element],A_inv[nDOF_element2];
9241 double V_dof[nSpace][nDOF_element];
9242 memset(V,0,
sizeof(
double)*
9244 nElementBoundaries_element*
9245 nElementBoundaryQuadraturePoints_elementBoundary*
9247 memset(qV,0,
sizeof(
double)*
9249 nQuadraturePoints_element*
9251 for(eN=0;eN<nElements_global;eN++)
9253 for(I=0;I<nSpace;I++)
9255 memset(A_inv,0,
sizeof(
double)*nDOF_element2);
9256 for(i=0;i<nDOF_element;i++)
9257 for(j=0;j<nDOF_element;j++)
9259 for(k=0;k<nQuadraturePoints_element;k++)
9262 A_inv[i*nDOF_element+j] += (1.0/qa[eN*nQuadraturePoints_element*nSpace2+
9266 *qv[eN*nQuadraturePoints_element*nDOF_element+
9270 qw_dV[eN*nQuadraturePoints_element*nDOF_element+
9276 dgetrf_(&dim,&dim,A_inv,&dim,ipiv,&info);
9277 dgetri_(&dim,A_inv,&dim,ipiv,work,&lwork,&info);
9280 for(i=0;i<nDOF_element;i++)
9283 for(j=0;j<nDOF_element;j++)
9286 A_inv[i*nDOF_element+
9289 b[eN*nSpace*nDOF_element+
9295 for(k=0;k<nQuadraturePoints_element;k++)
9296 for(j=0;j<nDOF_element;j++)
9297 for(I=0;I<nSpace;I++)
9298 qV[eN*nQuadraturePoints_element*nSpace+
9304 qv[eN*nQuadraturePoints_element*nDOF_element+
9308 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
9309 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
9310 for(j=0;j<nDOF_element;j++)
9311 for(I=0;I<nSpace;I++)
9312 V[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace+
9313 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace+
9319 v[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9320 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9327 int nElementBoundaries_element,
9328 int nElementBoundaryQuadraturePoints_elementBoundary,
9331 int nQuadraturePoints_element,
9342 int eN,ebN,k,i,j,I,nDOF_element2=nDOF_element*nDOF_element,nSpace2=nSpace*nSpace;
9343 int m,
nnz=rowptr[nSpace];
9344 PROTEUS_LAPACK_INTEGER ipiv[nDOF_element],lwork=((PROTEUS_LAPACK_INTEGER)nDOF_element),dim=((PROTEUS_LAPACK_INTEGER)nDOF_element),info=0;
9345 double work[nDOF_element],A_inv[nDOF_element2];
9346 double V_dof[nSpace][nDOF_element];
9347 memset(V,0,
sizeof(
double)*
9349 nElementBoundaries_element*
9350 nElementBoundaryQuadraturePoints_elementBoundary*
9352 memset(qV,0,
sizeof(
double)*
9354 nQuadraturePoints_element*
9356 for(eN=0;eN<nElements_global;eN++)
9358 for(I=0;I<nSpace;I++)
9360 memset(A_inv,0,
sizeof(
double)*nDOF_element2);
9361 for(i=0;i<nDOF_element;i++)
9362 for(j=0;j<nDOF_element;j++)
9364 for(k=0;k<nQuadraturePoints_element;k++)
9367 for (m=rowptr[I]; m < rowptr[I+1];m++)
9375 A_inv[i*nDOF_element+j] += (1.0/qa[eN*nQuadraturePoints_element*
nnz+
9377 *qv[eN*nQuadraturePoints_element*nDOF_element+
9381 qw_dV[eN*nQuadraturePoints_element*nDOF_element+
9388 dgetrf_(&dim,&dim,A_inv,&dim,ipiv,&info);
9389 dgetri_(&dim,A_inv,&dim,ipiv,work,&lwork,&info);
9392 for(i=0;i<nDOF_element;i++)
9395 for(j=0;j<nDOF_element;j++)
9398 A_inv[i*nDOF_element+
9401 b[eN*nSpace*nDOF_element+
9407 for(k=0;k<nQuadraturePoints_element;k++)
9408 for(j=0;j<nDOF_element;j++)
9409 for(I=0;I<nSpace;I++)
9410 qV[eN*nQuadraturePoints_element*nSpace+
9416 qv[eN*nQuadraturePoints_element*nDOF_element+
9420 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
9421 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
9422 for(j=0;j<nDOF_element;j++)
9423 for(I=0;I<nSpace;I++)
9424 V[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace+
9425 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace+
9431 v[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9432 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9441 int nElementBoundaries_element,
9442 int nElementBoundaryQuadraturePoints_elementBoundary,
9445 int nQuadraturePoints_element,
9457 int eN,ebN,k,i,j,I,nDOF_element2=nDOF_element*nDOF_element,nSpace2=nSpace*nSpace;
9458 int m,
nnz=rowptr[nSpace];
9459 PROTEUS_LAPACK_INTEGER ipiv[nDOF_element],lwork=((PROTEUS_LAPACK_INTEGER)nDOF_element),dim=((PROTEUS_LAPACK_INTEGER)nDOF_element),info=0;
9460 double work[nDOF_element],A_inv[nDOF_element2];
9461 double V_dof[nSpace][nDOF_element];
9462 double vel_dofs_temp[nElements_global][nSpace][nDOF_element];
9463 memset(V,0,
sizeof(
double)*
9465 nElementBoundaries_element*
9466 nElementBoundaryQuadraturePoints_elementBoundary*
9468 memset(qV,0,
sizeof(
double)*
9470 nQuadraturePoints_element*
9472 for(eN=0;eN<nElements_global;eN++)
9474 for(I=0;I<nSpace;I++)
9476 memset(A_inv,0,
sizeof(
double)*nDOF_element2);
9477 for(i=0;i<nDOF_element;i++)
9478 for(j=0;j<nDOF_element;j++)
9480 for(k=0;k<nQuadraturePoints_element;k++)
9483 for (m=rowptr[I]; m < rowptr[I+1];m++)
9491 A_inv[i*nDOF_element+j] += (1.0/qa[eN*nQuadraturePoints_element*
nnz+
9493 *qv[eN*nQuadraturePoints_element*nDOF_element+
9497 qw_dV[eN*nQuadraturePoints_element*nDOF_element+
9504 dgetrf_(&dim,&dim,A_inv,&dim,ipiv,&info);
9505 dgetri_(&dim,A_inv,&dim,ipiv,work,&lwork,&info);
9508 for(i=0;i<nDOF_element;i++)
9511 vel_dofs_temp[eN][I][i]=0.0;
9512 for(j=0;j<nDOF_element;j++)
9516 A_inv[i*nDOF_element+
9519 b[eN*nSpace*nDOF_element+
9522 vel_dofs_temp[eN][I][i]
9523 += A_inv[i*nDOF_element+
9526 b[eN*nSpace*nDOF_element+
9534 for(j=0;j<nDOF_element;j++)
9535 for(I=0;I<nSpace;I++)
9536 vel_dofs[eN*nDOF_element*nSpace+
9539 =vel_dofs_temp[eN][I][j];
9542 for(k=0;k<nQuadraturePoints_element;k++)
9543 for(j=0;j<nDOF_element;j++)
9544 for(I=0;I<nSpace;I++)
9545 qV[eN*nQuadraturePoints_element*nSpace+
9551 qv[eN*nQuadraturePoints_element*nDOF_element+
9557 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
9558 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
9559 for(j=0;j<nDOF_element;j++)
9560 for(I=0;I<nSpace;I++)
9561 V[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nSpace+
9562 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nSpace+
9568 v[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9569 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9577 int nElementBoundaries_element,
9578 int nElementBoundaryQuadraturePoints_elementBoundary,
9581 int nQuadraturePoints_element,
9592 int eN,ebN,ebN_ebN,k,i,j,jj,I,nDOF_element2=nDOF_element*nDOF_element;
9593 double DV_dof[nSpace][nDOF_element][nDOF_element];
9594 memset(DV,0,
sizeof(
double)*
9596 nElementBoundaries_element*
9597 nElementBoundaryQuadraturePoints_elementBoundary*
9600 memset(DV_eb,0,
sizeof(
double)*
9602 nElementBoundaries_element*
9603 nElementBoundaries_element*
9604 nElementBoundaryQuadraturePoints_elementBoundary*
9607 memset(qDV,0,
sizeof(
double)*
9609 nQuadraturePoints_element*
9612 memset(qDV_eb,0,
sizeof(
double)*
9614 nElementBoundaries_element*
9615 nQuadraturePoints_element*
9618 for(eN=0;eN<nElements_global;eN++)
9621 for(I=0;I<nSpace;I++)
9622 for(jj=0;jj<nDOF_element;jj++)
9623 for(i=0;i<nDOF_element;i++)
9625 DV_dof[I][i][jj]=0.0;
9626 for(j=0;j<nDOF_element;j++)
9629 A_inv[eN*nDOF_element2+
9633 db[eN*nSpace*nDOF_element2+
9639 for(k=0;k<nQuadraturePoints_element;k++)
9640 for(j=0;j<nDOF_element;j++)
9641 for(jj=0;jj<nDOF_element;jj++)
9642 for(I=0;I<nSpace;I++)
9643 qDV[eN*nQuadraturePoints_element*nDOF_element*nSpace+
9644 k*nDOF_element*nSpace+
9650 qv[eN*nQuadraturePoints_element*nDOF_element+
9654 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
9655 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
9656 for(j=0;j<nDOF_element;j++)
9657 for(jj=0;jj<nDOF_element;jj++)
9658 for(I=0;I<nSpace;I++)
9659 DV[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
9660 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
9661 k*nDOF_element*nSpace+
9667 v[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9668 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9672 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
9675 for(I=0;I<nSpace;I++)
9676 for(jj=0;jj<nDOF_element;jj++)
9677 for(i=0;i<nDOF_element;i++)
9679 DV_dof[I][i][jj] = 0.0;
9680 for(j=0;j<nDOF_element;j++)
9683 A_inv[eN*nDOF_element2+
9687 db_eb[eN*nElementBoundaries_element*nSpace*nDOF_element2+
9688 ebN*nSpace*nDOF_element2+
9694 for(k=0;k<nQuadraturePoints_element;k++)
9695 for(j=0;j<nDOF_element;j++)
9696 for(jj=0;jj<nDOF_element;jj++)
9697 for(I=0;I<nSpace;I++)
9699 qDV_eb[eN*nElementBoundaries_element*nQuadraturePoints_element*nDOF_element*nSpace+
9700 ebN*nQuadraturePoints_element*nDOF_element*nSpace+
9701 k*nDOF_element*nSpace+
9707 qv[eN*nQuadraturePoints_element*nDOF_element+
9711 for (ebN_ebN=0;ebN_ebN<nElementBoundaries_element;ebN_ebN++)
9714 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
9715 for(j=0;j<nDOF_element;j++)
9716 for(jj=0;jj<nDOF_element;jj++)
9717 for(I=0;I<nSpace;I++)
9719 DV_eb[eN*nElementBoundaries_element*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
9720 ebN_ebN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
9721 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
9722 k*nDOF_element*nSpace+
9728 v[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9729 ebN_ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9738 int nElementBoundaries_element,
9739 int nElementBoundaryQuadraturePoints_elementBoundary,
9742 int nQuadraturePoints_element,
9754 int eN,ebN,ebN_ebN,k,i,j,jj,I,nDOF_element2=nDOF_element*nDOF_element,nSpace2=nSpace*nSpace;
9755 PROTEUS_LAPACK_INTEGER ipiv[nDOF_element],lwork=((PROTEUS_LAPACK_INTEGER)nDOF_element),dim=((PROTEUS_LAPACK_INTEGER)nDOF_element),info=0;
9756 double work[nDOF_element],A_inv[nSpace][nDOF_element2];
9757 double DV_dof[nSpace][nDOF_element][nDOF_element];
9758 memset(DV,0,
sizeof(
double)*
9760 nElementBoundaries_element*
9761 nElementBoundaryQuadraturePoints_elementBoundary*
9764 memset(DV_eb,0,
sizeof(
double)*
9766 nElementBoundaries_element*
9767 nElementBoundaries_element*
9768 nElementBoundaryQuadraturePoints_elementBoundary*
9771 memset(qDV,0,
sizeof(
double)*
9773 nQuadraturePoints_element*
9776 memset(qDV_eb,0,
sizeof(
double)*
9778 nElementBoundaries_element*
9779 nQuadraturePoints_element*
9782 for(eN=0;eN<nElements_global;eN++)
9784 for(I=0;I<nSpace;I++)
9786 memset(A_inv[I],0,
sizeof(
double)*nDOF_element2);
9787 for(i=0;i<nDOF_element;i++)
9788 for(j=0;j<nDOF_element;j++)
9790 for(k=0;k<nQuadraturePoints_element;k++)
9793 A_inv[I][i*nDOF_element+j] += (1.0/qa[eN*nQuadraturePoints_element*nSpace2+
9797 *qv[eN*nQuadraturePoints_element*nDOF_element+
9801 qw_dV[eN*nQuadraturePoints_element*nDOF_element+
9807 dgetrf_(&dim,&dim,A_inv[I],&dim,ipiv,&info);
9808 dgetri_(&dim,A_inv[I],&dim,ipiv,work,&lwork,&info);
9810 for(jj=0;jj<nDOF_element;jj++)
9811 for(i=0;i<nDOF_element;i++)
9813 DV_dof[I][i][jj]=0.0;
9814 for(j=0;j<nDOF_element;j++)
9817 A_inv[I][i*nDOF_element+
9820 db[eN*nSpace*nDOF_element2+
9827 for(k=0;k<nQuadraturePoints_element;k++)
9828 for(j=0;j<nDOF_element;j++)
9829 for(jj=0;jj<nDOF_element;jj++)
9830 for(I=0;I<nSpace;I++)
9831 qDV[eN*nQuadraturePoints_element*nDOF_element*nSpace+
9832 k*nDOF_element*nSpace+
9838 qv[eN*nQuadraturePoints_element*nDOF_element+
9842 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
9843 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
9844 for(j=0;j<nDOF_element;j++)
9845 for(jj=0;jj<nDOF_element;jj++)
9846 for(I=0;I<nSpace;I++)
9847 DV[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
9848 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
9849 k*nDOF_element*nSpace+
9855 v[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9856 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9860 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
9863 for(I=0;I<nSpace;I++)
9864 for(jj=0;jj<nDOF_element;jj++)
9865 for(i=0;i<nDOF_element;i++)
9867 DV_dof[I][i][jj] = 0.0;
9868 for(j=0;j<nDOF_element;j++)
9871 A_inv[I][i*nDOF_element+
9874 db_eb[eN*nElementBoundaries_element*nSpace*nDOF_element2+
9875 ebN*nSpace*nDOF_element2+
9881 for(k=0;k<nQuadraturePoints_element;k++)
9882 for(j=0;j<nDOF_element;j++)
9883 for(jj=0;jj<nDOF_element;jj++)
9884 for(I=0;I<nSpace;I++)
9886 qDV_eb[eN*nElementBoundaries_element*nQuadraturePoints_element*nDOF_element*nSpace+
9887 ebN*nQuadraturePoints_element*nDOF_element*nSpace+
9888 k*nDOF_element*nSpace+
9894 qv[eN*nQuadraturePoints_element*nDOF_element+
9898 for (ebN_ebN=0;ebN_ebN<nElementBoundaries_element;ebN_ebN++)
9901 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
9902 for(j=0;j<nDOF_element;j++)
9903 for(jj=0;jj<nDOF_element;jj++)
9904 for(I=0;I<nSpace;I++)
9906 DV_eb[eN*nElementBoundaries_element*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
9907 ebN_ebN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
9908 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
9909 k*nDOF_element*nSpace+
9915 v[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9916 ebN_ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
9926 int nElementBoundaries_element,
9927 int nElementBoundaryQuadraturePoints_elementBoundary,
9930 int nQuadraturePoints_element,
9944 int eN,ebN,ebN_ebN,k,i,j,jj,I,nDOF_element2=nDOF_element*nDOF_element,nSpace2=nSpace*nSpace;
9945 int m,
nnz=rowptr[nSpace];
9946 PROTEUS_LAPACK_INTEGER ipiv[nDOF_element],lwork=((PROTEUS_LAPACK_INTEGER)nDOF_element),dim=((PROTEUS_LAPACK_INTEGER)nDOF_element),info=0;
9947 double work[nDOF_element],A_inv[nSpace][nDOF_element2];
9948 double DV_dof[nSpace][nDOF_element][nDOF_element];
9949 memset(DV,0,
sizeof(
double)*
9951 nElementBoundaries_element*
9952 nElementBoundaryQuadraturePoints_elementBoundary*
9955 memset(DV_eb,0,
sizeof(
double)*
9957 nElementBoundaries_element*
9958 nElementBoundaries_element*
9959 nElementBoundaryQuadraturePoints_elementBoundary*
9962 memset(qDV,0,
sizeof(
double)*
9964 nQuadraturePoints_element*
9967 memset(qDV_eb,0,
sizeof(
double)*
9969 nElementBoundaries_element*
9970 nQuadraturePoints_element*
9973 for(eN=0;eN<nElements_global;eN++)
9975 for(I=0;I<nSpace;I++)
9977 memset(A_inv[I],0,
sizeof(
double)*nDOF_element2);
9978 for(i=0;i<nDOF_element;i++)
9979 for(j=0;j<nDOF_element;j++)
9981 for(k=0;k<nQuadraturePoints_element;k++)
9984 for (m=rowptr[I]; m < rowptr[I+1]; m++)
9987 A_inv[I][i*nDOF_element+j] += (1.0/qa[eN*nQuadraturePoints_element*
nnz+
9989 *qv[eN*nQuadraturePoints_element*nDOF_element+
9993 qw_dV[eN*nQuadraturePoints_element*nDOF_element+
10000 dgetrf_(&dim,&dim,A_inv[I],&dim,ipiv,&info);
10001 dgetri_(&dim,A_inv[I],&dim,ipiv,work,&lwork,&info);
10003 for(jj=0;jj<nDOF_element;jj++)
10005 for(i=0;i<nDOF_element;i++)
10007 DV_dof[I][i][jj]=0.0;
10008 for(j=0;j<nDOF_element;j++)
10011 A_inv[I][i*nDOF_element+
10014 db[eN*nSpace*nDOF_element2+
10021 for(k=0;k<nQuadraturePoints_element;k++)
10022 for(j=0;j<nDOF_element;j++)
10023 for(jj=0;jj<nDOF_element;jj++)
10024 for(I=0;I<nSpace;I++)
10025 qDV[eN*nQuadraturePoints_element*nDOF_element*nSpace+
10026 k*nDOF_element*nSpace+
10032 qv[eN*nQuadraturePoints_element*nDOF_element+
10036 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
10037 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
10038 for(j=0;j<nDOF_element;j++)
10039 for(jj=0;jj<nDOF_element;jj++)
10040 for(I=0;I<nSpace;I++)
10041 DV[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
10042 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
10043 k*nDOF_element*nSpace+
10049 v[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
10050 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
10054 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
10057 for(I=0;I<nSpace;I++)
10058 for(jj=0;jj<nDOF_element;jj++)
10060 for(i=0;i<nDOF_element;i++)
10062 DV_dof[I][i][jj] = 0.0;
10063 for(j=0;j<nDOF_element;j++)
10066 A_inv[I][i*nDOF_element+
10069 db_eb[eN*nElementBoundaries_element*nSpace*nDOF_element2+
10070 ebN*nSpace*nDOF_element2+
10077 for(k=0;k<nQuadraturePoints_element;k++)
10078 for(j=0;j<nDOF_element;j++)
10079 for(jj=0;jj<nDOF_element;jj++)
10080 for(I=0;I<nSpace;I++)
10082 qDV_eb[eN*nElementBoundaries_element*nQuadraturePoints_element*nDOF_element*nSpace+
10083 ebN*nQuadraturePoints_element*nDOF_element*nSpace+
10084 k*nDOF_element*nSpace+
10090 qv[eN*nQuadraturePoints_element*nDOF_element+
10094 for (ebN_ebN=0;ebN_ebN<nElementBoundaries_element;ebN_ebN++)
10097 for(k=0;k<nElementBoundaryQuadraturePoints_elementBoundary;k++)
10098 for(j=0;j<nDOF_element;j++)
10099 for(jj=0;jj<nDOF_element;jj++)
10100 for(I=0;I<nSpace;I++)
10102 DV_eb[eN*nElementBoundaries_element*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
10103 ebN_ebN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
10104 ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element*nSpace+
10105 k*nDOF_element*nSpace+
10111 v[eN*nElementBoundaries_element*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
10112 ebN_ebN*nElementBoundaryQuadraturePoints_elementBoundary*nDOF_element+
10124 int nQuadraturePoints_element,
10129 int eN,i,j,k,nDOF_element2=nDOF_element*nDOF_element;
10130 PROTEUS_LAPACK_INTEGER ipiv[nDOF_element],lwork=((PROTEUS_LAPACK_INTEGER)nDOF_element),dim=((PROTEUS_LAPACK_INTEGER)nDOF_element),info=0;
10131 double work[nDOF_element];
10132 memset(A_inv,0,
sizeof(
double)*nElements_global*nDOF_element2);
10133 for(eN=0;eN<nElements_global;eN++)
10135 for(i=0;i<nDOF_element;i++)
10136 for(j=0;j<nDOF_element;j++)
10138 for(k=0;k<nQuadraturePoints_element;k++)
10140 A_inv[eN*nDOF_element2+i*nDOF_element+j] += vXw_dV[eN*nQuadraturePoints_element*nDOF_element2+
10146 dgetrf_(&dim,&dim,&A_inv[eN*nDOF_element2],&dim,ipiv,&info);
10147 dgetri_(&dim,&A_inv[eN*nDOF_element2],&dim,ipiv,work,&lwork,&info);
10152 int nQuadraturePoints_element,
10153 int nDOF_test_element,
10158 double* weak_residual)
10160 int eN,i,k,I,J,nSpace2=nSpace*nSpace;
10161 for(eN=0;eN<nElements_global;eN++)
10162 for (i=0;i<nDOF_test_element;i++)
10163 for (k=0;k<nQuadraturePoints_element;k++)
10164 for (I=0;I<nSpace;I++)
10165 for (J=0;J<nSpace;J++)
10166 weak_residual[eN*nDOF_test_element + i]
10168 a[eN*nQuadraturePoints_element*nSpace2 +
10173 qV[eN*nQuadraturePoints_element*nSpace +
10177 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
10178 k*nDOF_test_element*nSpace +
10184 int nQuadraturePoints_element,
10185 int nDOF_test_element,
10194 double* weak_residual)
10196 int eN,i,k,I,m,
nnz=rowptr[nSpace];
10197 for(eN=0;eN<nElements_global;eN++)
10198 for (i=0;i<nDOF_test_element;i++)
10199 for (k=0;k<nQuadraturePoints_element;k++)
10200 for (I=0;I<nSpace;I++)
10201 for (m=rowptr[I];m<rowptr[I+1];m++)
10203 weak_residual[eN*nDOF_test_element + i]
10205 a[eN*nQuadraturePoints_element*
nnz+
10209 qV[eN*nQuadraturePoints_element*nSpace +
10213 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
10214 k*nDOF_test_element*nSpace +
10219 for(eN=0;eN<nElements_global;eN++)
10220 for (k=0;k<nQuadraturePoints_element;k++)
10221 for (I=0;I<nSpace;I++)
10224 for (m=rowptr[I];m<rowptr[I+1];m++)
10226 velocity[eN*nQuadraturePoints_element*nSpace +
10228 += a[eN*nQuadraturePoints_element*
nnz+
10231 qV[eN*nQuadraturePoints_element*nSpace +
10232 k*nSpace + colind[m]];
10235 else if (rho_split==1)
10237 velocity[eN*nQuadraturePoints_element*nSpace +
10240 qV[eN*nQuadraturePoints_element*nSpace +
10246 int nElementBoundaries_element,
10247 int nQuadraturePoints_element,
10248 int nDOF_trial_element,
10249 int nDOF_test_element,
10258 double* jacobian_weak_residual,
10259 double* jacobian_weak_residual_eb)
10261 int eN,ebN,i,j,k,I,J,nSpace2=nSpace*nSpace,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element;
10262 double daProduct,dphiProduct;
10263 for(eN=0;eN<nElements_global;eN++)
10265 for (i=0;i<nDOF_test_element;i++)
10266 for (k=0;k<nQuadraturePoints_element;k++)
10269 for (I=0;I<nSpace;I++)
10270 for (J=0;J<nSpace;J++)
10273 da[eN*nQuadraturePoints_element*nSpace2 +
10278 qV[eN*nQuadraturePoints_element*nSpace +
10282 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
10283 k*nDOF_test_element*nSpace +
10286 for (j=0;j<nDOF_trial_element;j++)
10289 for (I=0;I<nSpace;I++)
10290 for (J=0;J<nSpace;J++)
10293 a[eN*nQuadraturePoints_element*nSpace2 +
10298 qDV[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
10299 k*nDOF_trial_element*nSpace +
10303 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
10304 k*nDOF_test_element*nSpace +
10307 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
10308 i*nDOF_trial_element +
10313 v[eN*nQuadraturePoints_element*nDOF_trial_element+
10314 k*nDOF_trial_element+
10320 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
10321 for (i=0;i<nDOF_test_element;i++)
10322 for (k=0;k<nQuadraturePoints_element;k++)
10324 for (j=0;j<nDOF_trial_element;j++)
10327 for (I=0;I<nSpace;I++)
10328 for (J=0;J<nSpace;J++)
10331 a[eN*nQuadraturePoints_element*nSpace2 +
10336 qDV_eb[eN*nElementBoundaries_element*nQuadraturePoints_element*nDOF_trial_element*nSpace +
10337 ebN*nQuadraturePoints_element*nDOF_trial_element*nSpace+
10338 k*nDOF_trial_element*nSpace +
10342 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
10343 k*nDOF_test_element*nSpace +
10346 jacobian_weak_residual_eb[eN*nElementBoundaries_element*nDOF_test_X_trial_element +
10347 ebN*nDOF_test_X_trial_element +
10348 i*nDOF_trial_element +
10358 int nElementBoundaries_element,
10359 int nQuadraturePoints_element,
10360 int nDOF_trial_element,
10361 int nDOF_test_element,
10372 double* jacobian_weak_residual,
10373 double* jacobian_weak_residual_eb)
10375 int eN,ebN,i,j,k,I,m,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,
nnz=rowptr[nSpace];
10376 double daProduct,dphiProduct;
10377 for(eN=0;eN<nElements_global;eN++)
10379 for (i=0;i<nDOF_test_element;i++)
10380 for (k=0;k<nQuadraturePoints_element;k++)
10383 for (I=0;I<nSpace;I++)
10384 for (m=rowptr[I];m<rowptr[I+1];m++)
10387 da[eN*nQuadraturePoints_element*
nnz+
10391 qV[eN*nQuadraturePoints_element*nSpace +
10395 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
10396 k*nDOF_test_element*nSpace +
10399 for (j=0;j<nDOF_trial_element;j++)
10402 for (I=0;I<nSpace;I++)
10403 for(m=rowptr[I];m<rowptr[I+1];m++)
10406 a[eN*nQuadraturePoints_element*
nnz+
10410 qDV[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
10411 k*nDOF_trial_element*nSpace +
10415 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
10416 k*nDOF_test_element*nSpace +
10419 jacobian_weak_residual[eN*nDOF_test_X_trial_element +
10420 i*nDOF_trial_element +
10425 v[eN*nQuadraturePoints_element*nDOF_trial_element+
10426 k*nDOF_trial_element+
10432 for (ebN=0;ebN<nElementBoundaries_element;ebN++)
10433 for (i=0;i<nDOF_test_element;i++)
10434 for (k=0;k<nQuadraturePoints_element;k++)
10436 for (j=0;j<nDOF_trial_element;j++)
10439 for (I=0;I<nSpace;I++)
10440 for(m=rowptr[I];m<rowptr[I+1];m++)
10443 a[eN*nQuadraturePoints_element*
nnz+
10447 qDV_eb[eN*nElementBoundaries_element*nQuadraturePoints_element*nDOF_trial_element*nSpace +
10448 ebN*nQuadraturePoints_element*nDOF_trial_element*nSpace+
10449 k*nDOF_trial_element*nSpace +
10453 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
10454 k*nDOF_test_element*nSpace +
10457 jacobian_weak_residual_eb[eN*nElementBoundaries_element*nDOF_test_X_trial_element +
10458 ebN*nDOF_test_X_trial_element +
10459 i*nDOF_trial_element +
10469 int nQuadraturePoints_element,
10473 double* elementSpatialResidual,
10476 int eN,i,j,k,nDOF_element2=nDOF_element*nDOF_element;
10478 PROTEUS_LAPACK_INTEGER nrhs=1,dim=((PROTEUS_LAPACK_INTEGER)nDOF_element),info=0,ipiv[nDOF_element];
10479 double massMatrix[nDOF_element2],b[nDOF_element];
10482 memset(mt,0,
sizeof(
double)*nElements_global*nQuadraturePoints_element);
10483 for(eN=0;eN<nElements_global;eN++)
10485 memset(massMatrix,0,
sizeof(
double)*nDOF_element2);
10486 memset(ipiv,0,
sizeof(PROTEUS_LAPACK_INTEGER)*nDOF_element);
10487 for(i=0;i<nDOF_element;i++)
10488 for(j=0;j<nDOF_element;j++)
10490 for(k=0;k<nQuadraturePoints_element;k++)
10492 mt[eN*nQuadraturePoints_element+
10494 massMatrix[i*nDOF_element+j] += vXw_dV[eN*nQuadraturePoints_element*nDOF_element2+
10499 b[j] = -elementSpatialResidual[eN*nDOF_element+j];
10501 dgetrf_(&dim,&dim,massMatrix,&dim,ipiv,&info);
10502 dgetrs_(&trans,&dim,&nrhs,massMatrix,&dim,ipiv,b,&dim,&info);
10503 for (j=0;j<nDOF_element;j++)
10504 for(k=0;k<nQuadraturePoints_element;k++)
10505 mt[eN*nQuadraturePoints_element+
10506 k] += b[j]*
v[eN*nQuadraturePoints_element*nDOF_element+
10512 int nQuadraturePoints_element,
10516 double* elementSpatialResidual,
10519 int eN,i,j,k,nDOF_element2=nDOF_element*nDOF_element;
10521 PROTEUS_LAPACK_INTEGER nrhs=1,dim=((PROTEUS_LAPACK_INTEGER)nDOF_element),info=0,ipiv[nDOF_element];
10522 double massMatrix[nDOF_element2],b[nDOF_element];
10525 for(eN=0;eN<nElements_global;eN++)
10527 memset(massMatrix,0,
sizeof(
double)*nDOF_element2);
10528 memset(ipiv,0,
sizeof(PROTEUS_LAPACK_INTEGER)*nDOF_element);
10529 for(i=0;i<nDOF_element;i++)
10530 for(j=0;j<nDOF_element;j++)
10532 for(k=0;k<nQuadraturePoints_element;k++)
10534 mt[eN*nQuadraturePoints_element+
10536 massMatrix[i*nDOF_element+j] +=
10537 v[eN*nQuadraturePoints_element*nDOF_element+
10540 *w_dV[eN*nQuadraturePoints_element*nDOF_element+
10544 b[j] = -elementSpatialResidual[eN*nDOF_element+j];
10546 dgetrf_(&dim,&dim,massMatrix,&dim,ipiv,&info);
10547 dgetrs_(&trans,&dim,&nrhs,massMatrix,&dim,ipiv,b,&dim,&info);
10548 for (j=0;j<nDOF_element;j++)
10549 for(k=0;k<nQuadraturePoints_element;k++)
10550 mt[eN*nQuadraturePoints_element+
10551 k] += b[j]*
v[eN*nQuadraturePoints_element*nDOF_element+
10560 int nElements_global,
10561 int nElementBoundaries_element,
10562 int nQuadraturePoints_elementBoundary,
10563 int nValuesPerQuadraturePoint,
10564 const int * exteriorElementBoundaries,
10565 const int* elementBoundaryElements,
10566 const int * elementBoundaryLocalElementBoundaries,
10567 const double * ebq_val,
10570 int ebNE,ebN,eN,ebN_element,k,i;
10571 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
10573 ebN = exteriorElementBoundaries[ebNE];
10574 eN = elementBoundaryElements[ebN*2+0];
10575 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
10576 for (k = 0; k < nQuadraturePoints_elementBoundary; k++)
10577 for (i=0; i < nValuesPerQuadraturePoint; i++)
10579 ebqe_val[ebNE*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint +
10580 k*nValuesPerQuadraturePoint + i]
10582 ebq_val[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint+
10583 ebN_element*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint+
10584 k*nValuesPerQuadraturePoint+
10593 int nElements_global,
10594 int nElementBoundaries_element,
10595 int nQuadraturePoints_elementBoundary,
10596 int nValuesPerQuadraturePoint,
10597 const int * exteriorElementBoundaries,
10598 const int* elementBoundaryElements,
10599 const int * elementBoundaryLocalElementBoundaries,
10600 const double * ebqe_val,
10603 int ebNE,ebN,eN,ebN_element,k,i;
10604 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
10606 ebN = exteriorElementBoundaries[ebNE];
10607 eN = elementBoundaryElements[ebN*2+0];
10608 ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
10609 for (k = 0; k < nQuadraturePoints_elementBoundary; k++)
10610 for (i=0; i < nValuesPerQuadraturePoint; i++)
10612 ebq_val[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint+
10613 ebN_element*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint+
10614 k*nValuesPerQuadraturePoint+
10617 ebqe_val[ebNE*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint +
10618 k*nValuesPerQuadraturePoint + i];
10626 int nQuadraturePoints_elementBoundary,
10627 int nValuesPerQuadraturePoint,
10628 const int * exteriorElementBoundaries,
10629 const int* elementBoundaryElements,
10630 const int * elementBoundaryLocalElementBoundaries,
10631 const double * ebqe_val,
10632 double * ebq_global_val)
10634 int ebNE,ebN,eN,k,i;
10635 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
10637 ebN = exteriorElementBoundaries[ebNE];
10638 eN = elementBoundaryElements[ebN*2+0];
10639 for (k = 0; k < nQuadraturePoints_elementBoundary; k++)
10640 for (i=0; i < nValuesPerQuadraturePoint; i++)
10642 ebq_global_val[ebN*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint+
10643 k*nValuesPerQuadraturePoint+
10646 ebqe_val[ebNE*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint +
10647 k*nValuesPerQuadraturePoint + i];
10656 int nQuadraturePoints_elementBoundary,
10657 int nValuesPerQuadraturePoint,
10658 const int * exteriorElementBoundaries,
10659 const int* elementBoundaryElements,
10660 const int * elementBoundaryLocalElementBoundaries,
10661 const double * ebq_global_val,
10664 int ebNE,ebN,eN,k,i;
10665 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
10667 ebN = exteriorElementBoundaries[ebNE];
10668 eN = elementBoundaryElements[ebN*2+0];
10669 for (k = 0; k < nQuadraturePoints_elementBoundary; k++)
10670 for (i=0; i < nValuesPerQuadraturePoint; i++)
10672 ebqe_val[ebNE*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint +
10673 k*nValuesPerQuadraturePoint + i]
10675 ebq_global_val[ebN*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint+
10676 k*nValuesPerQuadraturePoint+
10683 int nQuadraturePoints_element,
10685 double* nValueArray)
10688 register double integral=0.0;
10689 for(eN=0;eN<nElements;eN++)
10690 for(k=0;k<nQuadraturePoints_element;k++)
10692 integral += nValueArray[eN*nQuadraturePoints_element + k]*
10693 dV[eN*nQuadraturePoints_element+k];
10699 int nQuadraturePoints_element,
10701 double* nValueArray)
10704 register double integral=0.0;
10705 for(eN=0;eN<nElements;eN++)
10706 for(k=0;k<nQuadraturePoints_element;k++)
10708 if(nValueArray[eN*nQuadraturePoints_element + k] > 0.0)
10709 integral += dV[eN*nQuadraturePoints_element+k];
10710 else if (nValueArray[eN*nQuadraturePoints_element + k] == 0.0)
10711 integral += 0.5*dV[eN*nQuadraturePoints_element+k];
10717 int nQuadraturePoints_element,
10719 double* elementDiameter,
10721 double* nValueArray)
10724 register double integral=0.0,eps,
H,
phi;
10725 for(eN=0;eN<nElements;eN++)
10727 eps = elementDiameter[eN]*epsFact;
10728 for(k=0;k<nQuadraturePoints_element;k++)
10730 phi = nValueArray[eN*nQuadraturePoints_element + k];
10733 else if (
phi < -eps)
10738 H = 0.5*(1.0 +
phi/eps + sin(M_PI*
phi/eps)/M_PI);
10739 integral +=
H*dV[eN*nQuadraturePoints_element+k];
10746 int nElementBoundaries_owned,
10747 int nQuadraturePoints_elementBoundary,
10749 int* exteriorElementBoundariesArray,
10751 double* nValueArray)
10754 register double integral=0.0;
10755 for(ebNE=0;ebNE<nExteriorElementBoundaries;ebNE++)
10757 ebN = exteriorElementBoundariesArray[ebNE];
10758 if (ebN < nElementBoundaries_owned && flag[ebN] > 0)
10760 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
10762 integral += nValueArray[ebNE*nQuadraturePoints_elementBoundary + k]*
10763 dS[ebNE*nQuadraturePoints_elementBoundary+k];
10771 int nElementBoundaries_owned,
10772 int nQuadraturePoints_elementBoundary,
10775 int* exteriorElementBoundaries,
10777 double* nValueArray,
10781 register double integral=0.0,flux=0.0;
10782 for(ebNE=0;ebNE<nExteriorElementBoundaries;ebNE++)
10784 ebN = exteriorElementBoundaries[ebNE];
10785 if (ebN < nElementBoundaries_owned && flag[ebN] > 0)
10787 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
10790 for (I=0;I<nSpace;I++)
10792 flux += nValueArray[ebNE*nQuadraturePoints_elementBoundary*nSpace + k*nSpace+I]*
10793 normal[ebNE*nQuadraturePoints_elementBoundary*nSpace + k*nSpace+I];
10795 integral += flux*dS[ebNE*nQuadraturePoints_elementBoundary+k];
10805 int nNodes_element,
10808 const int* elementNodesArray,
10809 const int* nodeElementOffsets,
10810 const int* nodeElementsArray,
10812 const double * dof,
10813 double* nodalAverage)
10817 memset(nodalAverage,0,
sizeof(
double)*nNodes_global*dim_dof);
10818 for (iv = 0; iv < dim_dof; iv++)
10820 for (eN = 0; eN < nElements_global; eN++)
10822 for (i = 0; i < nNodes_element; i++)
10824 nN = elementNodesArray[eN*nNodes_element + i];
10825 ig = l2g[eN*nDOF_element + i];
10826 nodalAverage[nN*dim_dof + iv] += dof[ig*dim_dof + iv];
10829 for (nN = 0; nN < nNodes_global; nN++)
10831 nElements_nN = nodeElementOffsets[nN+1] - nodeElementOffsets[nN];
10832 nodalAverage[nN*dim_dof + iv] /= nElements_nN;
10839 int nNodes_element,
10842 const int* elementNodesArray,
10843 const int* nodeElementOffsets,
10844 const int* nodeElementsArray,
10846 const double * dof,
10847 double* nodalAverage)
10851 memset(nodalAverage,0,
sizeof(
double)*nNodes_global*dim_dof);
10852 for (iv = 0; iv < dim_dof; iv++)
10854 for (eN = 0; eN < nElements_global; eN++)
10856 ig = l2g[eN*nDOF_element+0];
10857 for (i = 0; i < nNodes_element; i++)
10859 nN = elementNodesArray[eN*nNodes_element+i];
10860 nodalAverage[nN*dim_dof + iv] += dof[ig*dim_dof + iv];
10863 for (nN = 0; nN < nNodes_global; nN++)
10865 nElements_nN = nodeElementOffsets[nN+1] - nodeElementOffsets[nN];
10866 nodalAverage[nN*dim_dof + iv] /= nElements_nN;
10873 int nNodes_element,
10876 const int* elementNodesArray,
10877 const int* nodeElementOffsets,
10878 const int* nodeElementsArray,
10880 const double * dof,
10881 double* nodalAverage)
10883 int eN,nN,i,j,ig,jg,iv;
10886 memset(nodalAverage,0,
sizeof(
double)*nNodes_global*dim_dof);
10887 nd = nNodes_element - 1.0;
10888 for (iv = 0; iv < dim_dof; iv++)
10890 for (eN = 0; eN < nElements_global; eN++)
10897 for (i = 0; i < nNodes_element; i++)
10900 for (j=0; j < i; j++)
10902 jg = l2g[eN*nDOF_element+j];
10903 val += dof[jg*dim_dof + iv];
10905 for (j=i+1; j < nNodes_element; j++)
10907 jg = l2g[eN*nDOF_element+j];
10908 val += dof[jg*dim_dof + iv];
10910 ig = l2g[eN*nDOF_element+i];
10911 val += (1.0-nd)*dof[ig*dim_dof + iv];
10912 nN = elementNodesArray[eN*nNodes_element+i];
10913 nodalAverage[nN*dim_dof + iv] += val;
10916 for (nN = 0; nN < nNodes_global; nN++)
10918 nElements_nN = nodeElementOffsets[nN+1] - nodeElementOffsets[nN];
10919 nodalAverage[nN*dim_dof + iv] /= nElements_nN;
10928 int nExteriorElementBoundaries_global,
10929 int nQuadraturePoints_elementBoundary,
10930 int nValuesPerQuadraturePoint,
10932 const int * exteriorElementBoundariesArray,
10933 const int * elementBoundaryElementsArray,
10934 const int * elementBoundaryLocalElementBoundariesArray,
10935 const double * ebq_val,
10936 const double * ebqe_val,
10937 int* firstBadIndex)
10939 int eN,ebN,ebN_local,ebNE,k,i;
10942 *firstBadIndex = -1;
10944 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
10946 ebN = exteriorElementBoundariesArray[ebNE];
10947 eN = elementBoundaryElementsArray[ebN*2+0];
10948 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2+0];
10950 for (i=0; i < nValuesPerQuadraturePoint; i++)
10952 val1 = ebq_val[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint +
10953 ebN_local*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint +
10954 k*nValuesPerQuadraturePoint +
10956 val2 = ebqe_val[ebNE*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint +
10957 k*nValuesPerQuadraturePoint +
10959 if (fabs(val1-val2) > tolerance)
10962 *firstBadIndex = ebNE;
10974 int nQuadraturePoints_elementBoundary,
10975 int nValuesPerQuadraturePoint,
10977 const int * exteriorElementBoundariesArray,
10978 const int * elementBoundaryElementsArray,
10979 const int * elementBoundaryLocalElementBoundariesArray,
10980 const double * ebq_global_val,
10981 const double * ebqe_val,
10982 int* firstBadIndex)
10984 int eN,ebN,ebNE,k,i;
10987 *firstBadIndex = -1;
10989 for (ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
10991 ebN = exteriorElementBoundariesArray[ebNE];
10992 eN = elementBoundaryElementsArray[ebN*2+0];
10994 for (i=0; i < nValuesPerQuadraturePoint; i++)
10996 val1 = ebq_global_val[ebN*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint +
10997 k*nValuesPerQuadraturePoint +
10999 val2 = ebqe_val[ebNE*nQuadraturePoints_elementBoundary*nValuesPerQuadraturePoint +
11000 k*nValuesPerQuadraturePoint +
11002 if (fabs(val1-val2) > tolerance)
11005 *firstBadIndex = ebNE;
11016 const int* globalDOFids,
11017 const int* freeDOFids,
11018 const double * free_u,
11021 int i,dofN,free_dofN;
11022 for (i = 0; i < nDOF2set; i++)
11024 dofN = globalDOFids[i]; free_dofN = freeDOFids[i];
11025 u[dofN] = free_u[offset + stride*free_dofN];
11033 const int* globalDOFids,
11034 const int* freeDOFids,
11038 int i,dofN,free_dofN;
11039 for (i = 0; i < nDOF2set; i++)
11041 dofN = globalDOFids[i]; free_dofN = freeDOFids[i];
11042 free_u[offset + stride*free_dofN] =
u[dofN];
11048 int nElementBoundaries_element,
11049 int nQuadraturePoints_elementBoundary,
11050 int nDOF_test_element,
11052 int* interiorElementBoundaries,
11053 int* elementBoundaryElements,
11054 int* elementBoundaryLocalElementBoundaries,
11063 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,i,k,I,J,nSpace2=nSpace*nSpace;
11064 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
11066 ebN = interiorElementBoundaries[ebNI];
11067 left_eN_global = elementBoundaryElements[ebN*2+0];
11068 right_eN_global = elementBoundaryElements[ebN*2+1];
11069 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
11070 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
11071 for(i=0;i<nDOF_test_element;i++)
11072 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
11074 for (I=0;I<nSpace;I++)
11075 for (J=0;J<nSpace;J++)
11077 residual[left_eN_global*nDOF_test_element+
11080 sigma*0.5*((
u[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11081 left_ebN_element*nQuadraturePoints_elementBoundary+
11083 -
u[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11084 right_ebN_element*nQuadraturePoints_elementBoundary+
11086 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11087 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11089 *a[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace2+
11090 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace2+
11094 *grad_w[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element*nSpace+
11095 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element*nSpace+
11096 k*nDOF_test_element*nSpace+
11099 *dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11100 left_ebN_element*nQuadraturePoints_elementBoundary+
11102 residual[right_eN_global*nDOF_test_element+
11105 sigma*0.5*((
u[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11106 left_ebN_element*nQuadraturePoints_elementBoundary+
11108 -
u[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11109 right_ebN_element*nQuadraturePoints_elementBoundary+
11111 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11112 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11114 *a[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace2+
11115 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace2+
11119 *grad_w[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element*nSpace+
11120 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element*nSpace+
11121 k*nDOF_test_element*nSpace+
11124 *dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11125 right_ebN_element*nQuadraturePoints_elementBoundary+
11133 int nQuadraturePoints_elementBoundary,
11134 int nDOF_test_element,
11136 int* isDOFBoundary,
11137 int* exteriorElementBoundaries,
11138 int* elementBoundaryElements,
11139 int* elementBoundaryLocalElementBoundaries,
11149 int ebNE,ebN,eN_global,i,k,I,J,nSpace2=nSpace*nSpace;
11150 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
11152 ebN = exteriorElementBoundaries[ebNE];
11153 eN_global = elementBoundaryElements[ebN*2+0];
11154 for(i=0;i<nDOF_test_element;i++)
11155 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
11157 if (isDOFBoundary[ebNE*nQuadraturePoints_elementBoundary+k])
11159 for (I=0;I<nSpace;I++)
11160 for (J=0;J<nSpace;J++)
11162 residual[eN_global*nDOF_test_element+
11165 sigma*((
u[ebNE*nQuadraturePoints_elementBoundary+
11167 -ub[ebNE*nQuadraturePoints_elementBoundary+
11169 *
n[ebNE*nQuadraturePoints_elementBoundary*nSpace+
11172 *a[ebNE*nQuadraturePoints_elementBoundary*nSpace2+
11176 *grad_w[ebNE*nQuadraturePoints_elementBoundary*nDOF_test_element*nSpace+
11177 k*nDOF_test_element*nSpace+
11180 *dS[ebNE*nQuadraturePoints_elementBoundary+
11189 int nElementBoundaries_element,
11190 int nQuadraturePoints_elementBoundary,
11191 int nDOF_test_element,
11192 int nDOF_trial_element,
11198 int nFreeVDOF_global,
11199 int* interiorElementBoundaries,
11200 int* elementBoundaryElements,
11201 int* elementBoundaryLocalElementBoundaries,
11202 int* nFreeDOF_element_r,
11205 int* nFreeDOF_element_u,
11216 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,ii,i,k,jj,j,jacIndex,I,J,II,JJ,nSpace2=nSpace*nSpace;
11217 for (ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
11219 ebN = interiorElementBoundaries[ebNI];
11220 left_eN_global = elementBoundaryElements[ebN*2+0];
11221 right_eN_global = elementBoundaryElements[ebN*2+1];
11222 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
11223 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
11225 for(ii=0;ii<nFreeDOF_element_r[left_eN_global];ii++)
11227 i = freeLocal_r[left_eN_global*nDOF_test_element+
11229 I = offset_r + stride_r*freeGlobal_r[left_eN_global*nDOF_test_element+
11231 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
11233 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
11235 j = freeLocal_u[left_eN_global*nDOF_trial_element+
11237 J = offset_u + stride_u*freeGlobal_u[left_eN_global*nDOF_trial_element+
11239 jacIndex = I+J*nFreeVDOF_global;
11240 for (II=0;II<nSpace;II++)
11241 for (JJ=0;JJ<nSpace;JJ++)
11243 -= sigma*0.5*(
v[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11244 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11245 k*nDOF_trial_element+
11247 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11248 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11251 *a[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace2+
11252 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace2+k*nSpace2+
11255 *grad_w[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11256 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11257 k*nDOF_trial_element*nSpace+
11260 *dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11261 left_ebN_element*nQuadraturePoints_elementBoundary+
11264 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
11266 j = freeLocal_u[right_eN_global*nDOF_trial_element+
11268 J = offset_u + stride_u*freeGlobal_u[right_eN_global*nDOF_trial_element+
11270 jacIndex = I+J*nFreeVDOF_global;
11271 for (II=0;II<nSpace;II++)
11272 for (JJ=0;JJ<nSpace;JJ++)
11273 jac[jacIndex] += sigma*0.5*(
v[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11274 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11275 k*nDOF_trial_element+
11277 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11278 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11281 *a[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace2+
11282 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace2+
11286 *grad_w[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11287 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11288 k*nDOF_trial_element*nSpace+
11291 *dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11292 left_ebN_element*nQuadraturePoints_elementBoundary+
11298 for(ii=0;ii<nFreeDOF_element_r[right_eN_global];ii++)
11300 i = freeLocal_r[right_eN_global*nDOF_test_element+
11302 I = offset_r + stride_r*freeGlobal_r[right_eN_global*nDOF_test_element+
11304 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
11306 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
11308 j = freeLocal_u[left_eN_global*nDOF_trial_element+
11310 J = offset_u + stride_u*freeGlobal_u[left_eN_global*nDOF_trial_element+
11312 jacIndex = I+J*nFreeVDOF_global;
11313 for (II=0;II<nSpace;II++)
11314 for (JJ=0;JJ<nSpace;JJ++)
11315 jac[jacIndex] -= sigma*0.5*(
v[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11316 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11317 k*nDOF_trial_element+
11319 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11320 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11323 *a[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace2+
11324 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace2+
11328 *grad_w[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11329 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11330 k*nDOF_trial_element*nSpace+
11333 *dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11334 right_ebN_element*nQuadraturePoints_elementBoundary+
11337 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
11339 j = freeLocal_u[right_eN_global*nDOF_trial_element+
11341 J = offset_u + stride_u*freeGlobal_u[right_eN_global*nDOF_trial_element+
11343 jacIndex = I+J*nFreeVDOF_global;
11344 for (II=0;II<nSpace;II++)
11345 for (JJ=0;JJ<nSpace;JJ++)
11346 jac[jacIndex] += sigma*0.5*(
v[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11347 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11348 k*nDOF_trial_element+j]
11349 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11350 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11353 *a[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace2+
11354 right_ebN_element*nQuadraturePoints_elementBoundary*nSpace2+
11358 *grad_w[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11359 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11360 k*nDOF_trial_element*nSpace+
11363 *dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11364 right_ebN_element*nQuadraturePoints_elementBoundary+
11373 int nQuadraturePoints_elementBoundary,
11374 int nDOF_test_element,
11375 int nDOF_trial_element,
11381 int nFreeVDOF_global,
11382 int* exteriorElementBoundaries,
11383 int* elementBoundaryElements,
11384 int* elementBoundaryLocalElementBoundaries,
11385 int* nFreeDOF_element_r,
11388 int* nFreeDOF_element_u,
11391 int* isDOFBoundary,
11400 int ebNE,ebN,eN_global,ii,i,k,jj,j,jacIndex,I,J,II,JJ,nSpace2=nSpace*nSpace;
11401 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
11403 ebN = exteriorElementBoundaries[ebNE];
11404 eN_global = elementBoundaryElements[ebN*2+0];
11405 for(ii=0;ii<nFreeDOF_element_r[eN_global];ii++)
11407 i = freeLocal_r[eN_global*nDOF_test_element+
11409 I = offset_r + stride_r*freeGlobal_r[eN_global*nDOF_test_element+
11411 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
11413 for(jj=0;jj<nFreeDOF_element_u[eN_global];jj++)
11415 j = freeLocal_u[eN_global*nDOF_trial_element+
11417 J = offset_u + stride_u*freeGlobal_u[eN_global*nDOF_trial_element+
11419 jacIndex = I+J*nFreeVDOF_global;
11420 if (isDOFBoundary[ebNE*nQuadraturePoints_elementBoundary+k])
11422 for (II=0;II<nSpace;II++)
11423 for (JJ=0;JJ<nSpace;JJ++)
11425 -= sigma*(
v[ebNE*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11426 k*nDOF_trial_element+
11428 *
n[ebNE*nQuadraturePoints_elementBoundary*nSpace+
11431 *a[ebNE*nQuadraturePoints_elementBoundary*nSpace2+
11434 *grad_w[ebNE*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11435 k*nDOF_trial_element*nSpace+
11438 *dS[ebNE*nQuadraturePoints_elementBoundary+
11448 int nElementBoundaries_element,
11449 int nQuadraturePoints_elementBoundary,
11450 int nDOF_test_element,
11454 int* interiorElementBoundaries,
11455 int* elementBoundaryElements,
11456 int* elementBoundaryLocalElementBoundaries,
11465 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,i,k,I,m,
nnz=rowptr[nSpace];
11466 for(ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
11468 ebN = interiorElementBoundaries[ebNI];
11469 left_eN_global = elementBoundaryElements[ebN*2+0];
11470 right_eN_global = elementBoundaryElements[ebN*2+1];
11471 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
11472 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
11473 for(i=0;i<nDOF_test_element;i++)
11474 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
11476 for (I=0;I<nSpace;I++)
11477 for (m=rowptr[I];m<rowptr[I+1];m++)
11479 residual[left_eN_global*nDOF_test_element+
11482 sigma*0.5*((
u[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11483 left_ebN_element*nQuadraturePoints_elementBoundary+
11485 -
u[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11486 right_ebN_element*nQuadraturePoints_elementBoundary+
11488 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11489 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11492 *a[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
11493 left_ebN_element*nQuadraturePoints_elementBoundary*
nnz+
11496 *grad_w[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element*nSpace+
11497 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element*nSpace+
11498 k*nDOF_test_element*nSpace+
11501 *dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11502 left_ebN_element*nQuadraturePoints_elementBoundary+
11504 residual[right_eN_global*nDOF_test_element+
11507 sigma*0.5*((
u[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11508 left_ebN_element*nQuadraturePoints_elementBoundary+
11510 -
u[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11511 right_ebN_element*nQuadraturePoints_elementBoundary+
11513 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11514 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11517 *a[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
11518 right_ebN_element*nQuadraturePoints_elementBoundary*
nnz+
11521 *grad_w[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_test_element*nSpace+
11522 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_test_element*nSpace+
11523 k*nDOF_test_element*nSpace+
11526 *dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11527 right_ebN_element*nQuadraturePoints_elementBoundary+
11535 int nQuadraturePoints_elementBoundary,
11536 int nDOF_test_element,
11540 int* isDOFBoundary,
11541 int* exteriorElementBoundaries,
11542 int* elementBoundaryElements,
11543 int* elementBoundaryLocalElementBoundaries,
11553 int ebNE,ebN,eN_global,i,k,I,m,
nnz=rowptr[nSpace];
11554 for(ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
11556 ebN = exteriorElementBoundaries[ebNE];
11557 eN_global = elementBoundaryElements[ebN*2+0];
11558 for(i=0;i<nDOF_test_element;i++)
11559 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
11561 if (isDOFBoundary[ebNE*nQuadraturePoints_elementBoundary+k])
11563 for (I=0;I<nSpace;I++)
11564 for (m=rowptr[I];m<rowptr[I+1];m++)
11566 residual[eN_global*nDOF_test_element+
11569 sigma*((
u[ebNE*nQuadraturePoints_elementBoundary+
11571 -ub[ebNE*nQuadraturePoints_elementBoundary+
11573 *
n[ebNE*nQuadraturePoints_elementBoundary*nSpace+
11576 *a[ebNE*nQuadraturePoints_elementBoundary*
nnz+
11579 *grad_w[ebNE*nQuadraturePoints_elementBoundary*nDOF_test_element*nSpace+
11580 k*nDOF_test_element*nSpace+
11583 *dS[ebNE*nQuadraturePoints_elementBoundary+
11592 int nElementBoundaries_element,
11593 int nQuadraturePoints_elementBoundary,
11594 int nDOF_test_element,
11595 int nDOF_trial_element,
11603 int nFreeVDOF_global,
11604 int* interiorElementBoundaries,
11605 int* elementBoundaryElements,
11606 int* elementBoundaryLocalElementBoundaries,
11607 int* nFreeDOF_element_r,
11610 int* nFreeDOF_element_u,
11621 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,ii,i,k,jj,j,jacIndex,I,J,II,m,
nnz=rowptr[nSpace];
11622 for (ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
11624 ebN = interiorElementBoundaries[ebNI];
11625 left_eN_global = elementBoundaryElements[ebN*2+0];
11626 right_eN_global = elementBoundaryElements[ebN*2+1];
11627 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
11628 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
11630 for(ii=0;ii<nFreeDOF_element_r[left_eN_global];ii++)
11632 i = freeLocal_r[left_eN_global*nDOF_test_element+
11634 I = offset_r + stride_r*freeGlobal_r[left_eN_global*nDOF_test_element+
11636 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
11638 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
11640 j = freeLocal_u[left_eN_global*nDOF_trial_element+
11642 J = offset_u + stride_u*freeGlobal_u[left_eN_global*nDOF_trial_element+
11644 jacIndex = I+J*nFreeVDOF_global;
11645 for (II=0;II<nSpace;II++)
11646 for(m=rowptr[II];m<rowptr[II+1];m++)
11649 -= sigma*0.5*(
v[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11650 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11651 k*nDOF_trial_element+
11653 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11654 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11657 *a[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
11658 left_ebN_element*nQuadraturePoints_elementBoundary*
nnz+
11661 *grad_w[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11662 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11663 k*nDOF_trial_element*nSpace+
11666 *dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11667 left_ebN_element*nQuadraturePoints_elementBoundary+
11671 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
11673 j = freeLocal_u[right_eN_global*nDOF_trial_element+
11675 J = offset_u + stride_u*freeGlobal_u[right_eN_global*nDOF_trial_element+
11677 jacIndex = I+J*nFreeVDOF_global;
11678 for (II=0;II<nSpace;II++)
11679 for (m=rowptr[II];m<rowptr[II+1];m++)
11681 jac[jacIndex] += sigma*0.5*(
v[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11682 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11683 k*nDOF_trial_element+
11685 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11686 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11689 *a[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
11690 left_ebN_element*nQuadraturePoints_elementBoundary*
nnz+
11693 *grad_w[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11694 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11695 k*nDOF_trial_element*nSpace+
11698 *dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11699 left_ebN_element*nQuadraturePoints_elementBoundary+
11706 for(ii=0;ii<nFreeDOF_element_r[right_eN_global];ii++)
11708 i = freeLocal_r[right_eN_global*nDOF_test_element+
11710 I = offset_r + stride_r*freeGlobal_r[right_eN_global*nDOF_test_element+
11712 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
11714 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
11716 j = freeLocal_u[left_eN_global*nDOF_trial_element+
11718 J = offset_u + stride_u*freeGlobal_u[left_eN_global*nDOF_trial_element+
11720 jacIndex = I+J*nFreeVDOF_global;
11721 for (II=0;II<nSpace;II++)
11722 for (m=rowptr[II];m<rowptr[II+1];m++)
11724 jac[jacIndex] -= sigma*0.5*(
v[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11725 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11726 k*nDOF_trial_element+
11728 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11729 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11732 *a[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
11733 right_ebN_element*nQuadraturePoints_elementBoundary*
nnz+
11736 *grad_w[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11737 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11738 k*nDOF_trial_element*nSpace+
11741 *dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11742 right_ebN_element*nQuadraturePoints_elementBoundary+
11746 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
11748 j = freeLocal_u[right_eN_global*nDOF_trial_element+
11750 J = offset_u + stride_u*freeGlobal_u[right_eN_global*nDOF_trial_element+
11752 jacIndex = I+J*nFreeVDOF_global;
11753 for (II=0;II<nSpace;II++)
11754 for (m=rowptr[II];m<rowptr[II+1];m++)
11756 jac[jacIndex] += sigma*0.5*(
v[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11757 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11758 k*nDOF_trial_element+j]
11759 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11760 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11763 *a[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
11764 right_ebN_element*nQuadraturePoints_elementBoundary*
nnz+
11767 *grad_w[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11768 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11769 k*nDOF_trial_element*nSpace+
11772 *dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11773 right_ebN_element*nQuadraturePoints_elementBoundary+
11783 int nQuadraturePoints_elementBoundary,
11784 int nDOF_test_element,
11785 int nDOF_trial_element,
11793 int nFreeVDOF_global,
11794 int* exteriorElementBoundaries,
11795 int* elementBoundaryElements,
11796 int* elementBoundaryLocalElementBoundaries,
11797 int* nFreeDOF_element_r,
11800 int* nFreeDOF_element_u,
11803 int* isDOFBoundary,
11812 int ebNE,ebN,eN_global,ii,i,k,jj,j,jacIndex,I,J,II,m,
nnz=rowptr[nSpace];
11813 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
11815 ebN = exteriorElementBoundaries[ebNE];
11816 eN_global = elementBoundaryElements[ebN*2+0];
11817 for(ii=0;ii<nFreeDOF_element_r[eN_global];ii++)
11819 i = freeLocal_r[eN_global*nDOF_test_element+
11821 I = offset_r + stride_r*freeGlobal_r[eN_global*nDOF_test_element+
11823 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
11825 for(jj=0;jj<nFreeDOF_element_u[eN_global];jj++)
11827 j = freeLocal_u[eN_global*nDOF_trial_element+
11829 J = offset_u + stride_u*freeGlobal_u[eN_global*nDOF_trial_element+
11831 jacIndex = I+J*nFreeVDOF_global;
11832 if (isDOFBoundary[ebNE*nQuadraturePoints_elementBoundary+k])
11834 for (II=0;II<nSpace;II++)
11835 for (m=rowptr[II];m<rowptr[II+1];m++)
11837 -= sigma*(
v[ebNE*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11838 k*nDOF_trial_element+
11840 *
n[ebNE*nQuadraturePoints_elementBoundary*nSpace+
11843 *a[ebNE*nQuadraturePoints_elementBoundary*
nnz+
11846 *grad_w[ebNE*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11847 k*nDOF_trial_element*nSpace+
11850 *dS[ebNE*nQuadraturePoints_elementBoundary+
11859 int nElementBoundaries_element,
11860 int nQuadraturePoints_elementBoundary,
11861 int nDOF_test_element,
11862 int nDOF_trial_element,
11870 int nFreeVDOF_global,
11871 int* interiorElementBoundaries,
11872 int* elementBoundaryElements,
11873 int* elementBoundaryLocalElementBoundaries,
11874 int* nFreeDOF_element_r,
11877 int* nFreeDOF_element_u,
11880 int* csrRowIndeces_ru,
11881 int* csrColumnOffsets_eb_ru,
11890 int ebNI,ebN,left_eN_global,right_eN_global,left_ebN_element,right_ebN_element,ii,i,k,jj,j,jacIndex,II,m,
nnz=rowptr[nSpace],nDOF_test_X_trial_element=nDOF_trial_element*nDOF_test_element;
11891 for (ebNI=0;ebNI<nInteriorElementBoundaries_global;ebNI++)
11893 ebN = interiorElementBoundaries[ebNI];
11894 left_eN_global = elementBoundaryElements[ebN*2+0];
11895 right_eN_global = elementBoundaryElements[ebN*2+1];
11896 left_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+0];
11897 right_ebN_element = elementBoundaryLocalElementBoundaries[ebN*2+1];
11899 for(ii=0;ii<nFreeDOF_element_r[left_eN_global];ii++)
11901 i = freeLocal_r[left_eN_global*nDOF_test_element+
11903 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
11905 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
11907 j = freeLocal_u[left_eN_global*nDOF_trial_element+
11909 jacIndex = csrRowIndeces_ru[left_eN_global*nDOF_test_element+
11912 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element +
11913 0*2*nDOF_test_X_trial_element +
11914 0*nDOF_test_X_trial_element +
11915 ii*nDOF_trial_element +
11917 for (II=0;II<nSpace;II++)
11918 for(m=rowptr[II];m<rowptr[II+1];m++)
11919 jac[jacIndex] -= sigma*0.5*(
v[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11920 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11921 k*nDOF_trial_element+
11923 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11924 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11927 *a[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
11928 left_ebN_element*nQuadraturePoints_elementBoundary*
nnz+
11931 *grad_w[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11932 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11933 k*nDOF_trial_element*nSpace+
11936 *dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11937 left_ebN_element*nQuadraturePoints_elementBoundary+
11940 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
11942 j = freeLocal_u[right_eN_global*nDOF_trial_element+
11944 jacIndex = csrRowIndeces_ru[left_eN_global*nDOF_test_element+
11947 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element+
11948 0*2*nDOF_test_X_trial_element+
11949 1*nDOF_test_X_trial_element+
11950 ii*nDOF_trial_element+
11952 for (II=0;II<nSpace;II++)
11953 for (m=rowptr[II];m<rowptr[II+1];m++)
11954 jac[jacIndex] += sigma*0.5*(
v[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11955 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11956 k*nDOF_trial_element+
11958 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
11959 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
11962 *a[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
11963 left_ebN_element*nQuadraturePoints_elementBoundary*
nnz+
11966 *grad_w[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11967 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
11968 k*nDOF_trial_element*nSpace+
11971 *dS[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
11972 left_ebN_element*nQuadraturePoints_elementBoundary+
11978 for(ii=0;ii<nFreeDOF_element_r[right_eN_global];ii++)
11980 i = freeLocal_r[right_eN_global*nDOF_test_element+
11982 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
11984 for(jj=0;jj<nFreeDOF_element_u[left_eN_global];jj++)
11986 j = freeLocal_u[left_eN_global*nDOF_trial_element+
11988 jacIndex = csrRowIndeces_ru[right_eN_global*nDOF_test_element+
11991 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element+
11992 1*2*nDOF_test_X_trial_element+
11993 0*nDOF_test_X_trial_element+
11994 ii*nDOF_trial_element+
11996 for (II=0;II<nSpace;II++)
11997 for (m=rowptr[II];m<rowptr[II+1];m++)
11998 jac[jacIndex] -= sigma*0.5*(
v[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
11999 left_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
12000 k*nDOF_trial_element+
12002 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
12003 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
12006 *a[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
12007 right_ebN_element*nQuadraturePoints_elementBoundary*
nnz+
12010 *grad_w[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
12011 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
12012 k*nDOF_trial_element*nSpace+
12015 *dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
12016 right_ebN_element*nQuadraturePoints_elementBoundary+
12019 for(jj=0;jj<nFreeDOF_element_u[right_eN_global];jj++)
12021 j = freeLocal_u[right_eN_global*nDOF_trial_element+
12023 jacIndex = csrRowIndeces_ru[right_eN_global*nDOF_test_element+
12026 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element+
12027 1*2*nDOF_test_X_trial_element+
12028 1*nDOF_test_X_trial_element+
12029 ii*nDOF_trial_element+
12031 for (II=0;II<nSpace;II++)
12032 for (m=rowptr[II];m<rowptr[II+1];m++)
12033 jac[jacIndex] += sigma*0.5*(
v[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
12034 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element+
12035 k*nDOF_trial_element+j]
12036 *
n[left_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace+
12037 left_ebN_element*nQuadraturePoints_elementBoundary*nSpace+
12040 *a[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*
nnz+
12041 right_ebN_element*nQuadraturePoints_elementBoundary*
nnz+
12044 *grad_w[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
12045 right_ebN_element*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
12046 k*nDOF_trial_element*nSpace+
12049 *dS[right_eN_global*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
12050 right_ebN_element*nQuadraturePoints_elementBoundary+
12059 int nQuadraturePoints_elementBoundary,
12060 int nDOF_test_element,
12061 int nDOF_trial_element,
12069 int nFreeVDOF_global,
12070 int* exteriorElementBoundaries,
12071 int* elementBoundaryElements,
12072 int* elementBoundaryLocalElementBoundaries,
12073 int* nFreeDOF_element_r,
12076 int* nFreeDOF_element_u,
12079 int* csrRowIndeces_ru,
12080 int* csrColumnOffsets_eb_ru,
12081 int* isDOFBoundary,
12090 int ebNE,ebN,eN_global,ii,i,k,jj,j,jacIndex,II,m,
nnz=rowptr[nSpace],nDOF_test_X_trial_element=nDOF_trial_element*nDOF_test_element;
12091 for (ebNE=0;ebNE<nExteriorElementBoundaries_global;ebNE++)
12093 ebN = exteriorElementBoundaries[ebNE];
12094 eN_global = elementBoundaryElements[ebN*2+0];
12095 for(ii=0;ii<nFreeDOF_element_r[eN_global];ii++)
12097 i = freeLocal_r[eN_global*nDOF_test_element+
12099 for(k=0;k<nQuadraturePoints_elementBoundary;k++)
12101 for(jj=0;jj<nFreeDOF_element_u[eN_global];jj++)
12103 j = freeLocal_u[eN_global*nDOF_trial_element+
12105 jacIndex = csrRowIndeces_ru[eN_global*nDOF_test_element+
12108 csrColumnOffsets_eb_ru[ebN*4*nDOF_test_X_trial_element +
12109 0*2*nDOF_test_X_trial_element +
12110 0*nDOF_test_X_trial_element +
12111 ii*nDOF_trial_element +
12113 if (isDOFBoundary[ebNE*nQuadraturePoints_elementBoundary+k])
12115 for (II=0;II<nSpace;II++)
12116 for (m=rowptr[II];m<rowptr[II+1];m++)
12118 -= sigma*(
v[ebNE*nQuadraturePoints_elementBoundary*nDOF_trial_element+
12119 k*nDOF_trial_element+
12121 *
n[ebNE*nQuadraturePoints_elementBoundary*nSpace+
12124 *a[ebNE*nQuadraturePoints_elementBoundary*
nnz+
12127 *grad_w[ebNE*nQuadraturePoints_elementBoundary*nDOF_trial_element*nSpace+
12128 k*nDOF_trial_element*nSpace+
12131 *dS[ebNE*nQuadraturePoints_elementBoundary+
12141 int nQuadraturePoints_element,
12148 for(eN=0;eN<nElements_global;eN++)
12149 for (k=0;k<nQuadraturePoints_element;k++)
12150 for (I=0;I<nSpace;I++)
12151 f[eN*nQuadraturePoints_element*nSpace +
12155 m[eN*nQuadraturePoints_element +
12158 xt[eN*nQuadraturePoints_element*3 +
12164 int nQuadraturePoints_element,
12170 for(eN=0;eN<nElements_global;eN++)
12171 for (k=0;k<nQuadraturePoints_element;k++)
12172 for (I=0;I<nSpace;I++)
12173 f[eN*nQuadraturePoints_element*nSpace +
12177 xt[eN*nQuadraturePoints_element*3 +
12183 int nElementBoundaries_element,
12184 int nQuadraturePoints_elementBoundary,
12191 for(eN=0;eN<nElements_global;eN++)
12192 for(ebN=0;ebN<nElementBoundaries_element;ebN++)
12193 for (k=0;k<nQuadraturePoints_elementBoundary;k++)
12194 for (I=0;I<nSpace;I++)
12195 f[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace +
12196 ebN*nQuadraturePoints_elementBoundary*nSpace+
12200 m[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary+
12201 ebN*nQuadraturePoints_elementBoundary+
12204 xt[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*3+
12205 ebN*nQuadraturePoints_elementBoundary*3+
12211 int nElementBoundaries_element,
12212 int nQuadraturePoints_elementBoundary,
12218 for(eN=0;eN<nElements_global;eN++)
12219 for(ebN=0;ebN<nElementBoundaries_element;ebN++)
12220 for (k=0;k<nQuadraturePoints_elementBoundary;k++)
12221 for (I=0;I<nSpace;I++)
12222 f[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*nSpace +
12223 ebN*nQuadraturePoints_elementBoundary*nSpace+
12227 xt[eN*nElementBoundaries_element*nQuadraturePoints_elementBoundary*3+
12228 ebN*nQuadraturePoints_elementBoundary*3+
12234 int nQuadraturePoints_element,
12235 int nDOF_test_element,
12239 double* weak_residual_x,
12240 double* weak_residual_y,
12241 double* weak_residual_z)
12243 int eN,i,k,I,J,nSpace2=nSpace*nSpace;
12244 for(eN=0;eN<nElements_global;eN++)
12245 for (i=0;i<nDOF_test_element;i++)
12246 for (k=0;k<nQuadraturePoints_element;k++)
12247 for (J=0;J<nSpace;J++)
12250 weak_residual_x[eN*nDOF_test_element + i]
12252 sigma[eN*nQuadraturePoints_element*nSpace2+
12257 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
12258 k*nDOF_test_element*nSpace +
12262 weak_residual_y[eN*nDOF_test_element + i]
12264 sigma[eN*nQuadraturePoints_element*nSpace2+
12269 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
12270 k*nDOF_test_element*nSpace +
12274 weak_residual_z[eN*nDOF_test_element + i]
12276 sigma[eN*nQuadraturePoints_element*nSpace2+
12281 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
12282 k*nDOF_test_element*nSpace +
12289 int nQuadraturePoints_element,
12290 int nDOF_trial_element,
12291 int nDOF_test_element,
12304 double* jacobian_weak_residual_xx,
12305 double* jacobian_weak_residual_xy,
12306 double* jacobian_weak_residual_xz,
12307 double* jacobian_weak_residual_yx,
12308 double* jacobian_weak_residual_yy,
12309 double* jacobian_weak_residual_yz,
12310 double* jacobian_weak_residual_zx,
12311 double* jacobian_weak_residual_zy,
12312 double* jacobian_weak_residual_zz)
12314 int eN,i,j,k,I,J,nDOF_test_X_trial_element=nDOF_test_element*nDOF_trial_element,nSpace2=nSpace*nSpace;
12315 for(eN=0;eN<nElements_global;eN++)
12316 for (i=0;i<nDOF_test_element;i++)
12317 for (k=0;k<nQuadraturePoints_element;k++)
12318 for (j=0;j<nDOF_trial_element;j++)
12319 for (I=0;I<nSpace;I++)
12320 for(J=0;J<nSpace;J++)
12323 jacobian_weak_residual_xx[eN*nDOF_test_X_trial_element +
12324 i*nDOF_trial_element +
12327 dsigma_xx[eN*nQuadraturePoints_element*nSpace2 +
12332 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
12333 k*nDOF_trial_element*nSpace +
12337 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
12338 k*nDOF_test_element*nSpace +
12341 jacobian_weak_residual_xy[eN*nDOF_test_X_trial_element +
12342 i*nDOF_trial_element +
12345 dsigma_xy[eN*nQuadraturePoints_element*nSpace2 +
12350 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
12351 k*nDOF_trial_element*nSpace +
12355 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
12356 k*nDOF_test_element*nSpace +
12359 jacobian_weak_residual_xz[eN*nDOF_test_X_trial_element +
12360 i*nDOF_trial_element +
12363 dsigma_xz[eN*nQuadraturePoints_element*nSpace2 +
12368 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
12369 k*nDOF_trial_element*nSpace +
12373 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
12374 k*nDOF_test_element*nSpace +
12378 jacobian_weak_residual_yx[eN*nDOF_test_X_trial_element +
12379 i*nDOF_trial_element +
12382 dsigma_yx[eN*nQuadraturePoints_element*nSpace2 +
12387 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
12388 k*nDOF_trial_element*nSpace +
12392 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
12393 k*nDOF_test_element*nSpace +
12396 jacobian_weak_residual_yy[eN*nDOF_test_X_trial_element +
12397 i*nDOF_trial_element +
12400 dsigma_yy[eN*nQuadraturePoints_element*nSpace2 +
12405 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
12406 k*nDOF_trial_element*nSpace +
12410 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
12411 k*nDOF_test_element*nSpace +
12414 jacobian_weak_residual_yz[eN*nDOF_test_X_trial_element +
12415 i*nDOF_trial_element +
12418 dsigma_yz[eN*nQuadraturePoints_element*nSpace2 +
12423 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
12424 k*nDOF_trial_element*nSpace +
12428 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
12429 k*nDOF_test_element*nSpace +
12433 jacobian_weak_residual_zx[eN*nDOF_test_X_trial_element +
12434 i*nDOF_trial_element +
12437 dsigma_zx[eN*nQuadraturePoints_element*nSpace2 +
12442 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
12443 k*nDOF_trial_element*nSpace +
12447 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
12448 k*nDOF_test_element*nSpace +
12451 jacobian_weak_residual_zy[eN*nDOF_test_X_trial_element +
12452 i*nDOF_trial_element +
12455 dsigma_zy[eN*nQuadraturePoints_element*nSpace2 +
12460 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
12461 k*nDOF_trial_element*nSpace +
12465 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
12466 k*nDOF_test_element*nSpace +
12469 jacobian_weak_residual_zz[eN*nDOF_test_X_trial_element +
12470 i*nDOF_trial_element +
12473 dsigma_zz[eN*nQuadraturePoints_element*nSpace2 +
12478 grad_v[eN*nQuadraturePoints_element*nDOF_trial_element*nSpace +
12479 k*nDOF_trial_element*nSpace +
12483 grad_w_dV[eN*nQuadraturePoints_element*nDOF_test_element*nSpace +
12484 k*nDOF_test_element*nSpace +
12495 const int * functional_map_element,
12496 const double * interpolationValues,
12502 for (eN = 0; eN < nElements_global; eN++)
12504 for (i=0; i < nDOF_element; i++)
12506 k = functional_map_element[i];
12508 for (j=0; j < dim_dof; j++)
12513 dofs[l2g[eN*nDOF_element+i]*dim_dof + j] = interpolationValues[eN*nDOF_element*dim_dof + k*dim_dof + j];
void updateGlobalExteriorElementBoundaryDiffusiveVelocity_sd(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nSpace, int *rowptr, int *colind, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *a, double *grad_phi, double *velocity)
void calculateVelocityQuadrature_MixedForm2_Jacobian(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, int nSpace, int nQuadraturePoints_element, double *qa, double *qw_dV, double *db, double *db_eb, double *v, double *DV, double *DV_eb, double *qv, double *qDV, double *qDV_eb)
void updateGlobalExteriorElementBoundaryStressFlux(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *stressFlux, double *w_dS, double *residual)
void calculateVelocityQuadrature_MixedForm2_vdof_sd(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, int nSpace, int nQuadraturePoints_element, const int *rowptr, const int *colind, double *qa, double *qw_dV, double *b, double *v, double *V, double *qv, double *qV, double *vel_dofs)
void updatePotential_MixedForm_weak_gwvd(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double epsilon, double *phi, double *w_dV, double *grad_w_dV, double *b, double *mf)
void parametricMaps_getJacobianValuesTrace2D_movingDomain(int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_element, int nDOF_element, double *xtArray, double *grad_psi, double *boundaryNormals, double *boundaryJacobians, int *l2g, double *nodeArray, double *jacobianInverseArray, double *metricTensorArray, double *metricTensorDeterminantSqrtArray, double *unitNormalArray)
void calculateWeightedPiolaShapeTrace(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_test_element, double *dSR, double *sqrt_det_g, double *w, double *w_dS)
void copyLeftElementBoundaryInfo_movingDomain(int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nExteriorElementBoundaries_global, int nInteriorElementBoundaries_global, int *elementBoundaryElementsArray, int *elementBoundaryLocalElementBoundariesArray, int *exteriorElementBoundariesArray, int *interiorElementBoundariesArray, double *xt)
void calculateVelocityQuadrature_MixedForm2(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, int nSpace, int nQuadraturePoints_element, double *qa, double *qw_dV, double *b, double *v, double *V, double *qv, double *qV)
void calculateWeightedPiolaShapeGradients(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *dVR, double *abs_det_jac, double *grad_w, double *grad_w_dV)
THIS SHOULD BE REMOVED BEFORE MERGE.
void accumulateExteriorElementPressureIntegrals(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int *elementBoundaryMaterialTypes, int *exteriorElementBoundaries, double *p, double *dS, double *P, double *boundaryMeasure)
void copyGlobalElementBoundaryInfo(int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nSpace_global, int nExteriorElementBoundaries_global, int nInteriorElementBoundaries_global, int *elementBoundaryElementsArray, int *elementBoundaryLocalElementBoundariesArray, int *exteriorElementBoundariesArray, int *interiorElementBoundariesArray, double *x, double *n, double *ebqe_x, double *ebqe_n, double *xg, double *ng)
A library of functions for computing the discrete finite element formulations.
double df(double C, double b, double a, int q, int r)
void updateInteriorElementBoundaryDiffusiveVelocity_sd(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, int *rowptr, int *colind, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *a, double *grad_phi, double *velocity)
void parametricMaps_getJacobianValuesGlobalExteriorTrace2D(int nQuadraturePoints_element, int nDOF_element, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, double *grad_psi, double *boundaryNormals, double *boundaryJacobians, int *l2g, double *nodeArray, double *jacobianInverseArray, double *metricTensorArray, double *metricTensorDeterminantSqrtArray, double *unitNormalArray)
void calculateWeightedShapeHessians(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *dVR, double *abs_det_jac, double *Hess_w, double *Hess_w_dV)
void calculateFiniteElementFunctionGradientValues(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nComponents, int nSpace, int *l2g, double *dof, double *grad_v, double *grad_u)
Calculate the gradient values of a multicomponent finite element function at the quadrature points fr...
void updateDiffusion_MixedForm_weak_sd(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, int rho_split, int *rowptr, int *colind, double *a, double *qV, double *grad_w_dV, double *velocity, double *weak_residual)
void update_f_movingDomain_ebq(int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, double *xt, double *m, double *f)
void parametricMaps_getJacobianValuesGlobalExteriorTrace1D(int nQuadraturePoints_element, int nDOF_element, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, double *grad_psi, double *boundaryNormals, double *boundaryJacobians, int *l2g, double *nodeArray, double *jacobianInverseArray, double *metricTensorArray, double *metricTensorDeterminantSqrtArray, double *unitNormalArray)
void updateGlobalJacobianFromExteriorElementBoundaryFluxJacobian_dense(int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, double *elementBoundaryFluxJacobian, double *w_dS, double *jac)
Update the global dense Jacobian from the element boundary flux Jacobians at exterior boundaries.
void calculateWeightedShapeGradients(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *dVR, double *abs_det_jac, double *grad_w, double *grad_w_dV)
Weight the test function with the integration weights.
void updateDiffusion_adjoint(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *da, double *grad_phi, double *grad_w_dV, double *Lstar_w_dV)
Loop over all the elements and update the linearized adjoint applied to the weighted test function wi...
void updateDiffusionJacobian2_strong(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nSpace, int *l2g, double *a, double *da, double *v, double *Hess_phi, double *dphi, double *Hess_v, double *dstrong_residual)
void updateHamiltonianJacobian_weak_lowmem(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, double *dH, double *grad_v, double *w_dV, double *jacobian_weak_residual)
void updateGlobalJacobianFromExteriorElementBoundaryFluxJacobian_eb_dense(int *elementNeighbors, int nElements_global, int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, double *elementBoundaryFluxJacobian_eb, double *w_dS, double *jac)
Update the global dense Jacobian from the element boundary flux Jacobians at exterior boundaries.
void updateGlobalJacobianFromExteriorElementBoundaryDiffusionAdjoint_CSR_sd(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int nSpace, int *rowptr, int *colind, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, int *csrRowIndeces_ru, int *csrColumnOffsets_eb_ru, int *isDOFBoundary, double sigma, double *v, double *n, double *a, double *grad_w, double *dS, double *jac)
void updateHamiltonian_adjoint(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *dH, double *grad_w_dV, double *Lstar_w_dV)
Loop over all the elements and update the linearized adjoint applied to the weighted test functions w...
double scalarDomainIntegral(int nElements, int nQuadraturePoints_element, double *dV, double *nValueArray)
void updateMass_adjoint(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, double *dmt, double *w_dV, double *Lstar_w_dV)
Loop over all the elements and update the linearized adjoint, applied to the weighted test functions,...
void updateExteriorElementBoundaryDiffusionAdjoint_sd(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nSpace, int *rowptr, int *colind, int *isDOFBoundary, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double sigma, double *u, double *ub, double *n, double *a, double *grad_w, double *dS, double *residual)
void calculateFiniteElementFunctionGradientTensorValues(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nComponents, int nSpace, int *l2g, double *dof, double *grad_v_X_grad_w_dV, double *grad_u_X_grad_w_dV)
Loop over all the quadrature points and calculate the tensor product of the solution gradient with th...
void parametricMaps_getJacobianValuesGlobalExteriorTrace2D_movingDomain(int nQuadraturePoints_element, int nDOF_element, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, double *xtArray, double *grad_psi, double *boundaryNormals, double *boundaryJacobians, int *l2g, double *nodeArray, double *jacobianInverseArray, double *metricTensorArray, double *metricTensorDeterminantSqrtArray, double *unitNormalArray)
double fluxDomainBoundaryIntegral(int nExteriorElementBoundaries, int nElementBoundaries_owned, int nQuadraturePoints_elementBoundary, int *flag, int *exteriorElementBoundariesArray, double *dS, double *nValueArray)
void updateInteriorElementBoundaryShockCapturingVelocity(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nQuadraturePoints_element, int nSpace, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *numDiff, double *grad_u, double *velocity)
Calculate the velocity from shock capturing at interior element boundary quadrature points.
void updateExteriorElementBoundary_MixedForm_weak(int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nSpace, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *n, double *phi_trace, double *w_dS, double *b)
Update the element boundary flux on exterior element boundaries.
void updateGlobalJacobianFromInteriorElementBoundaryDiffusionAdjoint_dense(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int nSpace, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, double sigma, double *v, double *n, double *a, double *grad_w, double *dS, double *jac)
void parametricMaps_getJacobianValuesTrace1D(int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_element, int nDOF_element, double *grad_psi, double *boundaryNormals, double *boundaryJacobians, int *l2g, double *nodeArray, double *jacobianInverseArray, double *metricTensorArray, double *metricTensorDeterminantSqrtArray, double *unitNormalArray)
void updateGlobalJacobianFromExteriorElementBoundaryDiffusionAdjoint_dense_sd(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int nSpace, int *rowptr, int *colind, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, int *isDOFBoundary, double sigma, double *v, double *n, double *a, double *grad_w, double *dS, double *jac)
void calculateCFLADR2speeds(int nElements_global, int nQuadraturePoints_element, int nSpace, double *elementDiameter, double *dm, double *df1, double *df2, double *cfl)
void updateInteriorElementBoundaryAdvectiveVelocity(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *f, double *velocity)
Calculate the advective flux at at interior element boundaries.
void updateGlobalJacobianFromGlobalExteriorElementBoundaryFluxJacobian_dense(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, double *elementBoundaryFluxJacobian, double *w_dS, double *jac)
Update the global dense Jacobian from the element boundary flux Jacobians at exterior boundaries.
void getPermutationsGlobal(int nElementBoundaries_global, int nElementBoundaryQuadraturePoints_elementBoundary, double *xArray, double *xArrayNew, int *permutations)
void calculateIntegrationWeights(int nElements_global, int nQuadraturePoints_element, double *abs_det_J, double *referenceWeights, double *weights)
Calculate the physical space integration weights from the reference element weights and Jacobian dete...
int checkElementBoundaryAndExteriorElementBoundaryArraysSame(int nElementBoundaries_element, int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nValuesPerQuadraturePoint, double tolerance, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, const double *ebq_val, const double *ebqe_val, int *firstBadIndex)
void computeC0P1InterpolantDGP12(int nElements_global, int nNodes_global, int nNodes_element, int nDOF_element, int dim_dof, const int *elementNodesArray, const int *nodeElementOffsets, const int *nodeElementsArray, const int *l2g, const double *dof, double *nodalAverage)
void updateGlobalExteriorElementBoundaryFlux(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *flux, double *w_dS, double *residual)
void updateReactionJacobian_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, double *dr, double *v_X_w_dV, double *jacobian_weak_residual)
Loop over all the elements and update the element Jacobian with the numerical quadrature approximatio...
void updateStress_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *sigma, double *grad_w_dV, double *weak_residual_x, double *weak_residual_y, double *weak_residual_z)
void updateGlobalJacobianFromInteriorElementBoundaryFluxJacobian_2sided_dense(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, double *elementBoundaryFluxJacobian_2sided, double *w_dS, double *jac)
Update the global dense Jacobian from the element boundary two-sided Hamiltonflux Jacobians at interi...
void parametricMaps_getInverseValuesTrace(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, int nSpace_global, double *inverseJacobian, int *l2g, double *nodeArray, double *xArray, double *xiArray)
void calculateGradShape_X_weightedShape(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, double *grad_v, double *w_dV, double *grad_v_X_w_dV)
Calculate the tensor product of trial function gradients and test functions at the quadrature points.
void calculateVelocityQuadrature_MixedForm(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, int nSpace, int nQuadraturePoints_element, double *A_inv, double *b, double *v, double *V, double *qv, double *qV)
void updateSubgridErrorJacobian(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, double *derror, double *Lstar_w_dV, double *jacobian_weak_residual)
Loop over all the elements and update the element Jacobian with the numerical quadrature approximatio...
void updateGlobalJacobianFromExteriorElementBoundaryDiffusionAdjoint_dense(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int nSpace, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, int *isDOFBoundary, double sigma, double *v, double *n, double *a, double *grad_w, double *dS, double *jac)
void updateGlobalExteriorElementBoundaryAdvectiveVelocity(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nSpace, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *f, double *velocity)
Update the advective flux at exterior element boundaries.
void updateInteriorTwoSidedElementBoundaryFlux(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *flux, double *w_dS, double *residual)
Update a two-sided (say nonconservative HJ flux) element boundary flux on interior element boundaries...
void parametricMaps_getValuesGlobalExteriorTrace(int nQuadraturePoints_elementBoundary, int nDOF_element, int nSpace_global, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, double *psi, int *l2g, double *nodeArray, double *xArray)
void calculateScalarScalarProduct(int nElements_global, int nQuadraturePoints_element, double *s1, double *s2, double *sResult)
Calculate the product of two scalars at the quadrature points.
void calculateGlobalExteriorElementBoundaryIntegrationWeights(int nQuadraturePoints_elementBoundary, int nExteriorElementBoundaries_global, double *sqrt_det_g, double *referenceWeights, double *weights)
void calculateFiniteElementFunctionHessianValues(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nComponents, int nSpace, int *l2g, double *dof, double *Hessian_v, double *Hessian_u)
void updateGlobalJacobianFromInteriorElementBoundaryDiffusionAdjoint_CSR_sd(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int nSpace, int *rowptr, int *colind, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, int *csrRowIndeces_ru, int *csrColumnOffsets_eb_ru, double sigma, double *v, double *n, double *a, double *grad_w, double *dS, double *jac)
void copyGlobalUnknownsToFreeUnknowns(int nDOF2set, int offset, int stride, const int *globalDOFids, const int *freeDOFids, const double *u, double *free_u)
void updateExteriorElementBoundary_MixedForm_weakJacobian(int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nSpace, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *n, double *dphi_trace_left, double *v, double *w_dS, double *db, double *db_eb)
Update the element boundary flux on interior element boundaries.
void calculateFiniteElementFunctionValues(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nComponents, int *l2g, double *dof, double *v, double *u)
Calculate the values of a multicomponent finite element function at the quadrature points from the de...
void updateDiffusionJacobian_MixedForm_weak(int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, double *a, double *da, double *qV, double *qDV, double *qDV_eb, double *grad_w_dV, double *v, double *jacobian_weak_residual, double *jacobian_weak_residual_eb)
void updateDiffusion_adjoint_sd(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, int *rowptr, int *colind, double *da, double *grad_phi, double *grad_w_dV, double *Lstar_w_dV)
void calculateGradShape_X_weightedShapeGlobalExteriorTrace(int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_trial_element, int nDOF_test_element, int nSpace, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, double *grad_v, double *w_dS, double *grad_v_X_w_dS)
Calculate the tensor product of trial function gradients and test functions at the quadrature points.
void updateExteriorElementBoundaryDiffusiveVelocity(int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *a, double *grad_phi, double *velocity)
Calculate the diffusive flux at exterior element boundary quadrature points.
void updateGlobalJacobianFromElementJacobian_dense(int nElements_global, int nDOF_test_element, int nDOF_trial_element, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, double *elementJacobian, double *globalJacobian)
Update the global dense jacobian from the element Jacobians.
void parametricMaps_getInverseValuesGlobalExteriorTrace(int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, int nSpace_global, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, double *inverseJacobian, int *l2g, double *nodeArray, double *xArray, double *xiArray)
void parametricMaps_getValuesTrace(int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_element, int nDOF_element, int nSpace_global, double *psi, int *l2g, double *nodeArray, double *xArray)
void updateNumericalDiffusion_lowmem(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *numDiff, double *grad_u, double *grad_w_dV, double *weak_residual)
void copyExteriorElementBoundaryValuesFromGlobalElementBoundaryValues(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nValuesPerQuadraturePoint, const int *exteriorElementBoundaries, const int *elementBoundaryElements, const int *elementBoundaryLocalElementBoundaries, const double *ebq_global_val, double *ebqe_val)
copy quantity that sits only on exterior boundaries from a global elementBoundary quadrature array
void calculateShape_X_weightedShapeGlobalExteriorTrace(int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_trial_element, int nDOF_test_element, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, double *v, double *w_dS, double *v_X_w_dS)
Calcualte the tensor product of trial and test functions at the quadrature points global exterior bou...
void calculateVectorScalarProduct(int nElements_global, int nQuadraturePoints_element, int nSpace, double *v, double *s, double *vResult)
Calculate the product of a vector and a scalar at the quadrature points.
void calculateVelocityQuadrature_MixedForm2_sd(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, int nSpace, int nQuadraturePoints_element, const int *rowptr, const int *colind, double *qa, double *qw_dV, double *b, double *v, double *V, double *qv, double *qV)
void updateReaction_strong(int nElements_global, int nQuadraturePoints_element, double *r, double *strong_residual)
Loop over all the elements and update the strong from of the residual at the quadrature points with t...
void updateDiffusionJacobian_strong(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nSpace, int *l2g, double *da, double *dphi, double *grad_phi, double *grad_u, double *grad_v, double *dstrong_residual)
Loop over all the elements and update the strong form of the residual with the diffusion term at the ...
void calculateInteriorElementBoundaryAverageVelocity(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *v, double *vAverage)
void parametricMaps_getInverseValues(int nElements_global, int nQuadraturePoints_element, int nDOF_element, int nSpace_global, double *inverseJacobian, int *l2g, double *nodeArray, double *xArray, double *xiArray)
void parametricFiniteElementSpace_getGradientValuesGlobalExteriorTrace(int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, int nSpace_global, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, double *grad_psi, double *inverseJacobianArray, double *grad_vArray)
void copyExteriorElementBoundaryValuesToElementBoundaryValues(int nExteriorElementBoundaries_global, int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nValuesPerQuadraturePoint, const int *exteriorElementBoundaries, const int *elementBoundaryElements, const int *elementBoundaryLocalElementBoundaries, const double *ebqe_val, double *ebq_val)
copy quantity that sits only on exterior boundaries into an elementBoundary quadrature array
void calculateElementBoundaryIntegrationWeights(int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, double *sqrt_det_g, double *referenceWeights, double *weights)
void updateExteriorElementBoundaryAdvectiveVelocity(int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *f, double *velocity)
Update the advective flux at exterior element boundaries.
void calculateFlowVelocity(int nElements_global, int nQuadraturePoints_element, int nSpace, double *f, double *a, double *grad_phi, double *v)
Calculate the total (advective + diffusive) flow velocity.
void updateAdvection_adjoint(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *df, double *grad_w_dV, double *Lstar_w_dV)
Loop over all the elements and update the linearized adjoint applied to the weighted test functions w...
void updateReactionJacobian_strong(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, double *dr, double *v, double *dstrong_residual)
Loop over all the elements and update the strong from of the residual at the quadrature points with t...
void parametricMaps_getValues(int nElements_global, int nQuadraturePoints_element, int nDOF_element, int nSpace_global, double *psi, int *l2g, double *nodeArray, double *xArray)
void updateMassJacobian_strong(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, double *dmt, double *v, double *dstrong_residual)
Loop over all the elements and update the Jacobian of the strong from of the residual at the quadratu...
void updateInteriorElementBoundary_MixedForm_weakJacobian(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nSpace, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *n, double *dphi_trace_left, double *dphi_trace_right, double *v, double *w_dS, double *db, double *db_eb)
Update the element boundary flux on interior element boundaries.
void calculateExteriorNumericalTrace_Potential(int *isDOFBoundary, int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *phi_bc, double *phi, double *dphi, double *phi_trace, double *dphi_trace_left)
Calculate the trace of the potential on interior element boundaries. Use the arithmetic average.
void parametricFiniteElementSpace_getValues(int nElements_global, int nQuadraturePoints_element, int nDOF_element, double *psi, double *vArray)
void calculateWeightedShape(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, double *dVR, double *abs_det_jac, double *w, double *w_dV)
Weight the test function with the integration weights.
void calculateShape_X_weightedShapeTrace(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_trial_element, int nDOF_test_element, double *v, double *w_dS, double *v_X_w_dS)
Calcualte the tensor product of trial and test functions at the quadrature points.
void updateStressJacobian_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, double *dsigma_xx, double *dsigma_xy, double *dsigma_xz, double *dsigma_yx, double *dsigma_yy, double *dsigma_yz, double *dsigma_zx, double *dsigma_zy, double *dsigma_zz, double *grad_v, double *grad_w_dV, double *jacobian_weak_residual_xx, double *jacobian_weak_residual_xy, double *jacobian_weak_residual_xz, double *jacobian_weak_residual_yx, double *jacobian_weak_residual_yy, double *jacobian_weak_residual_yz, double *jacobian_weak_residual_zx, double *jacobian_weak_residual_zy, double *jacobian_weak_residual_zz)
void updateNumericalDiffusion(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *numDiff, double *grad_u_X_grad_w_dV, double *weak_residual)
Loop over all the elements and update the element weak_residual with the numerical quadrature approxi...
void updateInteriorElementBoundaryFlux(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *flux, double *w_dS, double *residual)
Update the element boundary flux on interior element boundaries.
void copyGlobalElementBoundaryVelocityToElementBoundary(int nElements_global, int nInteriorElementBoundaries_global, int nExteriorElementBoundaries_global, int nElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, int *interiorElementBoundaries, int *exteriorElementBoundaries, int *elementBoundaryElementsArray, int *elementBoundaryLocalElementBoundariesArray, double *velocityBoundary_global, double *velocityBoundary_element)
void updateMassJacobian_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, double *dmt, double *v_X_w_dV, double *jacobian_weak_residual)
Loop over all the elements and update the element Jacobian with the numerical quadrature approximatio...
void calculateVelocityProjectionMatrixLDG(int nElements_global, int nQuadraturePoints_element, int nDOF_element, double *vXw_dV, double *A_inv)
double scalarHeavisideDomainIntegral(int nElements, int nQuadraturePoints_element, double *dV, double *nValueArray)
void updateGlobalJacobianFromExteriorElementBoundaryFluxJacobian_eb_CSR(int *elementNeighbors, int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *csrRowIndeces_ru, int *csrColumnOffsets_eb_eNebN_ru, double *elementBoundaryFluxJacobian_eb, double *w_dS, double *jac)
Update the global CSR Jacobian from the element boundary flux Jacobians at exterior boundaries.
void calculateCFLADR(int nElements_global, int nQuadraturePoints_element, int nSpace, double *elementDiameter, double *dm, double *df, double *cfl)
void parametricMaps_getJacobianValuesTrace2D(int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_element, int nDOF_element, double *grad_psi, double *boundaryNormals, double *boundaryJacobians, int *l2g, double *nodeArray, double *jacobianInverseArray, double *metricTensorArray, double *metricTensorDeterminantSqrtArray, double *unitNormalArray)
void parametricFiniteElementSpace_getGradientValues(int nElements_global, int nQuadraturePoints_element, int nDOF_element, int nSpace_global, double *grad_psi, double *inverseJacobianArray, double *grad_vArray)
void updateAdvectionJacobian_strong(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nSpace, double *df, double *grad_v, double *dstrong_residual)
Loop over all the elements and update the Jacobian of the strong form of the residual with the advect...
void updateGlobalJacobianFromInteriorElementBoundaryFluxJacobian_dense(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, double *elementBoundaryFluxJacobian, double *w_dS, double *jac)
Update the global dense Jacobian from the element boundary flux Jacobians at interior boundaries.
void updateGlobalJacobianFromInteriorElementBoundaryFluxJacobian_eb_dense(int *elementNeighbors, int nElements_global, int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, double *elementBoundaryFluxJacobian_eb, double *w_dS, double *jac)
Update the global dense Jacobian from the element boundary flux Jacobians at interior boundaries.
void parametricMaps_getJacobianValuesTrace3D(int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_element, int nDOF_element, double *grad_psi, double *boundaryNormals, double *boundaryJacobians, int *l2g, double *nodeArray, double *jacobianInverseArray, double *metricTensorArray, double *metricTensorDeterminantSqrtArray, double *unitNormalArray)
void computeC0P1InterpolantNCP1(int nElements_global, int nNodes_global, int nNodes_element, int nDOF_element, int dim_dof, const int *elementNodesArray, const int *nodeElementOffsets, const int *nodeElementsArray, const int *l2g, const double *dof, double *nodalAverage)
void updateGlobalResidualFromElementResidual(int nElements_global, int nDOF_test_element, int offset_r, int stride_r, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, double *elementResidual, double *globalResidual)
Update the global residuals from the element residuals.
void updateDiffusionJacobian_weak_lowmem(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, int *l2g, double *a, double *da, double *grad_phi, double *grad_w_dV, double *dphi, double *v, double *grad_v, double *jacobian_weak_residual)
void parametricMaps_getJacobianValues2D(int nElements_global, int nQuadraturePoints_element, int nDOF_element, double *grad_psi, int *l2g, double *nodeArray, double *jacobianArray, double *jacobianDeterminantArray, double *jacobianInverseArray)
void updateInteriorElementBoundaryDiffusionAdjoint_sd(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nSpace, int *rowptr, int *colind, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double sigma, double *u, double *n, double *a, double *grad_w, double *dS, double *residual)
void parametricMaps_getJacobianValues1D(int nElements_global, int nQuadraturePoints_element, int nDOF_element, double *grad_psi, int *l2g, double *nodeArray, double *jacobianArray, double *jacobianDeterminantArray, double *jacobianInverseArray)
void calculateExteriorElementBoundaryVelocities(int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *m, double *a, double *grad_phi, double *f, double *vAverage, double *vJump, double *mAverage, double *mJump)
void updateAdvectionJacobian_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, double *df, double *v_X_grad_w_dV, double *jacobian_weak_residual)
Loop over all the elements and update the element Jacobian with the numerical quadrature approximatio...
void calculateFiniteElementFunctionGradientValuesGlobalExteriorTrace(int nQuadraturePoints_elementBoundary, int nDOF_trial_element, int nComponents, int nSpace, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, int *l2g, double *dof, double *grad_v, double *grad_u)
void updateDiffusion_weak_lowmem(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *a, double *grad_phi, double *grad_w_dV, double *weak_residual)
void calculateShape_X_weightedShape(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, double *v, double *w_dV, double *v_X_w_dV)
Calcualte the tensor product of trial and test functions at the quadrature points.
void updatePotential_MixedForm_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *phi, double *grad_w_dV, double *b)
double scalarSmoothedHeavisideDomainIntegral(int nElements, int nQuadraturePoints_element, double epsFact, double *elementDiameter, double *dV, double *nValueArray)
void calculateWeightedShapeTrace(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_test_element, double *dSR, double *sqrt_det_g, double *w, double *w_dS)
Weight the traces of the test function with the element boundary integration weights.
void calculateInteriorElementBoundaryVelocities(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *m, double *a, double *grad_phi, double *f, double *vAverage, double *vJump, double *mAverage, double *mJump)
void calculateDimensionlessNumbersADR(int nElements_global, int nQuadraturePoints_element, int nSpace, int computeDiffusiveTimeStepLimit, double *elementDiameter, double *df, double *a, double *dphi, double *dr, double *dmt, double *pe, double *cfl)
Calculate the Peclet and Courant-Friedrichs-Lewy numbers for the scalar advection-diffusion-reaction ...
void updateDiffusion_weak_sd(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, int *rowptr, int *colind, double *a, double *grad_phi, double *grad_w_dV, double *weak_residual)
void updateAdvection_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *f, double *grad_w_dV, double *weak_residual)
Loop over all the elements and update the element weak_residual with the numerical quadrature approxi...
void updateMass_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, double *mt, double *w_dV, double *weak_residual)
Loop over all the elements and update the element weak_residual with the numerical quadrature approxi...
void updateGlobalJacobianFromInteriorElementBoundaryFluxJacobian_2sided_CSR(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *csrRowIndeces_ru, int *csrColumnOffsets_eb_ru, double *elementBoundaryFluxJacobian_2sided, double *w_dS, double *jac)
Update the global CSR Jacobian from the element boundary two-sided Hamiltonian flux Jacobians at inte...
void update_f_movingDomain_constantMass_q(int nElements_global, int nQuadraturePoints_element, int nSpace, double *xt, double *f)
void updateGlobalJacobianFromGlobalExteriorElementBoundaryFluxJacobian_CSR(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *csrRowIndeces_ru, int *csrColumnOffsets_eb_ru, double *elementBoundaryFluxJacobian, double *w_dS, double *jac)
Update the global CSR Jacobian from the element boundary flux Jacobians at exterior boundaries.
void updateHamiltonian_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, double *H, double *w_dV, double *weak_residual)
Loop over all the elements and update the element weak_residual with the numerical quadrature approxi...
void calculateFiniteElementFunctionGradientValuesTrace(int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_trial_element, int nComponents, int nSpace, int *l2g, double *dof, double *grad_v, double *grad_u)
Calculate the gradients of a multi-component finite element function at the element boundary quadratu...
void calculateTensorScalarProduct(int nElements_global, int nQuadraturePoints_element, int nSpace, double *t, double *s, double *tResult)
Calculate the product of a tensor and scalar at the quadrature points.
void setExteriorGlobalElementBoundaryVelocityValues(int updateFluxValues, int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nSpace, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *n, double *vn_in, double *v_out)
void updateExteriorElementBoundaryFlux(int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *flux, double *w_dS, double *residual)
Update the element boundary flux on exterior element boundaries.
void updateInteriorElementBoundaryDiffusiveVelocity(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *a, double *grad_phi, double *velocity)
Calculate the diffusive flux at interior element boundary quadrature points.
void updateInteriorElementBoundaryDiffusionAdjoint(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nSpace, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double sigma, double *u, double *n, double *a, double *grad_w, double *dS, double *residual)
void updateDiffusion_strong_sd(int nElements_global, int nQuadraturePoints_element, int nSpace, int *rowptr, int *colind, double *da, double *grad_phi, double *grad_u, double *strong_residual)
void estimate_mt_lowmem(int nElements_global, int nQuadraturePoints_element, int nDOF_element, double *v, double *w_dV, double *elementSpatialResidual, double *mt)
void updateAdvectionJacobian_weak_lowmem(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, double *df, double *v, double *grad_w_dV, double *jacobian_weak_residual)
void calculateShape_X_weightedGradShape(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, double *v, double *grad_w_dV, double *v_X_grad_w_dV)
Calculate the tensor product of trial functions and test function gradients at the quadrature points.
void calculateGradShape_X_weightedShapeTrace(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_trial_element, int nDOF_test_element, int nSpace, double *grad_v, double *w_dS, double *grad_v_X_w_dS)
Calculate the tensor product of trial function gradients and test functions at the quadrature points.
void parametricMaps_getJacobianValues3D(int nElements_global, int nQuadraturePoints_element, int nDOF_element, double *grad_psi, int *l2g, double *nodeArray, double *jacobianArray, double *jacobianDeterminantArray, double *jacobianInverseArray)
void calculateExteriorElementBoundaryStress2D(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int *elementBoundaryMaterialTypes, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *p, double *mom_flux_vec_u, double *mom_flux_vec_v, double *dS, double *n, double *F)
void updateDiffusion2_strong(int nElements_global, int nQuadraturePoints_element, int nSpace, double *a, double *Hess_phi, double *strong_residual)
void parametricFiniteElementSpace_getHessianValues(int nElements_global, int nQuadraturePoints_element, int nDOF_element, int nSpace_global, double *Hessian_psi, double *inverseJacobianArray, double *Hessian_vArray)
void updateGlobalJacobianFromInteriorElementBoundaryDiffusionAdjoint_dense_sd(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int nSpace, int *rowptr, int *colind, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, double sigma, double *v, double *n, double *a, double *grad_w, double *dS, double *jac)
void updateGlobalJacobianFromElementJacobian_eb_CSR(int *elementNeighbors, int nElements_global, int nElementBoundaries_element, int nDOF_test_element, int nDOF_trial_element, int *nFreeDOF_element_r, int *freeLocal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *csrRowIndeces_ru, int *csrColumnOffsets_eb_ru, double *elementJacobian_eb, double *globalJacobian)
Update the global CSR jacobian from the element Jacobians.
void updateReaction_adjoint(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, double *dr, double *w_dV, double *Lstar_w_dV)
Loop over all the elements and update the linearized adjoint, applied to the weighted test functions,...
void estimate_mt(int nElements_global, int nQuadraturePoints_element, int nDOF_element, double *v, double *vXw_dV, double *elementSpatialResidual, double *mt)
void calculateExteriorElementBoundaryStress3D(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int *elementBoundaryMaterialTypes, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *p, double *mom_flux_vec_u, double *mom_flux_vec_v, double *mom_flux_vec_w, double *dS, double *n, double *F)
void calculateFiniteElementFunctionValuesTrace(int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_trial_element, int nComponents, int *l2g, double *dof, double *v, double *u)
Calculate the values of a multi-component finite element function at element boundary quadrature poin...
void updateExteriorElementBoundaryDiffusiveVelocity_sd(int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, int *rowptr, int *colind, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *a, double *grad_phi, double *velocity)
void updateGlobalJacobianFromInteriorElementBoundaryFluxJacobian_eb_CSR(int *elementNeighbors, int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *csrRowIndeces_ru, int *csrColumnOffsets_eb_eNebN_ru, double *elementBoundaryFluxJacobian_eb, double *w_dS, double *jac)
Update the global CSR Jacobian from the element boundary flux Jacobians at interior boundaries.
void updateDiffusionJacobian_weak_sd(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, int *rowptr, int *colind, int *l2g, double *a, double *da, double *grad_phi, double *grad_w_dV, double *dphi, double *v, double *grad_v, double *jacobian_weak_residual)
void updateHamiltonianJacobian_strong(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nSpace, double *dH, double *grad_v, double *dstrong_residual)
Loop over all the elements and update the Jacobian of the strong form of the residual with the advect...
void updateGlobalJacobianFromElementJacobian_CSR(int nElements_global, int nDOF_test_element, int nDOF_trial_element, int *nFreeDOF_element_r, int *freeLocal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *csrRowIndeces_ru, int *csrColumnOffsets_ru, double *elementJacobian, double *globalJacobian)
Update the global CSR jacobian from the element Jacobians.
void updateGlobalJacobianFromExteriorElementBoundaryFluxJacobian_CSR(int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *csrRowIndeces_ru, int *csrColumnOffsets_eb_ru, double *elementBoundaryFluxJacobian, double *w_dS, double *jac)
Update the global CSR Jacobian from the element boundary flux Jacobians at exterior boundaries.
void calculateExteriorElementBoundaryAverageVelocity(int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *v, double *vAverage)
void updateAddJacobian_CSR(int jacIndex, double val, double *jac)
Update a single element of the Jacobian.
void copyLeftElementBoundaryInfo(int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nSpace_global, int nExteriorElementBoundaries_global, int nInteriorElementBoundaries_global, int *elementBoundaryElementsArray, int *elementBoundaryLocalElementBoundariesArray, int *exteriorElementBoundariesArray, int *interiorElementBoundariesArray, double *x, double *n, double *xg, double *ng)
void updateMass_strong(int nElements_global, int nQuadraturePoints_element, double *mt, double *strong_residual)
Loop over all the elements and update the strong from of the residual at the quadrature points with t...
void updateHamiltonian_strong(int nElements_global, int nQuadraturePoints_element, int nSpace, double *dH, double *grad_u, double *strong_residual)
Loop over all the elements and update the strong form of the residual with the advection term.
void calculateWeightedShapeGlobalExteriorTrace(int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_test_element, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, double *dSR, double *sqrt_det_g, double *w, double *w_dS)
Weight the traces of the test function with the element boundary integration weights global exterior ...
void calculateVelocityQuadrature_MixedForm_Jacobian(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, int nSpace, int nQuadraturePoints_element, double *A_inv, double *db, double *db_eb, double *v, double *DV, double *DV_eb, double *qv, double *qDV, double *qDV_eb)
void updateDiffusionJacobian_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, int *l2g, double *a, double *da, double *grad_phi_X_grad_w_dV, double *dphi, double *v, double *grad_v_X_grad_w_dV, double *jacobian_weak_residual)
Loop over all the elements and update the element Jacobian with the numerical quadrature approximatio...
void updateMassJacobian_weak_lowmem(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, double *dmt, double *v, double *w_dV, double *jacobian_weak_residual)
void zeroJacobian_CSR(int nNonzeros, double *jac)
Set all the Jacobian entries to 0.0.
void updateReaction_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, double *r, double *w_dV, double *weak_residual)
Loop over all the elements and update the element weak_residual with the numerical quadrature approxi...
void updateExteriorElementBoundaryDiffusionAdjoint(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nSpace, int *isDOFBoundary, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double sigma, double *u, double *ub, double *n, double *a, double *grad_w, double *dS, double *residual)
void updateDiffusion_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *a, double *grad_phi_X_grad_w_dV, double *weak_residual)
Loop over all the elements and update the element weak_residual with the numerical quadrature approxi...
void updateSubgridError(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, double *error, double *Lstar_w_dV, double *weak_residual)
Loop over all the elements and update the element weak_residual with the numerical quadrature approxi...
void parametricFiniteElementSpace_getValuesGlobalExteriorTrace(int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, double *psi, double *vArray)
void updateReactionJacobian_weak_lowmem(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, double *dr, double *v, double *w_dV, double *jacobian_weak_residual)
void updateGlobalJacobianFromGlobalExteriorElementBoundaryFluxJacobian_eb_dense(int *elementNeighbors, int nElements_global, int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, double *elementBoundaryFluxJacobian_eb, double *w_dS, double *jac)
Update the global dense Jacobian from the element boundary flux Jacobians at exterior boundaries only...
void updateNumericalDiffusionJacobian(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, double *numDiff, double *grad_v_X_grad_w_dV, double *jacobian_weak_residual)
Loop over all the elements and update the element Jacobian with the numerical quadrature approximatio...
void copyExteriorElementBoundaryValuesFromElementBoundaryValues(int nExteriorElementBoundaries_global, int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nValuesPerQuadraturePoint, const int *exteriorElementBoundaries, const int *elementBoundaryElements, const int *elementBoundaryLocalElementBoundaries, const double *ebq_val, double *ebqe_val)
copy quantity in an elementBoundary quadrature array to one that sits only on exterior boundaries
int checkGlobalElementBoundaryAndExteriorElementBoundaryArraysSame(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nValuesPerQuadraturePoint, double tolerance, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, const double *ebq_global_val, const double *ebqe_val, int *firstBadIndex)
void computeC0P1InterpolantDGP0(int nElements_global, int nNodes_global, int nNodes_element, int nDOF_element, int dim_dof, const int *elementNodesArray, const int *nodeElementOffsets, const int *nodeElementsArray, const int *l2g, const double *dof, double *nodalAverage)
void update_f_movingDomain_q(int nElements_global, int nQuadraturePoints_element, int nSpace, double *xt, double *m, double *f)
void copyFreeUnknownsToGlobalUnknowns(int nDOF2set, int offset, int stride, const int *globalDOFids, const int *freeDOFids, const double *free_u, double *u)
void parametricMaps_getPermutations(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nSpace_global, double *xiArray, int *permutations)
void updateNumericalDiffusionJacobian_lowmem(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, double *numDiff, double *grad_v, double *grad_w_dV, double *jacobian_weak_residual)
void parametricMaps_getJacobianValuesGlobalExteriorTrace3D(int nQuadraturePoints_element, int nDOF_element, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, double *grad_psi, double *boundaryNormals, double *boundaryJacobians, int *l2g, double *nodeArray, double *jacobianInverseArray, double *metricTensorArray, double *metricTensorDeterminantSqrtArray, double *unitNormalArray)
void updateDiffusion2_adjoint(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *a, double *Hess_w_dV, double *Lstar_w_dV)
void parametricFiniteElementSpace_getGradientValuesTrace(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, int nSpace_global, double *grad_psi, int *permutations, double *inverseJacobianArray, double *grad_vArray)
void calculateInteriorNumericalTrace_Potential(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *phi, double *dphi, double *phi_trace, double *dphi_trace_left, double *dphi_trace_right)
Calculate the trace of the potential on interior element boundaries. Use the arithmetic average.
void calculateConservationResidualDG(int nElements_global, int nDOF_test_element, double *elementResidual, double *conservationResidual)
void updateDiffusion_MixedForm_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *a, double *qV, double *grad_w_dV, double *weak_residual)
void updateAdvection_strong(int nElements_global, int nQuadraturePoints_element, int nSpace, double *df, double *grad_u, double *strong_residual)
Loop over all the elements and update the strong form of the residual with the advection term.
void calculateFiniteElementFunctionValuesGlobalExteriorTrace(int nQuadraturePoints_elementBoundary, int nDOF_trial_element, int nComponents, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, int *l2g, double *dof, double *v, double *u)
void updateGlobalExteriorElementBoundaryShockCapturingVelocity(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nSpace, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *numDiff, double *grad_u, double *velocity)
Calculate the shock capturing flux at exterior element boundary quadrature points.
void updateDiffusionJacobian2_strong_sd(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nSpace, int *rowptr, int *colind, int *l2g, double *a, double *da, double *v, double *Hess_phi, double *dphi, double *Hess_v, double *dstrong_residual)
void parametricMaps_getPermutationsGlobalExterior(int nElementBoundaryQuadraturePoints_elementBoundary, int nSpace_global, int nExteriorElementBoundaries_global, const int *exteriorElementBoundariesArray, const int *elementBoundaryElementsArray, const int *elementBoundaryLocalElementBoundariesArray, double *xiArray, int *permutations)
void updateDiffusion2_adjoint_sd(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, int *rowptr, int *colind, double *a, double *Hess_w_dV, double *Lstar_w_dV)
void updateGlobalExteriorElementBoundaryDiffusiveVelocity(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nSpace, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *a, double *grad_phi, double *velocity)
Calculate the diffusive flux at exterior element boundary quadrature points.
void calculateDimensionlessNumbersADR_sd(int nElements_global, int nQuadraturePoints_element, int nSpace, int computeDiffusiveTimeStepLimit, int *rowptr, int *colind, double *elementDiameter, double *df, double *a, double *dphi, double *dr, double *dmt, double *pe, double *cfl)
double fluxDomainBoundaryIntegralFromVector(int nExteriorElementBoundaries, int nElementBoundaries_owned, int nQuadraturePoints_elementBoundary, int nSpace, int *flag, int *exteriorElementBoundaries, double *dS, double *nValueArray, double *normal)
void loadBoundaryFluxIntoGlobalElementBoundaryVelocity(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nSpace, int *exteriorElementBoundaries, int *fluxElementBoundaries, double *normal, double *flux, double updateCoef, double *velocity)
void updateDiffusionJacobian_MixedForm_weak_sd(int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, int *rowptr, int *colind, double *a, double *da, double *qV, double *qDV, double *qDV_eb, double *grad_w_dV, double *v, double *jacobian_weak_residual, double *jacobian_weak_residual_eb)
void updateExteriorElementBoundaryShockCapturingVelocity(int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nQuadraturePoints_element, int nSpace, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *numDiff, double *grad_u, double *velocity)
Calculate the shock capturing flux at exterior element boundary quadrature points.
void calculateGradShape_X_weightedGradShape(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, double *grad_v, double *grad_w_dV, double *grad_v_X_grad_w_dV)
Calculate the tensor product of trial function gradients and test function gradients at the quadratur...
void updateHamiltonianJacobian_weak(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nDOF_test_element, int nSpace, double *dH, double *grad_v_X_w_dV, double *jacobian_weak_residual)
Loop over all the elements and update the element Jacobian with the numerical quadrature approximatio...
void updateGlobalJacobianFromInteriorElementBoundaryFluxJacobian_CSR(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *csrRowIndeces_ru, int *csrColumnOffsets_eb_ru, double *elementBoundaryFluxJacobian, double *w_dS, double *jac)
Update the global CSR Jacobian from the element boundary flux Jacobians at interior boundaries.
void copyExteriorElementBoundaryValuesToGlobalElementBoundaryValues(int nExteriorElementBoundaries_global, int nQuadraturePoints_elementBoundary, int nValuesPerQuadraturePoint, const int *exteriorElementBoundaries, const int *elementBoundaryElements, const int *elementBoundaryLocalElementBoundaries, const double *ebqe_val, double *ebq_global_val)
copy quantity that sits only on exterior boundaries into a global elementBoundary quadrature array
void updateInteriorElementBoundary_MixedForm_weak(int nInteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nSpace, int *interiorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, double *n, double *phi_trace, double *w_dS, double *b)
Update the element boundary flux on interior element boundaries.
void update_f_movingDomain_constantMass_ebq(int nElements_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, double *xt, double *f)
void updateDiffusionJacobian_strong_sd(int nElements_global, int nQuadraturePoints_element, int nDOF_trial_element, int nSpace, int *rowptr, int *colind, int *l2g, double *da, double *dphi, double *grad_phi, double *grad_u, double *grad_v, double *dstrong_residual)
void updateDiffusion_strong(int nElements_global, int nQuadraturePoints_element, int nSpace, double *da, double *grad_phi, double *grad_u, double *strong_residual)
Loop over all the elements and update the strong form of the residual with the diffusion term at the ...
void updatePotential_MixedForm_weakJacobian(int nElements_global, int nQuadraturePoints_element, int nDOF_test_element, int nSpace, double *dphi, double *v, double *grad_w_dV, double *db)
void parametricFiniteElementSpace_getValuesTrace(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, double *psi, int *permutations, double *vArray)
void projectFromNodalInterpolationConditions(int nElements_global, int nDOF_element, int dim_dof, const int *l2g, const int *functional_map_element, const double *interpolationValues, double *dofs)
void calculateConservationResidual(int nElements_global, int nDOF_test_element, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nSpace, double *n, double *dS_u, double *elementResidual, double *velocity, double *conservationResidual)
calculate mass conservation error as
void updateDiffusion2_strong_sd(int nElements_global, int nQuadraturePoints_element, int nSpace, int *rowptr, int *colind, double *a, double *Hess_phi, double *strong_residual)
void calculateVelocityQuadrature_MixedForm2_Jacobian_sd(int nElements_global, int nElementBoundaries_element, int nElementBoundaryQuadraturePoints_elementBoundary, int nDOF_element, int nSpace, int nQuadraturePoints_element, const int *rowptr, const int *colind, double *qa, double *qw_dV, double *db, double *db_eb, double *v, double *DV, double *DV_eb, double *qv, double *qDV, double *qDV_eb)
void updateGlobalJacobianFromGlobalExteriorElementBoundaryFluxJacobian_eb_CSR(int *elementNeighbors, int nExteriorElementBoundaries_global, int nElementBoundaries_element, int nQuadraturePoints_elementBoundary, int nDOF_test_element, int nDOF_trial_element, int *exteriorElementBoundaries, int *elementBoundaryElements, int *elementBoundaryLocalElementBoundaries, int *nFreeDOF_element_r, int *freeLocal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *csrRowIndeces_ru, int *csrColumnOffsets_eb_eNebN_ru, double *elementBoundaryFluxJacobian_eb, double *w_dS, double *jac)
Update the global CSR Jacobian from the element boundary flux Jacobians at exterior boundaries only d...
void updateGlobalJacobianFromElementJacobian_eb_dense(int *elementNeighbors, int nElements_global, int nElementBoundaries_element, int nDOF_test_element, int nDOF_trial_element, int offset_r, int stride_r, int offset_u, int stride_u, int nFreeVDOF_global, int *nFreeDOF_element_r, int *freeLocal_r, int *freeGlobal_r, int *nFreeDOF_element_u, int *freeLocal_u, int *freeGlobal_u, double *elementJacobian_eb, double *globalJacobian)
Update the global dense jacobian from the element Jacobians.
int dgetrf_(int *m, int *n, double *a, int *lda, int *ipiv, int *info)
int dgetri_(int *N, double *A, int *LDA, int *IPIV, double *WORK, int *LWORK, int *INFO)
int dgetrs_(char *trans, int *n, int *nrhs, double *a, int *lda, int *ipiv, double *b, int *ldb, int *info)