11 #define MACHINE_EPS 1e-12 13 #define EPS0 8.85418782e-12 // permittivity of free space [F/m] 14 #define MU0 1.25663706e-6 // permeability of free space [H/m] 28 for (
int k=0; k<numX[2]; k++) {
29 for (
int j=0; j<numX[1]; j++) {
30 for (
int i=0; i<numX[0]; i++) {
31 field[i+j*numX[0]+k*numX[0]*numX[1]] = coeff[0]*(i*deltaX[0]) + coeff[1]*(j*deltaX[1]) + coeff[2]*(k*deltaX[2]) + coeff[3];
36 }
else if (numDim == 2) {
42 for (
int j=0; j<numX[1]; j++) {
43 for (
int i=0; i<numX[0]; i++) {
44 field[i+j*numX[0]] = coeff[0]*(i*deltaX[0]) + coeff[1]*(j*deltaX[1]) + coeff[2];
48 }
else if (numDim == 1) {
53 for (
int i=0; i<numX[0]; i++) {
54 field[i] = coeff[0]*(i*deltaX[0]) + coeff[1];
58 std::cout <<
"Invalid no. of dimensions. No. of dimensions = " << numDim << std::endl;
69 size_t numPoints = numX[0]*numX[1]*numX[2];
71 for (
int iDim=0; iDim<numDim; iDim++) {
74 for (
size_t iPoint=0; iPoint<
numPoints; iPoint++) {
75 inputField[iDimxnumPoints+iPoint] = value[iDim];
80 std::cout <<
"Invalid no. of dimensions. Only 3-D is allowed." << std::endl;
101 size_t numPoints = numX[0]*numX[1]*numX[2];
102 size_t numX0xnumX1 = numX[0]*numX[1];
103 size_t XYZIndex, XYIndex;
106 for (
size_t iZ=0; iZ<numX[2]; iZ++) {
107 XYZIndex = iZ*numX0xnumX1;
110 for (
size_t iY=0; iY<numX[1]; iY++) {
111 XYIndex = iY*numX[0];
114 for (
size_t iX=0; iX<numX[0]; iX++) {
115 inputField[XYZIndex+XYIndex+iX] = coeff*Y*
Z;
121 for (
size_t iZ=0; iZ<numX[2]; iZ++) {
122 XYZIndex = iZ*numX0xnumX1;
125 for (
size_t iY=0; iY<numX[1]; iY++) {
126 XYIndex = iY*numX[0];
128 for (
size_t iX=0; iX<numX[0]; iX++) {
130 inputField[numPoints+XYZIndex+XYIndex+iX] = coeff*X*
Z;
137 for (
size_t iZ=0; iZ<numX[2]; iZ++) {
138 XYZIndex = iZ*numX0xnumX1;
140 for (
size_t iY=0; iY<numX[1]; iY++) {
141 XYIndex = iY*numX[0];
144 for (
size_t iX=0; iX<numX[0]; iX++) {
146 inputField[twoxnumPoints+XYZIndex+XYIndex+iX] = coeff*X*
Y;
152 std::cout <<
"Invalid no. of dimensions. Only 3-D is allowed." << std::endl;
172 double Xsq, Ysq, Zsq;
174 size_t numPoints = numX[0]*numX[1]*numX[2];
175 size_t numX0xnumX1 = numX[0]*numX[1];
176 size_t XYZIndex, XYIndex;
180 for (
int iDim=0; iDim<numDim; iDim++) {
181 deltaXsq[iDim] = deltaX[iDim]*deltaX[iDim];
185 for (
size_t iZ=0; iZ<numX[2]; iZ++) {
186 XYZIndex = iZ*numX0xnumX1;
187 Zsq = iZ*iZ*deltaXsq[2];
189 for (
size_t iY=0; iY<numX[1]; iY++) {
190 XYIndex = iY*numX[0];
191 Ysq = iY*iY*deltaXsq[1];
193 for (
size_t iX=0; iX<numX[0]; iX++) {
194 inputField[XYZIndex+XYIndex+iX] = coeff*iX*deltaX[0]*Ysq*Zsq;
200 for (
size_t iZ=0; iZ<numX[2]; iZ++) {
201 XYZIndex = iZ*numX0xnumX1;
202 Zsq = iZ*iZ*deltaXsq[2];
204 for (
size_t iY=0; iY<numX[1]; iY++) {
205 XYIndex = iY*numX[0];
208 for (
size_t iX=0; iX<numX[0]; iX++) {
209 Xsq = iX*iX*deltaXsq[0];
210 inputField[numPoints+XYZIndex+XYIndex+iX] = coeff*Xsq*Y*Zsq;
217 for (
size_t iZ=0; iZ<numX[2]; iZ++) {
218 XYZIndex = iZ*numX0xnumX1;
221 for (
size_t iY=0; iY<numX[1]; iY++) {
222 XYIndex = iY*numX[0];
223 Ysq = iY*iY*deltaXsq[1];
225 for (
size_t iX=0; iX<numX[0]; iX++) {
226 Xsq = iX*iX*deltaXsq[0];
227 inputField[twoxnumPoints+XYZIndex+XYIndex+iX] = coeff*Xsq*Ysq*
Z;
233 std::cout <<
"Invalid no. of dimensions. Only 3-D is allowed." << std::endl;
253 double C0[3] = { 3.0, -7.0, 1.0};
254 double C1[3] = {-4.0, 9.0, 6.0};
255 double C2[3] = { 5.0, 8.0, 2.0};
257 size_t numPoints = numX[0]*numX[1]*numX[2];
258 size_t numX0xnumX1 = numX[0]*numX[1];
259 size_t XYZIndex, XYIndex;
262 curlComp[0] = C2[1]-C1[2];
263 curlComp[1] = C0[2]-C2[0];
264 curlComp[2] = C1[0]-C0[1];
267 for (
size_t iZ=0; iZ<numX[2]; iZ++) {
268 XYZIndex = iZ*numX0xnumX1;
271 for (
size_t iY=0; iY<numX[1]; iY++) {
272 XYIndex = iY*numX[0];
275 for (
size_t iX=0; iX<numX[0]; iX++) {
277 inputField[XYZIndex+XYIndex+iX] = C0[0]*X+C0[1]*Y+C0[2]*
Z;
283 for (
size_t iZ=0; iZ<numX[2]; iZ++) {
284 XYZIndex = iZ*numX0xnumX1;
287 for (
size_t iY=0; iY<numX[1]; iY++) {
288 XYIndex = iY*numX[0];
291 for (
size_t iX=0; iX<numX[0]; iX++) {
293 inputField[numPoints+XYZIndex+XYIndex+iX] = C1[0]*X+C1[1]*Y+C1[2]*
Z;
300 for (
size_t iZ=0; iZ<numX[2]; iZ++) {
301 XYZIndex = iZ*numX0xnumX1;
304 for (
size_t iY=0; iY<numX[1]; iY++) {
305 XYIndex = iY*numX[0];
308 for (
size_t iX=0; iX<numX[0]; iX++) {
310 inputField[twoxnumPoints+XYZIndex+XYIndex+iX] = C2[0]*X+C2[1]*Y+C2[2]*
Z;
316 std::cout <<
"Invalid no. of dimensions. Only 3-D is allowed." << std::endl;
325 for (
size_t iPoint=0; iPoint<
numPoints; iPoint++) {
326 inputField[iPoint] = coeff*(1.0+
static_cast<double>(iPoint));
340 int interiorOrder = 2;
345 for (
int iStencil=0; iStencil<sbpXX.
numStencils; iStencil++)
349 bool MaxwellApplyOperator =
true;
356 size_t *numX =
new size_t [numDim];
357 double *lengthX =
new double [numDim];
358 double *deltaX =
new double [numDim];
359 double *recipDeltaX =
new double [numDim];
362 double *inputData = NULL;
363 double *opData = NULL;
367 for (
int iDim=0; iDim<numDim; iDim++) {
368 numX[iDim] = std::pow(2,static_cast<double>(iDim))*2*boundaryDepth+20;
370 deltaX[iDim] = lengthX[iDim]/(numX[iDim]-1);
371 recipDeltaX[iDim] = 1.0/deltaX[iDim];
372 numPoints *= numX[iDim];
374 opInterval[2*iDim] = 1;
375 opInterval[2*iDim+1] = numX[iDim];
386 double *coeff =
new double [numDim+1];
395 &stencilID[(opDir-1)*numPoints], inputData, &opData[(opDir-1)*
numPoints]);
399 for (
int iDim=0; iDim<numDim && MaxwellApplyOperator; iDim++) {
402 for (
int iPoints=0; iPoints<numPoints && MaxwellApplyOperator; iPoints++) {
403 if (std::fabs(recipDeltaX[iDim]*opData[iPoints+iDimxnumPoints]-coeff[iDim]) >
MACHINE_EPS) {
404 MaxwellApplyOperator =
false;
410 serialUnitResults.
UpdateResult(
"Maxwell:TestApplyOperatorAppl", MaxwellApplyOperator);
416 delete [] recipDeltaX;
436 int interiorOrder = 4;
441 for (
int iStencil=0; iStencil<sbpXX.
numStencils; iStencil++)
446 std::vector<bool> MaxwellCurlOperator(numTests,
true);
453 size_t *numX =
new size_t [numDim];
454 double *lengthX =
new double [numDim];
455 double *deltaX =
new double [numDim];
456 double *recipDeltaX =
new double [numDim];
459 double *inputField = NULL;
460 double *outputField = NULL;
463 double *recipDeltaXField = NULL;
466 for (
int iDim=0; iDim<numDim; iDim++) {
467 numX[iDim] = std::pow(2,static_cast<double>(iDim))*2*boundaryDepth+20;
469 deltaX[iDim] = lengthX[iDim]/(numX[iDim]-1);
470 recipDeltaX[iDim] = 1.0/deltaX[iDim];
471 numPoints *= numX[iDim];
473 opInterval[2*iDim] = 1;
474 opInterval[2*iDim+1] = numX[iDim];
477 recipDeltaXField =
new double [numDim*
numPoints];
478 for (
int iDim=0; iDim<numDim; iDim++) {
481 for (
size_t iPoint=0; iPoint<
numPoints; iPoint++) {
482 recipDeltaXField[iDimxnumPoints+iPoint] = recipDeltaX[iDim];
492 inputField =
new double [numDim*
numPoints];
493 outputField =
new double [numDim*
numPoints];
496 double constComp[3] = {0.0, 1.0, 2.0};
501 numPoints, opInterval, stencilID,
502 sbpXX, recipDeltaXField, inputField, outputField);
505 for (
int iDim=0; iDim<numDim && MaxwellCurlOperator[0]; iDim++) {
508 for (
size_t iPoint=0; iPoint<numPoints && MaxwellCurlOperator[0]; iPoint++) {
509 if (std::fabs(outputField[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
510 MaxwellCurlOperator[0] =
false;
515 serialUnitResults.
UpdateResult(
"Maxwell:TestCurlOperator:Case1", MaxwellCurlOperator[0]);
517 delete [] inputField;
518 delete [] outputField;
537 inputField =
new double [numDim*
numPoints];
538 outputField =
new double [numDim*
numPoints];
545 numPoints, opInterval, stencilID,
546 sbpXX, recipDeltaXField, inputField, outputField);
549 for (
int iDim=0; iDim<numDim && MaxwellCurlOperator[1]; iDim++) {
552 for (
size_t iPoint=0; iPoint<numPoints && MaxwellCurlOperator[1]; iPoint++) {
553 if (std::fabs(outputField[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
554 MaxwellCurlOperator[1] =
false;
559 serialUnitResults.
UpdateResult(
"Maxwell:TestCurlOperator:Case2", MaxwellCurlOperator[1]);
561 delete [] inputField;
562 delete [] outputField;
567 inputField =
new double [numDim*
numPoints];
568 outputField =
new double [numDim*
numPoints];
575 numPoints, opInterval, stencilID,
576 sbpXX, recipDeltaXField, inputField, outputField);
579 for (
int iDim=0; iDim<numDim && MaxwellCurlOperator[2]; iDim++) {
582 for (
size_t iPoint=0; iPoint<numPoints && MaxwellCurlOperator[2]; iPoint++) {
583 if (std::fabs(outputField[iDimxnumPoints+iPoint]-curlComp[iDim]) >
MACHINE_EPS) {
584 MaxwellCurlOperator[2] =
false;
589 serialUnitResults.
UpdateResult(
"Maxwell:TestCurlOperator:Case3", MaxwellCurlOperator[2]);
591 delete [] inputField;
592 delete [] outputField;
599 delete [] recipDeltaX;
603 delete [] recipDeltaXField;
617 int interiorOrder = 4;
622 for (
int iStencil=0; iStencil<sbpXX.
numStencils; iStencil++)
627 std::vector<bool> MaxwellRHS_Bfield(numTests,
true);
634 size_t *numX =
new size_t [numDim];
635 double *lengthX =
new double [numDim];
636 double *deltaX =
new double [numDim];
637 double *recipDeltaX =
new double [numDim];
640 double *inputField = NULL;
641 double *outputField = NULL;
644 double *recipDeltaXField = NULL;
647 for (
int iDim=0; iDim<numDim; iDim++) {
648 numX[iDim] = std::pow(2,static_cast<double>(iDim))*2*boundaryDepth+20;
650 deltaX[iDim] = lengthX[iDim]/(numX[iDim]-1);
651 recipDeltaX[iDim] = 1.0/deltaX[iDim];
652 numPoints *= numX[iDim];
654 opInterval[2*iDim] = 1;
655 opInterval[2*iDim+1] = numX[iDim];
658 recipDeltaXField =
new double [numDim*
numPoints];
659 for (
int iDim=0; iDim<numDim; iDim++) {
662 for (
size_t iPoint=0; iPoint<
numPoints; iPoint++) {
663 recipDeltaXField[iDimxnumPoints+iPoint] = recipDeltaX[iDim];
673 inputField =
new double [numDim*
numPoints];
674 outputField =
new double [numDim*
numPoints];
677 double constComp[3] = {0.0, 1.0, 2.0};
682 numPoints, opInterval, stencilID,
683 sbpXX, recipDeltaXField, inputField, outputField);
686 for (
int iDim=0; iDim<numDim && MaxwellRHS_Bfield[0]; iDim++) {
689 for (
size_t iPoint=0; iPoint<numPoints && MaxwellRHS_Bfield[0]; iPoint++) {
690 if (std::fabs(outputField[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
691 MaxwellRHS_Bfield[0] =
false;
696 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS_Bfield:Case1", MaxwellRHS_Bfield[0]);
698 delete [] inputField;
699 delete [] outputField;
718 inputField =
new double [numDim*
numPoints];
719 outputField =
new double [numDim*
numPoints];
726 numPoints, opInterval, stencilID,
727 sbpXX, recipDeltaXField, inputField, outputField);
730 for (
int iDim=0; iDim<numDim && MaxwellRHS_Bfield[1]; iDim++) {
733 for (
size_t iPoint=0; iPoint<numPoints && MaxwellRHS_Bfield[1]; iPoint++) {
734 if (std::fabs(outputField[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
735 MaxwellRHS_Bfield[1] =
false;
740 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS_Bfield:Case2", MaxwellRHS_Bfield[1]);
742 delete [] inputField;
743 delete [] outputField;
748 inputField =
new double [numDim*
numPoints];
749 outputField =
new double [numDim*
numPoints];
756 numPoints, opInterval, stencilID,
757 sbpXX, recipDeltaXField, inputField, outputField);
760 for (
int iDim=0; iDim<numDim && MaxwellRHS_Bfield[2]; iDim++) {
763 for (
size_t iPoint=0; iPoint<numPoints && MaxwellRHS_Bfield[2]; iPoint++) {
764 if (std::fabs(outputField[iDimxnumPoints+iPoint]+curlComp[iDim]) >
MACHINE_EPS) {
765 MaxwellRHS_Bfield[2] =
false;
770 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS_Bfield:Case3", MaxwellRHS_Bfield[2]);
772 delete [] inputField;
773 delete [] outputField;
780 delete [] recipDeltaX;
784 delete [] recipDeltaXField;
798 int interiorOrder = 4;
803 for (
int iStencil=0; iStencil<sbpXX.
numStencils; iStencil++)
808 std::vector<bool> MaxwellRHS_Dfield(numTests,
true);
815 size_t *numX =
new size_t [numDim];
816 double *lengthX =
new double [numDim];
817 double *deltaX =
new double [numDim];
818 double *recipDeltaX =
new double [numDim];
821 double *inputField = NULL;
823 double *outputField = NULL;
826 double *recipDeltaXField = NULL;
829 for (
int iDim=0; iDim<numDim; iDim++) {
830 numX[iDim] = std::pow(2,static_cast<double>(iDim))*2*boundaryDepth+20;
832 deltaX[iDim] = lengthX[iDim]/(numX[iDim]-1);
833 recipDeltaX[iDim] = 1.0/deltaX[iDim];
834 numPoints *= numX[iDim];
836 opInterval[2*iDim] = 1;
837 opInterval[2*iDim+1] = numX[iDim];
840 recipDeltaXField =
new double [numDim*
numPoints];
841 for (
int iDim=0; iDim<numDim; iDim++) {
844 for (
size_t iPoint=0; iPoint<
numPoints; iPoint++) {
845 recipDeltaXField[iDimxnumPoints+iPoint] = recipDeltaX[iDim];
855 inputField =
new double [numDim*
numPoints];
857 outputField =
new double [numDim*
numPoints];
860 double constComp1[3] = {0.0, 1.0, 2.0};
863 double constCompJ1[3] = {0.0, 0.0, 0.0};
868 numPoints, opInterval, stencilID,
869 sbpXX, recipDeltaXField, inputField, J, outputField);
872 for (
int iDim=0; iDim<numDim && MaxwellRHS_Dfield[0]; iDim++) {
875 for (
size_t iPoint=0; iPoint<numPoints && MaxwellRHS_Dfield[0]; iPoint++) {
876 if (std::fabs(outputField[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
877 MaxwellRHS_Dfield[0] =
false;
882 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS_Dfield:Case1", MaxwellRHS_Dfield[0]);
884 delete [] inputField;
886 delete [] outputField;
905 inputField =
new double [numDim*
numPoints];
907 outputField =
new double [numDim*
numPoints];
912 double constCompJ2[3] = {0.0, 0.0, 0.0};
917 numPoints, opInterval, stencilID,
918 sbpXX, recipDeltaXField, inputField, J, outputField);
921 for (
int iDim=0; iDim<numDim && MaxwellRHS_Dfield[1]; iDim++) {
924 for (
size_t iPoint=0; iPoint<numPoints && MaxwellRHS_Dfield[1]; iPoint++) {
925 if (std::fabs(outputField[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
926 MaxwellRHS_Dfield[1] =
false;
931 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS_Dfield:Case2", MaxwellRHS_Dfield[1]);
933 delete [] inputField;
935 delete [] outputField;
940 inputField =
new double [numDim*
numPoints];
942 outputField =
new double [numDim*
numPoints];
947 double constCompJ3[3] = {0.0, 0.0, 0.0};
952 numPoints, opInterval, stencilID,
953 sbpXX, recipDeltaXField, inputField, J, outputField);
956 for (
int iDim=0; iDim<numDim && MaxwellRHS_Dfield[2]; iDim++) {
959 for (
size_t iPoint=0; iPoint<numPoints && MaxwellRHS_Dfield[2]; iPoint++) {
960 if (std::fabs(outputField[iDimxnumPoints+iPoint]-curlComp3[iDim]) >
MACHINE_EPS) {
961 MaxwellRHS_Dfield[2] =
false;
966 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS_Dfield:Case3", MaxwellRHS_Dfield[2]);
968 delete [] inputField;
970 delete [] outputField;
974 inputField =
new double [numDim*
numPoints];
976 outputField =
new double [numDim*
numPoints];
984 numPoints, opInterval, stencilID,
985 sbpXX, recipDeltaXField, inputField, J, outputField);
988 for (
int iDim=0; iDim<numDim && MaxwellRHS_Dfield[3]; iDim++) {
991 for (
size_t iPoint=0; iPoint<numPoints && MaxwellRHS_Dfield[3]; iPoint++) {
992 if (std::fabs(outputField[iDimxnumPoints+iPoint]+J[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
993 MaxwellRHS_Dfield[3] =
false;
998 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS_Dfield:Case4", MaxwellRHS_Dfield[3]);
1000 delete [] inputField;
1002 delete [] outputField;
1006 double curlComp5[3];
1007 inputField =
new double [numDim*
numPoints];
1009 outputField =
new double [numDim*
numPoints];
1014 double constCompJ5[3] = {-1.0, -2.0, 3.0};
1019 numPoints, opInterval, stencilID,
1020 sbpXX, recipDeltaXField, inputField, J, outputField);
1023 for (
int iDim=0; iDim<numDim && MaxwellRHS_Dfield[4]; iDim++) {
1026 for (
size_t iPoint=0; iPoint<numPoints && MaxwellRHS_Dfield[4]; iPoint++) {
1027 if (std::fabs(outputField[iDimxnumPoints+iPoint]-curlComp5[iDim]+J[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1028 MaxwellRHS_Dfield[4] =
false;
1033 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS_Dfield:Case5", MaxwellRHS_Dfield[4]);
1035 delete [] inputField;
1037 delete [] outputField;
1044 delete [] recipDeltaX;
1048 delete [] recipDeltaXField;
1067 size_t *numX =
new size_t [numDim];
1070 double *epsMu = NULL;
1071 double *recipEpsMu = NULL;
1075 std::vector<bool> MaxwellComputeRecipEpsMu(numTests,
true);
1078 for (
int iDim=0; iDim<numDim; iDim++) {
1079 numX[iDim] = 3+iDim;
1080 numPoints *= numX[iDim];
1082 opInterval[2*iDim] = 1;
1083 opInterval[2*iDim+1] = numX[iDim];
1101 for (
size_t iPoint=0; iPoint<twoxnumPoints && MaxwellComputeRecipEpsMu[0]; iPoint++) {
1102 if (std::fabs(epsMu[iPoint]*recipEpsMu[iPoint]-1.0) >
MACHINE_EPS) {
1103 MaxwellComputeRecipEpsMu[0] =
false;
1107 serialUnitResults.
UpdateResult(
"Maxwell:TestComputeRecipEpsMu:Case1", MaxwellComputeRecipEpsMu[0]);
1110 delete [] recipEpsMu;
1125 for (
size_t iPoint=0; iPoint<twoxnumPoints && MaxwellComputeRecipEpsMu[1]; iPoint++) {
1126 if (std::fabs(epsMu[iPoint]*recipEpsMu[iPoint]-1.0) >
MACHINE_EPS) {
1127 MaxwellComputeRecipEpsMu[1] =
false;
1131 serialUnitResults.
UpdateResult(
"Maxwell:TestComputeRecipEpsMu:Case2", MaxwellComputeRecipEpsMu[1]);
1134 delete [] recipEpsMu;
1158 size_t *numX =
new size_t [numDim];
1161 double *epsMu = NULL;
1162 double *recipEpsMu = NULL;
1164 double *Efield_i = NULL;
1165 double *Dfield = NULL;
1166 double *Efield_f = NULL;
1168 double *Bfield_i = NULL;
1169 double *Hfield = NULL;
1170 double *Bfield_f = NULL;
1174 std::vector<bool> MaxwellConvertFields(numTests,
true);
1177 for (
int iDim=0; iDim<numDim; iDim++) {
1178 numX[iDim] = 3+iDim;
1179 numPoints *= numX[iDim];
1181 opInterval[2*iDim] = 1;
1182 opInterval[2*iDim+1] = numX[iDim];
1190 Efield_i =
new double [numDim*
numPoints];
1192 Efield_f =
new double [numDim*
numPoints];
1194 Bfield_i =
new double [numDim*
numPoints];
1196 Bfield_f =
new double [numDim*
numPoints];
1204 double constCompEi[3] = {1.2, 2.6, 3.8};
1207 double constCompBi[3] = {0.6, 4.4, 8.9};
1214 for (
int iDim=0; iDim<numDim && MaxwellConvertFields[0]; iDim++) {
1217 for (
size_t iPoint=0; iPoint<numPoints && MaxwellConvertFields[0]; iPoint++) {
1218 if (std::fabs(Dfield[iDimxnumPoints+iPoint]-epsMu[iPoint]*Efield_i[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1219 MaxwellConvertFields[0] =
false;
1224 serialUnitResults.
UpdateResult(
"Maxwell:TestConvertFields:Case1", MaxwellConvertFields[0]);
1230 for (
int iDim=0; iDim<numDim && MaxwellConvertFields[1]; iDim++) {
1233 for (
size_t iPoint=0; iPoint<numPoints && MaxwellConvertFields[1]; iPoint++) {
1234 if (std::fabs(Efield_f[iDimxnumPoints+iPoint]-recipEpsMu[iPoint]*Dfield[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1235 MaxwellConvertFields[1] =
false;
1240 serialUnitResults.
UpdateResult(
"Maxwell:TestConvertFields:Case2", MaxwellConvertFields[1]);
1243 for (
int iDim=0; iDim<numDim && MaxwellConvertFields[2]; iDim++) {
1246 for (
size_t iPoint=0; iPoint<numPoints && MaxwellConvertFields[2]; iPoint++) {
1247 if (std::fabs(Efield_f[iDimxnumPoints+iPoint]-Efield_i[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1248 MaxwellConvertFields[2] =
false;
1253 serialUnitResults.
UpdateResult(
"Maxwell:TestConvertFields:Case1/2", MaxwellConvertFields[2]);
1259 for (
int iDim=0; iDim<numDim && MaxwellConvertFields[3]; iDim++) {
1262 for (
size_t iPoint=0; iPoint<numPoints && MaxwellConvertFields[3]; iPoint++) {
1263 if (std::fabs(Hfield[iDimxnumPoints+iPoint]-recipEpsMu[numPoints+iPoint]*Bfield_i[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1264 MaxwellConvertFields[3] =
false;
1269 serialUnitResults.
UpdateResult(
"Maxwell:TestConvertFields:Case3", MaxwellConvertFields[3]);
1275 for (
int iDim=0; iDim<numDim && MaxwellConvertFields[4]; iDim++) {
1278 for (
size_t iPoint=0; iPoint<numPoints && MaxwellConvertFields[4]; iPoint++) {
1279 if (std::fabs(Bfield_f[iDimxnumPoints+iPoint]-epsMu[numPoints+iPoint]*Hfield[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1280 MaxwellConvertFields[4] =
false;
1285 serialUnitResults.
UpdateResult(
"Maxwell:TestConvertFields:Case4", MaxwellConvertFields[4]);
1288 for (
int iDim=0; iDim<numDim && MaxwellConvertFields[5]; iDim++) {
1291 for (
size_t iPoint=0; iPoint<numPoints && MaxwellConvertFields[5]; iPoint++) {
1292 if (std::fabs(Bfield_f[iDimxnumPoints+iPoint]-Bfield_i[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1293 MaxwellConvertFields[5] =
false;
1298 serialUnitResults.
UpdateResult(
"Maxwell:TestConvertFields:Case3/4", MaxwellConvertFields[5]);
1301 delete [] recipEpsMu;
1316 Efield_i =
new double [numDim*
numPoints];
1318 Efield_f =
new double [numDim*
numPoints];
1320 Bfield_i =
new double [numDim*
numPoints];
1322 Bfield_f =
new double [numDim*
numPoints];
1330 double *deltaX =
new double [numDim];
1331 for (
int iDim=0; iDim<numDim; iDim++) {
1332 deltaX[iDim] = 0.1*(1.0+
static_cast<double>(iDim));
1342 for (
int iDim=0; iDim<numDim && MaxwellConvertFields[6]; iDim++) {
1345 for (
size_t iPoint=0; iPoint<numPoints && MaxwellConvertFields[6]; iPoint++) {
1346 if (std::fabs(Dfield[iDimxnumPoints+iPoint]-epsMu[iPoint]*Efield_i[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1347 MaxwellConvertFields[6] =
false;
1352 serialUnitResults.
UpdateResult(
"Maxwell:TestConvertFields:Case5", MaxwellConvertFields[6]);
1358 for (
int iDim=0; iDim<numDim && MaxwellConvertFields[7]; iDim++) {
1361 for (
size_t iPoint=0; iPoint<numPoints && MaxwellConvertFields[7]; iPoint++) {
1362 if (std::fabs(Efield_f[iDimxnumPoints+iPoint]-recipEpsMu[iPoint]*Dfield[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1363 MaxwellConvertFields[7] =
false;
1368 serialUnitResults.
UpdateResult(
"Maxwell:TestConvertFields:Case6", MaxwellConvertFields[7]);
1371 for (
int iDim=0; iDim<numDim && MaxwellConvertFields[8]; iDim++) {
1374 for (
size_t iPoint=0; iPoint<numPoints && MaxwellConvertFields[8]; iPoint++) {
1375 if (std::fabs(Efield_f[iDimxnumPoints+iPoint]-Efield_i[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1376 MaxwellConvertFields[8] =
false;
1381 serialUnitResults.
UpdateResult(
"Maxwell:TestConvertFields:Case5/6", MaxwellConvertFields[8]);
1387 for (
int iDim=0; iDim<numDim && MaxwellConvertFields[9]; iDim++) {
1390 for (
size_t iPoint=0; iPoint<numPoints && MaxwellConvertFields[9]; iPoint++) {
1391 if (std::fabs(Hfield[iDimxnumPoints+iPoint]-recipEpsMu[numPoints+iPoint]*Bfield_i[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1392 MaxwellConvertFields[9] =
false;
1397 serialUnitResults.
UpdateResult(
"Maxwell:TestConvertFields:Case7", MaxwellConvertFields[9]);
1403 for (
int iDim=0; iDim<numDim && MaxwellConvertFields[10]; iDim++) {
1406 for (
size_t iPoint=0; iPoint<numPoints && MaxwellConvertFields[10]; iPoint++) {
1407 if (std::fabs(Bfield_f[iDimxnumPoints+iPoint]-epsMu[numPoints+iPoint]*Hfield[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1408 MaxwellConvertFields[10] =
false;
1413 serialUnitResults.
UpdateResult(
"Maxwell:TestConvertFields:Case8", MaxwellConvertFields[10]);
1416 for (
int iDim=0; iDim<numDim && MaxwellConvertFields[11]; iDim++) {
1419 for (
size_t iPoint=0; iPoint<numPoints && MaxwellConvertFields[11]; iPoint++) {
1420 if (std::fabs(Bfield_f[iDimxnumPoints+iPoint]-Bfield_i[iDimxnumPoints+iPoint]) >
MACHINE_EPS) {
1421 MaxwellConvertFields[11] =
false;
1426 serialUnitResults.
UpdateResult(
"Maxwell:TestConvertFields:Case7/8", MaxwellConvertFields[11]);
1429 delete [] recipEpsMu;
1452 double *bufferVar = NULL;
1453 double *value = NULL;
1457 std::vector<bool> MaxwellDirichletBC(numTests,
true);
1461 numPointsBuffer = 120;
1462 numPointsIndices = 60;
1463 std::vector<size_t> bufferIndices1(numPointsIndices, 0);
1465 value =
new double [numDim];
1469 for(
size_t iPoint=0; iPoint<numDimxnumPointsBuffer; iPoint++) {
1470 bufferVar[iPoint] = 0.0;
1474 for(
size_t iPoint=0; iPoint<numPointsIndices; iPoint++) {
1475 bufferIndices1[iPoint] = 60+iPoint;
1479 for(
int iDim=0; iDim<numDim; iDim++) {
1480 value[iDim] = 1.0+
static_cast<double>(iDim);
1484 for(
int iDim=0; iDim<numDim; iDim++) {
1487 MaxwellDirichletBC[0] =
false;
1491 for(
int iDim=0; iDim<numDim; iDim++) {
1495 if(iPoint<60 && bufferVar[iPoint+iDimxnumPointsBuffer]!=0.0)
1496 MaxwellDirichletBC[0] =
false;
1498 if(iPoint>=60 && bufferVar[iPoint+iDimxnumPointsBuffer]!=value[iDim])
1499 MaxwellDirichletBC[0] =
false;
1503 serialUnitResults.
UpdateResult(
"Maxwell:TestDirichletBC:Case1", MaxwellDirichletBC[0]);
1505 delete [] bufferVar;
1510 numPointsBuffer = 120;
1511 numPointsIndices = 60;
1512 std::vector<size_t> bufferIndices2(numPointsIndices, 0);
1514 value =
new double [numDim];
1518 for(
size_t iPoint=0; iPoint<numDimxnumPointsBuffer; iPoint++) {
1519 bufferVar[iPoint] = 0.0;
1523 for(
size_t iPoint=0; iPoint<numPointsIndices; iPoint++) {
1524 bufferIndices2[iPoint] = 2*iPoint+1;
1528 for(
int iDim=0; iDim<numDim; iDim++) {
1529 value[iDim] = 1.0+
static_cast<double>(iDim);
1533 for(
int iDim=0; iDim<numDim; iDim++) {
1536 MaxwellDirichletBC[1] =
false;
1540 for(
int iDim=0; iDim<numDim; iDim++) {
1545 if(bufferVar[iPoint+iDimxnumPointsBuffer]!=value[iDim])
1546 MaxwellDirichletBC[1] =
false;
1548 if(bufferVar[iPoint+iDimxnumPointsBuffer]!=0.0)
1549 MaxwellDirichletBC[1] =
false;
1554 serialUnitResults.
UpdateResult(
"Maxwell:TestDirichletBC:Case2", MaxwellDirichletBC[1]);
1556 delete [] bufferVar;
1597 int interiorOrder = 2;
1602 std::vector<int> haloDepths(2*numDim,boundaryDepth);
1603 std::vector<int> boundaryDepths(2*numDim,boundaryDepth);
1609 std::vector<double> realGridExtent;
1610 realGridExtent.resize(6,0.0);
1611 realGridExtent[1] = 1.0;
1612 realGridExtent[3] = 1.0;
1613 realGridExtent[5] = 1.0;
1615 std::vector<size_t> numNodes;
1622 std::vector<double> dX;
1624 for(
int iDim = 0;iDim < 3;iDim++)
1625 dX[iDim] = (realGridExtent[2*iDim+1] - realGridExtent[2*iDim])/
static_cast<double>(numNodes[iDim] - 1);
1633 std::vector<size_t> extendGrid(2*numDim,0);
1635 std::vector<bool> isPeriodic(numDim,
false);
1636 std::vector<int> periodicDirs(numDim,0);
1637 size_t numPointsPart = partitionInterval.NNodes();
1638 for(
int iDim = 0;iDim < numDim; iDim++){
1639 if(isPeriodic[iDim]){
1640 extendGrid[2*iDim] = haloDepths[2*iDim];
1641 extendGrid[2*iDim+1] = haloDepths[2*iDim+1];
1643 if(partitionInterval[iDim].first != 0)
1644 extendGrid[2*iDim] = haloDepths[2*iDim];
1645 if(partitionInterval[iDim].second != (numNodes[iDim]-1))
1646 extendGrid[2*iDim + 1] = haloDepths[2*iDim+1];
1649 std::cout <<
"Dimension Extensions: (";
1651 std::cout <<
")" << std::endl;
1654 testHalo.SetPeriodicDirs(periodicDirs);
1668 state_t testState2(testState);
1675 std::vector<double> constE(3, 1.0);
1676 std::vector<double> constB(3, 1.0);
1677 std::vector<double> constJ(3, 1.0);
1678 double constEps =
EPS0*1e12;
1679 double constMu =
MU0*1e6;
1682 &constJ[0], constEps, constMu,
false);
1685 double CFLValue = 1.0;
1690 bool MaxwellRHSInitialize =
true;
1691 if(testRHS.Initialize(testGrid,testState,paramState,sbpXX))
1693 MaxwellRHSInitialize =
false;
1695 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:Initialize", MaxwellRHSInitialize);
1708 const std::vector<double *> &stateBuffers(testRHS.StateBuffers());
1709 const std::vector<double *> &rhsBuffers(testRHS.RHSBuffers());
1712 bool MaxwellRHSSetup =
true;
1713 if(testRHS.SetupRHS(testGrid,testState,testState2,myThreadID))
1715 MaxwellRHSSetup =
false;
1717 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:Setup:Call1", MaxwellRHSSetup);
1720 std::vector<std::string> stateFieldNames;
1721 stateFieldNames.push_back(
"Efield");
1722 stateFieldNames.push_back(
"Bfield");
1723 stateFieldNames.push_back(
"Dfield");
1724 stateFieldNames.push_back(
"Hfield");
1725 stateFieldNames.push_back(
"J");
1726 stateFieldNames.push_back(
"epsilonMu");
1728 bool MaxwellRHSSetupStateBuffers =
true;
1729 if(stateBuffers.size() != stateFieldNames.size())
1731 MaxwellRHSSetupStateBuffers =
false;
1734 std::vector<double *>::const_iterator stateBuffersIt = stateBuffers.begin();
1735 std::vector<std::string>::iterator stateFieldNamesIt = stateFieldNames.begin();
1736 while(stateBuffersIt != stateBuffers.end()) {
1737 double *stateBuffer = *stateBuffersIt++;
1738 std::string &stateFieldName(*stateFieldNamesIt++);
1740 if(stateFieldName.compare(
"Efield")==0 || stateFieldName.compare(
"Hfield")==0) {
1741 if(testState.
GetFieldBuffer<
double>(stateFieldName) != stateBuffer) {
1742 MaxwellRHSSetupStateBuffers =
false;
1746 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:Setup:Call1:CheckStateBuffers", MaxwellRHSSetupStateBuffers);
1749 std::vector<std::string> rhsFieldNames;
1750 rhsFieldNames.push_back(
"Efield");
1751 rhsFieldNames.push_back(
"Hfield");
1753 bool MaxwellRHSSetupRHSBuffers =
true;
1754 if(rhsBuffers.size() != rhsFieldNames.size())
1756 MaxwellRHSSetupRHSBuffers =
false;
1759 std::vector<double *>::const_iterator rhsBuffersIt = rhsBuffers.begin();
1760 std::vector<std::string>::iterator rhsFieldNamesIt = rhsFieldNames.begin();
1761 while(rhsBuffersIt != rhsBuffers.end()) {
1762 double *rhsBuffer = *rhsBuffersIt++;
1763 std::string &rhsFieldName(*rhsFieldNamesIt++);
1766 MaxwellRHSSetupRHSBuffers =
false;
1768 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:Setup:Call1:CheckRHSBuffers", MaxwellRHSSetupRHSBuffers);
1771 bool MaxwellRHSSetup2 =
true;
1772 if(testRHS.SetupRHS(testGrid,testState2,testState,myThreadID))
1774 MaxwellRHSSetup2 =
false;
1776 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:Setup:Call2", MaxwellRHSSetup2);
1779 std::vector<std::string> stateFieldNames2;
1780 stateFieldNames2.push_back(
"Efield");
1781 stateFieldNames2.push_back(
"Bfield");
1782 stateFieldNames2.push_back(
"Dfield");
1783 stateFieldNames2.push_back(
"Hfield");
1784 stateFieldNames2.push_back(
"J");
1785 stateFieldNames2.push_back(
"epsilonMu");
1787 bool MaxwellRHSSetupStateBuffers2 =
true;
1788 if(stateBuffers.size() != stateFieldNames2.size())
1790 MaxwellRHSSetupStateBuffers2 =
false;
1793 std::vector<double *>::const_iterator stateBuffersIt2 = stateBuffers.begin();
1794 std::vector<std::string>::iterator stateFieldNamesIt2 = stateFieldNames2.begin();
1795 while(stateBuffersIt2 != stateBuffers.end()) {
1796 double *stateBuffer2 = *stateBuffersIt2++;
1797 std::string &stateFieldName2(*stateFieldNamesIt2++);
1799 if(stateFieldName2.compare(
"Efield")==0 || stateFieldName2.compare(
"Hfield")==0) {
1800 if(testState2.
GetFieldBuffer<
double>(stateFieldName2) != stateBuffer2) {
1801 MaxwellRHSSetupStateBuffers2 =
false;
1805 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:Setup:Call2:CheckStateBuffers", MaxwellRHSSetupStateBuffers2);
1808 std::vector<std::string> rhsFieldNames2;
1809 rhsFieldNames2.push_back(
"Efield");
1810 rhsFieldNames2.push_back(
"Hfield");
1812 bool MaxwellRHSSetupRHSBuffers2 =
true;
1813 if(rhsBuffers.size() != rhsFieldNames2.size())
1815 MaxwellRHSSetupRHSBuffers2 =
false;
1818 std::vector<double *>::const_iterator rhsBuffersIt2 = rhsBuffers.begin();
1819 std::vector<std::string>::iterator rhsFieldNamesIt2 = rhsFieldNames2.begin();
1820 while(rhsBuffersIt2 != rhsBuffers.end()) {
1821 double *rhsBuffer2 = *rhsBuffersIt2++;
1822 std::string &rhsFieldName2(*rhsFieldNamesIt2++);
1824 if(testState.
GetFieldBuffer<
double>(rhsFieldName2) != rhsBuffer2)
1825 MaxwellRHSSetupRHSBuffers2 =
false;
1827 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:Setup:Call2:CheckRHSBuffers", MaxwellRHSSetupRHSBuffers2);
1832 std::vector<bool> MaxwellRHSMaxwellRHS(numTests,
true);
1837 if(testRHS.SetupRHS(testGrid,testState,testState2,myThreadID))
1839 std::cout <<
"SetupRHS failed." << std::endl;
1840 MaxwellRHSMaxwellRHS[0] =
false;
1843 std::vector<double *>::const_iterator rhsIt = rhsBuffers.begin();
1844 while(rhsIt != rhsBuffers.end()) {
1845 double *rhsBuffer = *rhsIt++;
1847 rhsBuffer[iPoint] = 0.0;
1851 if(testRHS.MaxwellRHS(myThreadID))
1853 std::cout <<
"MaxwellRHS failed." << std::endl;
1854 MaxwellRHSMaxwellRHS[0] =
false;
1860 double *dE = rhsBuffers[0];
1861 double *dH = rhsBuffers[1];
1864 for(
int iDim=0; iDim<numDim; iDim++) {
1867 if(std::fabs(dH[iDimxnumPointsBuffer+iPoint]) >
MACHINE_EPS) {
1869 MaxwellRHSMaxwellRHS[0] =
false;
1870 std::cout <<
"H(" << iDim <<
"):" << dH[iDimxnumPointsBuffer+iPoint] << std::endl;
1873 if(std::fabs(dE[iDimxnumPointsBuffer+iPoint]+J[iDimxnumPointsBuffer+iPoint]/epsMu[iPoint]) >
MACHINE_EPS) {
1875 MaxwellRHSMaxwellRHS[0] =
false;
1876 std::cout <<
"E(" << iDim <<
"):" << dE[iDimxnumPointsBuffer+iPoint] << std::endl;
1880 std::cout << nFailE <<
"/" << numPointsBuffer <<
" E failures in dimension " << iDim << std::endl;
1883 std::cout << nFailH <<
"/" << numPointsBuffer <<
" H failures in dimension " << iDim << std::endl;
1889 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:Execution:MaxwellRHS:Case1", MaxwellRHSMaxwellRHS[0]);
1896 double curlCompE2[3];
1901 double curlCompB2[3];
1904 double curlCompJ2[3];
1909 D[iPoint] = epsMu[iPoint]*E[iPoint];
1911 D[iPoint+twoxnumPointsBuffer] = epsMu[iPoint]*E[iPoint+twoxnumPointsBuffer];
1915 H[iPoint+twoxnumPointsBuffer] = B[iPoint+twoxnumPointsBuffer]/epsMu[iPoint+
numPointsBuffer];
1919 if(testRHS.SetupRHS(testGrid,testState,testState2,myThreadID))
1921 MaxwellRHSMaxwellRHS[1] =
false;
1925 if(testRHS.MaxwellRHS(myThreadID))
1927 MaxwellRHSMaxwellRHS[1] =
false;
1931 for(
int iDim=0; iDim<numDim; iDim++) {
1934 if(std::fabs(dH[iDimxnumPointsBuffer+iPoint]+curlCompE2[iDim]/epsMu[iPoint+numPointsBuffer]) >
MACHINE_EPS)
1935 MaxwellRHSMaxwellRHS[1] =
false;
1937 double epsxMu = epsMu[iPoint]*epsMu[numPointsBuffer+iPoint];
1938 if(std::fabs(dE[iDimxnumPointsBuffer+iPoint]+J[iDimxnumPointsBuffer+iPoint]/epsMu[iPoint]-curlCompB2[iDim]/epsxMu) >
MACHINE_EPS)
1939 MaxwellRHSMaxwellRHS[1] =
false;
1943 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:Execution:MaxwellRHS:Case2", MaxwellRHSMaxwellRHS[1]);
1947 bool MaxwellRHSRHS =
true;
1948 if(testRHS.RHS(myThreadID))
1950 MaxwellRHSRHS =
false;
1952 serialUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:Execution:RHS", MaxwellRHSRHS);
1969 const std::string testName(
"TestMaxwellRHSTimeIntegrate");
1970 testGlobal.
Init(testName, testComm);
1971 testGlobal.
StdOut(
"Entering "+testName+
"\n");
1978 std::ostringstream messageStream;
1980 int opInteriorOrder = 4;
1983 std::vector<double> physicalExtent(6,0.2);
1984 physicalExtent[0] = 0.0;
1985 physicalExtent[2] = 0.0;
1986 physicalExtent[4] = 0.0;
1989 bool MaxwellRHSTimeIntegrateGridHaloOpSetup =
true;
1991 testComm, &messageStream))
1993 MaxwellRHSTimeIntegrateGridHaloOpSetup =
false;
1996 MaxwellRHSTimeIntegrateGridHaloOpSetup =
CheckResult(MaxwellRHSTimeIntegrateGridHaloOpSetup,
1998 parallelUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:TimeIntegration:GridHaloOpSetup", MaxwellRHSTimeIntegrateGridHaloOpSetup);
2000 testGlobal.
StdOut(messageStream.str());
2007 bool MaxwellRHSTimeIntegrateStateParamsSetup =
true;
2010 MaxwellRHSTimeIntegrateStateParamsSetup =
false;
2013 MaxwellRHSTimeIntegrateStateParamsSetup =
CheckResult(MaxwellRHSTimeIntegrateStateParamsSetup, testComm);
2014 parallelUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:TimeIntegration:StateParamsSetup", MaxwellRHSTimeIntegrateStateParamsSetup);
2016 testGlobal.
StdOut(
"Creating states...\n");
2018 state_t testRHSState(testState);
2035 double *epsilonMuPtr = testState.
GetFieldBuffer<
double>(
"epsilonMu");
2038 std::vector<double> EfieldAll(3, 0.0);
2039 std::vector<double> BfieldAll(3, 0.0);
2040 std::vector<double> JAll(3, 0.0);
2041 double epsilonAll = -1.0;
2042 double muAll = -1.0;
2044 testGlobal.
StdOut(
"Initializing states...\n");
2045 bool MaxwellRHSTimeIntegrateStateInitEverywhere =
true;
2048 MaxwellRHSTimeIntegrateStateInitEverywhere =
false;
2050 MaxwellRHSTimeIntegrateStateInitEverywhere =
CheckResult(MaxwellRHSTimeIntegrateStateInitEverywhere, testComm);
2051 parallelUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:TimeIntegration:StateInit:Everywhere", MaxwellRHSTimeIntegrateStateInitEverywhere);
2056 if(std::fabs(EfieldPtr[iPoint] -EfieldAll[0]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2057 if(std::fabs(EfieldPtr[iPoint+numPointsBuffer] -EfieldAll[1]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2058 if(std::fabs(EfieldPtr[iPoint+twoxnumPointsBuffer]-EfieldAll[2]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2060 if(std::fabs(BfieldPtr[iPoint] -BfieldAll[0]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2061 if(std::fabs(BfieldPtr[iPoint+numPointsBuffer] -BfieldAll[1]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2062 if(std::fabs(BfieldPtr[iPoint+twoxnumPointsBuffer]-BfieldAll[2]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2064 if(std::fabs(DfieldPtr[iPoint] -epsilonAll*EfieldAll[0]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2065 if(std::fabs(DfieldPtr[iPoint+numPointsBuffer] -epsilonAll*EfieldAll[1]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2066 if(std::fabs(DfieldPtr[iPoint+twoxnumPointsBuffer]-epsilonAll*EfieldAll[2]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2068 if(std::fabs(HfieldPtr[iPoint] -BfieldAll[0]/muAll) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2069 if(std::fabs(HfieldPtr[iPoint+numPointsBuffer] -BfieldAll[1]/muAll) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2070 if(std::fabs(HfieldPtr[iPoint+twoxnumPointsBuffer]-BfieldAll[2]/muAll) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2072 if(std::fabs(JPtr[iPoint] -JAll[0]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2073 if(std::fabs(JPtr[iPoint+numPointsBuffer] -JAll[1]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2074 if(std::fabs(JPtr[iPoint+twoxnumPointsBuffer]-JAll[2]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2076 if(std::fabs(epsilonMuPtr[iPoint]-epsilonAll) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2077 if(std::fabs(epsilonMuPtr[iPoint+numPointsBuffer]-muAll) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitEverywhere =
false; }
2079 MaxwellRHSTimeIntegrateStateInitEverywhere =
CheckResult(MaxwellRHSTimeIntegrateStateInitEverywhere, testComm);
2080 parallelUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:TimeIntegration:StateInit:Everywhere:CheckBuffers", MaxwellRHSTimeIntegrateStateInitEverywhere);
2083 std::vector<double> Efield(3, 1.0); Efield[1] = -2.0; Efield[2] = 3.0;
2084 std::vector<double> Bfield(3, -1.0); Bfield[1] = 2.0; Bfield[2] = -3.0;
2085 std::vector<double> J(3, 4.0); J[1] = -5.0; J[2] = 6.0;
2086 double epsilon =
EPS0;
2089 bool MaxwellRHSTimeIntegrateStateInitLocalPart =
true;
2092 MaxwellRHSTimeIntegrateStateInitLocalPart =
false;
2094 MaxwellRHSTimeIntegrateStateInitLocalPart =
CheckResult(MaxwellRHSTimeIntegrateStateInitLocalPart, testComm);
2095 parallelUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:TimeIntegration:StateInit:LocalPartition", MaxwellRHSTimeIntegrateStateInitLocalPart);
2098 size_t iStart = partitionBufferInterval[0].first;
2099 size_t iEnd = partitionBufferInterval[0].second;
2100 size_t jStart = partitionBufferInterval[1].first;
2101 size_t jEnd = partitionBufferInterval[1].second;
2102 size_t kStart = partitionBufferInterval[2].first;
2103 size_t kEnd = partitionBufferInterval[2].second;
2108 size_t iIndex =
static_cast<size_t>((iPoint%nPlane)%bufferSizes[0]);
2109 size_t jIndex =
static_cast<size_t>(((iPoint%nPlane)-iIndex)/bufferSizes[0]);
2110 size_t kIndex =
static_cast<size_t>((iPoint-jIndex*bufferSizes[0]-iIndex)/nPlane);
2112 if(iIndex<iStart || iIndex>iEnd || jIndex<jStart || jIndex>jEnd || kIndex<kStart || kIndex>kEnd) {
2114 if(std::fabs(EfieldPtr[iPoint] -EfieldAll[0]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2115 if(std::fabs(EfieldPtr[iPoint+numPointsBuffer] -EfieldAll[1]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2116 if(std::fabs(EfieldPtr[iPoint+twoxnumPointsBuffer]-EfieldAll[2]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2118 if(std::fabs(BfieldPtr[iPoint] -BfieldAll[0]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2119 if(std::fabs(BfieldPtr[iPoint+numPointsBuffer] -BfieldAll[1]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2120 if(std::fabs(BfieldPtr[iPoint+twoxnumPointsBuffer]-BfieldAll[2]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2122 if(std::fabs(DfieldPtr[iPoint] -epsilonAll*EfieldAll[0]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2123 if(std::fabs(DfieldPtr[iPoint+numPointsBuffer] -epsilonAll*EfieldAll[1]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2124 if(std::fabs(DfieldPtr[iPoint+twoxnumPointsBuffer]-epsilonAll*EfieldAll[2]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2126 if(std::fabs(HfieldPtr[iPoint] -BfieldAll[0]/muAll) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2127 if(std::fabs(HfieldPtr[iPoint+numPointsBuffer] -BfieldAll[1]/muAll) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2128 if(std::fabs(HfieldPtr[iPoint+twoxnumPointsBuffer]-BfieldAll[2]/muAll) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2130 if(std::fabs(JPtr[iPoint] -JAll[0]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2131 if(std::fabs(JPtr[iPoint+numPointsBuffer] -JAll[1]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2132 if(std::fabs(JPtr[iPoint+twoxnumPointsBuffer]-JAll[2]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2134 if(std::fabs(epsilonMuPtr[iPoint]-epsilonAll) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2135 if(std::fabs(epsilonMuPtr[iPoint+numPointsBuffer]-muAll) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2138 if(std::fabs(EfieldPtr[iPoint] -Efield[0]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2139 if(std::fabs(EfieldPtr[iPoint+numPointsBuffer] -Efield[1]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2140 if(std::fabs(EfieldPtr[iPoint+twoxnumPointsBuffer]-Efield[2]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2142 if(std::fabs(BfieldPtr[iPoint] -Bfield[0]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2143 if(std::fabs(BfieldPtr[iPoint+numPointsBuffer] -Bfield[1]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2144 if(std::fabs(BfieldPtr[iPoint+twoxnumPointsBuffer]-Bfield[2]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2146 if(std::fabs(DfieldPtr[iPoint] -epsilon*Efield[0]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2147 if(std::fabs(DfieldPtr[iPoint+numPointsBuffer] -epsilon*Efield[1]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2148 if(std::fabs(DfieldPtr[iPoint+twoxnumPointsBuffer]-epsilon*Efield[2]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2150 if(std::fabs(HfieldPtr[iPoint] -Bfield[0]/mu) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2151 if(std::fabs(HfieldPtr[iPoint+numPointsBuffer] -Bfield[1]/mu) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2152 if(std::fabs(HfieldPtr[iPoint+twoxnumPointsBuffer]-Bfield[2]/mu) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2154 if(std::fabs(JPtr[iPoint] -J[0]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2155 if(std::fabs(JPtr[iPoint+numPointsBuffer] -J[1]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2156 if(std::fabs(JPtr[iPoint+twoxnumPointsBuffer]-J[2]) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2158 if(std::fabs(epsilonMuPtr[iPoint]-epsilon) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2159 if(std::fabs(epsilonMuPtr[iPoint+numPointsBuffer]-mu) >
MACHINE_EPS) { MaxwellRHSTimeIntegrateStateInitLocalPart =
false; }
2162 MaxwellRHSTimeIntegrateStateInitLocalPart =
CheckResult(MaxwellRHSTimeIntegrateStateInitLocalPart, testComm);
2163 parallelUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:TimeIntegration:StateInit:LocalPartition:CheckBuffers", MaxwellRHSTimeIntegrateStateInitLocalPart);
2247 double CFLValue = 1.0;
2249 bool MaxwellRHSTimeIntegrateParamsInit =
true;
2252 MaxwellRHSTimeIntegrateParamsInit =
false;
2254 MaxwellRHSTimeIntegrateParamsInit =
CheckResult(MaxwellRHSTimeIntegrateParamsInit, testComm);
2255 parallelUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:TimeIntegration:ParamsInit", MaxwellRHSTimeIntegrateParamsInit);
2262 domain_t testDomain;
2265 testDomain.SetNumGrids(1);
2266 testDomain.
SetGrid(0,testGrid);
2267 testDomain.SetGridState(0,testState);
2268 testDomain.SetGridParams(0,paramState);
2269 testDomain.PartitionDomain(0);
2270 testDomain.SetRHS(testRHS);
2272 bool MaxwellRHSTimeIntegrateInitialize =
true;
2273 if(testRHS.Initialize(testGrid,testState,paramState,testOperator))
2275 MaxwellRHSTimeIntegrateInitialize =
false;
2277 MaxwellRHSTimeIntegrateInitialize =
CheckResult(MaxwellRHSTimeIntegrateInitialize, testComm);
2278 parallelUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:TimeIntegration:Initialize", MaxwellRHSTimeIntegrateInitialize);
2285 std::cout <<
"Initialization done." << std::endl;
2287 testGlobal.
StdOut(messageStream.str());
2292 int masterThread = 1;
2295 myThreadID = omp_get_thread_num();
2296 numThreads = omp_get_max_threads();
2297 masterThread = (myThreadID == 0);
2307 std::ostringstream outputFileNameOut;
2308 std::string outputFileNameRoot(
"TestMaxwellRHSTimeIntegrate");
2309 std::string domainName(
"TestDomain");
2310 std::string geometryName(
"TestGeom");
2311 std::string gridName(
"TestGrid");
2314 std::string outputFileDirName(
"OutputFiles_TestMaxwellRHSTimeIntegrate");
2317 testGlobal.
ErrOut(
"ix::sys::CreateDirectory failed.\n");
2323 size_t numStepsMax = 100;
2324 size_t numStepsStatus = 1;
2325 size_t numStepsIO = 1;
2326 bool MaxwellRHSTimeIntegrateTimeAdvance =
true;
2328 for(iStep=0; iStep<numStepsMax; iStep++) {
2330 if(!(iStep%numStepsStatus)) {
2332 messageStream <<
"MaxwellSolver:TestMaxwellRHS:TimeIntegration:TimeAdvance - Step = " 2333 << iStep << std::endl;
2334 testGlobal.
StdOut(messageStream.str(),2);
2340 if(!(iStep%numStepsIO)) {
2342 outputFileNameOut.str(
"");
2343 outputFileNameOut << outputFileDirName <<
"/" << outputFileNameRoot <<
"_tstep" << iStep <<
".h5";
2345 std::string outputFileName(outputFileNameOut.str());
2347 testGrid,testState,paramState,testConfig,messageStream)) {
2348 testGlobal.
ErrOut(
"Maxwell:TestMaxwellRHS:TimeIntegration:TimeAdvance - plascom2::io::hdf5::OutputSingle() failed.\n");
2350 testGlobal.
StdOut(messageStream.str(),3);
2353 testGlobal.
ErrOut(
"Maxwell:TestMaxwellRHS:TimeIntegration:TimeAdvance - WARNING! > HDF5 not enabled. Cannot perform I/O.\n");
2358 testGlobal.
StdOut(
"Advancing domain.\n");
2361 MaxwellRHSTimeIntegrateTimeAdvance =
false;
2365 testGlobal.
StdOut(
"Advance done.\nComputing DV.");
2367 if(!MaxwellRHSTimeIntegrateTimeAdvance)
2370 if(testRHS.ComputeDV(myThreadID))
2371 testGlobal.
ErrOut(
"Maxwell:TestMaxwellRHS:TimeIntegration:TimeAdvance - ComputeDV() failed.\n");
2374 testGlobal.
StdOut(
"Compute DV done.\n");
2380 MaxwellRHSTimeIntegrateTimeAdvance =
CheckResult(MaxwellRHSTimeIntegrateTimeAdvance, testComm);
2381 parallelUnitResults.
UpdateResult(
"Maxwell:TestMaxwellRHS:TimeIntegration:TimeAdvance", MaxwellRHSTimeIntegrateTimeAdvance);
2384 testGlobal.
StdOut(
"Performing final I/O.\n");
2389 outputFileNameOut.str(
"");
2390 outputFileNameOut << outputFileDirName <<
"/" << outputFileNameRoot <<
"_tstep" << iStep <<
".h5";
2392 std::string outputFileName(outputFileNameOut.str());
2394 testGrid,testState,paramState,testConfig,messageStream)) {
2395 testGlobal.
ErrOut(
"Maxwell:TestMaxwellRHS:TimeIntegration:TimeAdvance - plascom2::io::hdf5::OutputSingle() failed.\n");
2397 testGlobal.
StdOut(messageStream.str(),3);
2400 testGlobal.
ErrOut(
"Maxwell:TestMaxwellRHS:TimeIntegration:TimeAdvance - WARNING! > HDF5 not enabled. Cannot perform I/O.\n");
2405 messageStream <<
"Maxwell:TestMaxwellRHS:TimeIntegration:TimeAdvance - Ending at step " << iStep << std::endl;
2406 testGlobal.
StdOut(messageStream.str(),1);
int InitializeMaxwellParameters(const GridType &inGrid, StateType &inParams, double CFLValue)
int ComputeMaxwellRHS_Bfield(int numDim, size_t *numX, int numComponents, size_t numPoints, size_t *opInterval, int *stencilID, plascom2::operators::sbp::base &inOperator, double *recipDeltaX, double *Efield, double *dBdt)
void CreateCurlFreeVectorFieldNonzeroDDx2(int numDim, size_t *numX, double *deltaX, double *inputField)
void TestConvertFields(ix::test::results &serialUnitResults)
void TestMaxwellRHS_Dfield(ix::test::results &serialUnitResults)
int ConvertBfieldtoHfield(int numDim, size_t numPoints, size_t *numX, size_t *opInterval, double *recipEpsMu, double *Bfield, double *Hfield)
int * stencilSizes
The number of weights for each stencil.
void size_t int size_t int size_t int int int int double int int double double *void size_t int size_t int int int int int double int size_t size_t size_t double double *void size_t int size_t int size_t size_t int double int double double *void size_t size_t size_t double double * X
int InitializeMaxwellStateConstFields(const GridType &inGrid, StateType &inState, double *constE, double *constB, double *constJ, double &constEps, double &constMu, bool everyWhere=false)
void const size_t * numPoints
virtual int ErrOut(const std::string &outstr)
void TestMaxwellRHS_Bfield(ix::test::results &serialUnitResults)
int ComputeMaxwellRHS_Dfield(int numDim, size_t *numX, int numComponents, size_t numPoints, size_t *opInterval, int *stencilID, plascom2::operators::sbp::base &inOperator, double *recipDeltaX, double *Hfield, double *J, double *dDdt)
void size_t int size_t int * opDir
void CreateLinearIncreasingField(size_t numPoints, double coeff, double *inputField)
subroutine applyoperator(numDim, dimSizes, numComponents, numPoints, opDir, opInterval, numStencils, stencilSizes, stencilStarts, numValues, stencilWeights, stencilOffsets, stencilID, U, dU)
applyoperator applies an operator specified as a stencil set to the provided state data ...
int ComputeCurl(int numDim, size_t *numX, int numComponents, size_t numPoints, size_t *opInterval, int *stencilID, plascom2::operators::sbp::base &inOperator, double *recipDeltaX, double *inputField, double *outputField)
void SetCommunication(bool onoff)
plascom2::operators::sbp::base operator_t
pcpp::IndexIntervalType & PartitionInterval()
void CreateLinearScalarField(int numDim, size_t *numX, double *deltaX, double *field, double *coeff)
void const size_t const size_t * gridSizes
void RenewStream(std::ostringstream &outStream)
bool CheckResult(bool &localResult, pcpp::CommunicatorType &testComm)
int InitializeFieldHandles()
void SetDimensionExtensions(const std::vector< size_t > &inExtensions)
int * stencilStarts
The starting index into the stencilWeight and stencilOffset arrays for each stencil.
int * stencilOffsets
The offsets wrt the grid point at which the stencil is being applied.
void TestMaxwellRHSTimeIntegrate(ix::test::results ¶llelUnitResults, pcpp::CommunicatorType &testComm)
void const size_t const size_t const size_t * opInterval
virtual int AdvanceDomain()
Advances domain, grid, and state by one step.
pcpp::IndexIntervalType interval_t
subroutine assignmentxa(numDim, numPoints, bufferSize, bufferInterval, a, X)
ASSIGNMENTXA point-wise operator performing X = scalar a.
void SetGridSizes(const std::vector< size_t > &inSize)
void CreateConstantVectorField(int numDim, size_t *numX, double *value, double *inputField)
virtual int Init(const std::string &name, CommunicatorType &incomm)
void CreateCurlFreeVectorFieldNonzeroDDx1(int numDim, size_t *numX, double *deltaX, double *inputField)
int OutputSingle(const std::string &fileName, const GridType &inGrid, const StateType &inState, const ConfigType &simConfig, const ConfigType &gridConfig, const ConfigType &stateConfig)
const std::vector< size_t > & BufferSizes() const
Encapsulating class for collections of test results.
void TestMaxwellRHS(ix::test::results &serialUnitResults)
simulation::domain::base< grid_t, state_t > domain_t
int CreateDirectory(const std::string &fname)
pcpp::IndexIntervalType & PartitionBufferInterval()
simulation::grid::halo halo_t
void size_t int size_t int size_t int int int int double int int * stencilID
void SetGridSpacings(const std::vector< double > &inSpacing)
void TestApplyOperatorAppl(ix::test::results &serialUnitResults)
int SetupMaxwellStateAndParameters(const GridType &inGrid, StateType &inState, StateType &inParams)
virtual int StdOut(const std::string &outstr, unsigned char inlev=1)
int InitializeSimulationFixtures(GridType &inGrid, plascom2::operators::sbp::base &inOperator, int interiorOrder, pcpp::CommunicatorType &inComm, std::ostream *messageStreamPtr=NULL)
int ConvertHfieldtoBfield(int numDim, size_t numPoints, size_t *numX, size_t *opInterval, double *epsMu, double *Hfield, double *Bfield)
bool FILEEXISTS(const std::string &fname)
pcpp::ParallelGlobalType global_t
Main encapsulation of MPI.
int CreateStencilConnectivity(int numDim, size_t *dimSizes, size_t *opInterval, int boundaryDepth, int *stencilID, bool fortranInterval=false)
Creates simple stencil connectivity assuming all domain boundaries are physical boundaries.
Testing constructs for unit testing.
Encapsulation for a collection of operator stencils.
BufferDataType * GetFieldBuffer(const std::string &fieldName)
int numValues
The total number of weights for all stencils (reqd for Fortran)
void size_t size_t size_t double double double double *void size_t size_t size_t double double double double double *void size_t size_t size_t double double double double *void size_t size_t size_t double double double *void const size_t const size_t const size_t const int const double const double double * Z
void CreateConstCurlVectorField(int numDim, size_t *numX, double *deltaX, double *inputField, double *curlComp)
simulation::state::base state_t
void const size_t const size_t * bufferSizes
int SetGrid(GridType &inGrid)
void size_t int size_t int size_t int int int int double int int double double *void size_t int size_t int int int int int double int size_t size_t size_t double double *void size_t int size_t int size_t size_t int double int double double *void size_t size_t size_t double double double * Y
void UpdateResult(const std::string &name, const ValueType &result)
Updates an existing test result.
int ConvertEfieldtoDfield(int numDim, size_t numPoints, size_t *numX, size_t *opInterval, double *epsMu, double *Efield, double *Dfield)
void TestCurlOperator(ix::test::results &serialUnitResults)
int ComputeRecipEpsMu(int numDim, size_t numPoints, size_t *numX, size_t *opInterval, double *epsMu, double *recipEpsMu)
double * stencilWeights
The stencil weights.
virtual int InitializeAdvancer(DomainType &inDomain, pcpp::ParallelGlobalType &inGlobal, std::ostream &inStream)
Initializes the advancer object.
int numStencils
The number of stencils (e.g. interior + boundary)
int Initialize(base &stencilSet, int interiorOrder)
Initialize the sbp::base stencilset with the SBP operator of given order.
int ConvertDfieldtoEfield(int numDim, size_t numPoints, size_t *numX, size_t *opInterval, double *recipEpsMu, double *Dfield, double *Efield)
void TestComputeRecipEpsMu(ix::test::results &serialUnitResults)
Simple Block Structured Mesh object.
void size_t int * numComponents
void SetPhysicalExtent(const std::vector< double > &inExtent)
simulation::grid::parallel_blockstructured grid_t
int Finalize(bool allocateCoordinateData=false)
void InitSimple(const ContainerType &inSize)
size_t BufferSize() const
void const size_t * numPointsBuffer
void TestDirichletBC(ix::test::results &serialUnitResults)
void FC_MODULE(euler, flux1d, EULER, FLUX1D)(const int *numDim
void SetTimers(bool onoff)
int ComputeDirichletBC(const std::vector< size_t > &bufferIndices, double *variable, const double &value)