13#include "AMReX_Vector.H"
22class Trig :
public IC<Set::Scalar>,
public IC<Set::Vector>
25 static constexpr const char*
name =
"trig";
26 Trig (amrex::Vector<amrex::Geometry> &_geom,
29 std::complex<int> _n2 = 0,
30 std::complex<int> _n3 = 0),
31 int _dim = AMREX_SPACEDIM) :
43 std::complex<int> _n2 = 0,
44 std::complex<int> _n3 = 0),
45 int _dim = AMREX_SPACEDIM)
48 AMREX_D_TERM(n1 = _n1;, n2 = _n2;, n3 = _n3;);
51 phi2 = std::atan2(n2.imag(),n2.real()),
52 phi3 = std::atan2(n3.imag(),n3.real()));
58 bool cellcentered = (a_field[0]->boxArray().ixType() == amrex::IndexType(amrex::IntVect::TheCellVector()));
65 for (amrex::MFIter mfi(*a_field[lev], amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
68 if (cellcentered) bx = mfi.growntilebox();
69 else bx = mfi.grownnodaltilebox();
71 amrex::Array4<Set::Scalar>
const &field = a_field[lev]->array(mfi);
72 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k)
89 #if AMREX_SPACEDIM > 0
94 #if AMREX_SPACEDIM > 1
99 #if AMREX_SPACEDIM > 2
112 bool cellcentered = (a_field[0]->boxArray().ixType() == amrex::IndexType(amrex::IntVect::TheCellVector()));
119 for (amrex::MFIter mfi(*a_field[lev], amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
122 if (cellcentered) bx = mfi.growntilebox();
123 else bx = mfi.grownnodaltilebox();
125 amrex::Array4<Set::Vector>
const &field = a_field[lev]->array(mfi);
126 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k)
143 #if AMREX_SPACEDIM > 0
148 #if AMREX_SPACEDIM > 1
153 #if AMREX_SPACEDIM > 2
168 std::vector<int> n_real(AMREX_SPACEDIM,0.0);
170 std::vector<int> n_imag(AMREX_SPACEDIM,0.0);
174 value.n1 = std::complex<int>(n_real[0],n_imag[0]);,
175 value.n2 = std::complex<int>(n_real[1],n_imag[1]);,
176 value.n3 = std::complex<int>(n_real[2],n_imag[2]););
179 value.phi1 = std::atan2(value.n1.imag(),value.n1.real()),
180 value.phi2 = std::atan2(value.n2.imag(),value.n2.real()),
181 value.phi3 = std::atan2(value.n3.imag(),value.n3.real()));
#define pp_queryclass(...)
Pure abstract IC object from which all other IC objects inherit.
Initialize using a trigonometric series.
std::complex< int > AMREX_D_DECL(n1, n2, n3)
Set::Scalar AMREX_D_DECL(phi1=0.0, phi2=0.0, phi3=0.0)
Trig(amrex::Vector< amrex::Geometry > &_geom, IO::ParmParse &pp, std::string name)
static void Parse(Trig &value, IO::ParmParse &pp)
void Define(Set::Scalar _alpha=1.0, AMREX_D_DECL(std::complex< int > _n1=0, std::complex< int > _n2=0, std::complex< int > _n3=0), int _dim=AMREX_SPACEDIM)
static constexpr const char * name
virtual void Add(const int &lev, Set::Field< Set::Scalar > &a_field, Set::Scalar) override
virtual void Add(const int &lev, Set::Field< Set::Vector > &a_field, Set::Scalar) override
Trig(amrex::Vector< amrex::Geometry > &_geom, Set::Scalar _alpha=1.0, AMREX_D_DECL(std::complex< int > _n1=0, std::complex< int > _n2=0, std::complex< int > _n3=0), int _dim=AMREX_SPACEDIM)
Initialize a spherical inclusion.
static const Set::Scalar Pi
A collection of data types and symmetry-reduced data structures.
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector