23#ifndef BACKGROUNDFIELD_H
24#define BACKGROUNDFIELD_H
57 std::span<std::array<Real, numFields>> b,
60 fsgrid.parallel_for([](
int timerId) -> phiprof::Timer {
return phiprof::Timer{timerId}; },
61 phiprof::initializeTimer(
"setPerturbedFieldToZero"), technical,
62 [=](
const fsgrid::Coordinates &coordinates,
const fsgrid::FsStencil& stencil,
cuint sysBoundaryFlag,
cuint sysBoundaryLayer) {
65 b[stencil.ooo()][offset +
j] = 0.0;
80 std::span<std::array<Real, numFields>> b,
87 if (append ==
false) {
94 const double accuracy = 1e-17;
95 unsigned int faceCoord1[3];
96 unsigned int faceCoord2[3];
108 fsgrid.parallel_for([](
int timerId) -> phiprof::Timer {
return phiprof::Timer{timerId}; },
109 phiprof::initializeTimer(
"setPerturbedField-loop"), technical,
110 [& ](
const fsgrid::Coordinates &coordinates,
const fsgrid::FsStencil& stencil,
cuint sysBoundaryFlag,
cuint sysBoundaryLayer) {
111 const std::array<Real, 3> start = coordinates.getPhysicalCoords(stencil.i, stencil.j, stencil.k);
112 const std::array<Real, 3> gridSpacing = coordinates.physicalGridSpacing;
113 auto& field = b[stencil.ooo()];
116 for (uint fComponent = 0; fComponent < 3; fComponent++) {
117 T3DFunction valueFunction = std::bind(bfFunction, std::placeholders::_1, std::placeholders::_2,
119 field[offset + fComponent] +=
121 gridSpacing[faceCoord1[fComponent]], gridSpacing[faceCoord2[fComponent]]);
void setPerturbedField(const FieldFunction &bfFunction, std::span< std::array< Real, numFields > > b, fsgrids::technicalspan technical, FieldSolverGrid &fsgrid, int offset=fsgrids::bfield::PERBX, bool append=false)
void setBackgroundFieldToZero(FieldSolverGrid &fsgrid, fsgrids::technicalspan technical, fsgrids::bgbspan bgb)
void setBackgroundField(const FieldFunction &bgFunction, fsgrids::bgbspan bgb, fsgrids::technicalspan technical, FieldSolverGrid &fsgrid, bool append=false)
void setPerturbedFieldToZero(FieldSolverGrid &fsgrid, fsgrids::technicalspan technical, std::span< std::array< Real, numFields > > b, int offset=fsgrids::bfield::PERBX)
fsgrid::FsGrid< FS_STENCIL_WIDTH > FieldSolverGrid
std::function< double(double x, double y, double z, coordinate component, unsigned int derivative, coordinate dcomponent)> FieldFunction
std::function< double(double, double, double)> T3DFunction
double surfaceAverage(const T3DFunction &f1, coordinate face, double accuracy, const std::array< double, 3 > &r1, double L1, double L2)
std::span< technical > technicalspan
std::span< std::array< Real, bgbfield::N_BGB > > bgbspan