39 if (append ==
false) {
42 const size_t numCells =
fsgrid.getNumCells();
43 phiprof::Timer bgTimer {
"set Background field"};
48 const double accuracy = 1e-17;
49 unsigned int faceCoord1[3];
50 unsigned int faceCoord2[3];
60 int loopTopId {phiprof::initializeTimer(
"loop-top")};
61 int loopFaceId {phiprof::initializeTimer(
"loop-face-averages")};
62 int loopVolumeId {phiprof::initializeTimer(
"loop-volume-averages")};
65 fsgrid.parallel_for([](
int timerId) -> phiprof::Timer {
return phiprof::Timer{timerId}; },
66 phiprof::initializeTimer(
"setBackgroundField-loop"), technical,
67 [& ](
const fsgrid::Coordinates &coordinates,
const fsgrid::FsStencil& stencil,
cuint sysBoundaryFlag,
cuint sysBoundaryLayer) {
68 const std::array<Real, 3> start = coordinates.getPhysicalCoords(stencil.i, stencil.j, stencil.k);
69 const std::array<Real, 3> gridSpacing = coordinates.physicalGridSpacing;
70 const std::array end = {
71 start[0] + gridSpacing[0],
72 start[1] + gridSpacing[1],
73 start[2] + gridSpacing[2],
76 auto& field = bgb[stencil.ooo()];
78 for (uint fComponent = 0; fComponent < 3; fComponent++) {
80 std::bind(bgFunction, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
84 gridSpacing[faceCoord1[fComponent]], gridSpacing[faceCoord2[fComponent]]);
88 std::bind(bgFunction, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
91 gridSpacing[faceCoord1[fComponent]] *
93 gridSpacing[faceCoord1[fComponent]], gridSpacing[faceCoord2[fComponent]]);
96 std::bind(bgFunction, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
99 gridSpacing[faceCoord2[fComponent]] *
101 gridSpacing[faceCoord1[fComponent]], gridSpacing[faceCoord2[fComponent]]);
105 for (uint fComponent = 0; fComponent < 3; fComponent++) {
107 std::bind(bgFunction, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
112 for (uint dComponent = 0; dComponent < 3; dComponent++) {
114 std::bind(bgFunction, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
117 gridSpacing[dComponent] *
volumeAverage(derivFunction, accuracy, start, end);
122 bgTimer.stop(numCells,
"Spatial Cells");