7#ifndef WarpXSolverVec_H_
8#define WarpXSolverVec_H_
73 const std::string& a_vector_type_name,
74 const std::string& a_scalar_type_name =
"none" );
89 FieldType a_scalar_type = FieldType::None,
90 bool allow_type_mismatch =
false);
97 else {
Define(a_solver_vec); }
101 for (
int n = 0; n < 3; ++n) {
122 if (
this != &a_solver_vec) {
178 for (
int n = 0; n < 3; n++) {
201 for (
int n = 0; n < 3; n++) {
221 "WarpXSolverVec::scale() called on undefined WarpXSolverVec");
242 "WarpXSolverVec::setVal() called on undefined WarpXSolverVec");
260 "WarpXSolverVec::function(X) called with undefined WarpXSolverVec X");
269 "WarpXSolverVec::function(X) called with WarpXSolverVec X of different type");
275 return std::sqrt(norm);
297 "WarpXSolverVec::nDOF_local() DOF object is a nullptr");
304 "WarpXSolverVec::nDOF_global() DOF object is a nullptr");
309 void copyFrom (
const amrex::Real*
const);
310 void copyTo (amrex::Real*
const)
const;
337 static std::unique_ptr<WarpXSolverDOF>
m_dofs;
#define WARPX_ALWAYS_ASSERT_WITH_MESSAGE(EX, MSG)
Definition TextMsg.H:13
This is a wrapper class around a Vector of pointers to MultiFabs that contains basic math operators a...
Definition WarpXSolverVec.H:58
void assertSameType(const WarpXSolverVec &a_solver_vec) const
Definition WarpXSolverVec.H:264
void operator-=(const WarpXSolverVec &a_solver_vec)
Definition WarpXSolverVec.H:150
amrex::Long nDOF_global() const
Definition WarpXSolverVec.H:300
std::string m_scalar_type_name
Definition WarpXSolverVec.H:329
WarpXSolverVec(WarpXSolverVec &&) noexcept=default
bool m_is_defined
Definition WarpXSolverVec.H:320
void Copy(const WarpXSolverVec &a_solver_vec)
Definition WarpXSolverVec.H:93
auto numAMRLevels() const
Definition WarpXSolverVec.H:316
std::string getVectorType() const
Definition WarpXSolverVec.H:289
std::string m_vector_type_name
Definition WarpXSolverVec.H:328
warpx::fields::FieldType m_array_type
Definition WarpXSolverVec.H:325
static constexpr int m_ncomp
Definition WarpXSolverVec.H:331
void assertIsDefined(const WarpXSolverVec &a_solver_vec) const
Definition WarpXSolverVec.H:256
static bool m_warpx_ptr_defined
Definition WarpXSolverVec.H:334
value_type RT
Definition WarpXSolverVec.H:68
static std::unique_ptr< WarpXSolverDOF > m_dofs
Definition WarpXSolverVec.H:337
void linComb(const RT a, const WarpXSolverVec &X, const RT b, const WarpXSolverVec &Y)
Y = a*X + b*Y.
Definition WarpXSolverVec.H:170
void operator+=(const WarpXSolverVec &a_solver_vec)
Definition WarpXSolverVec.H:133
void Define(WarpX *a_WarpX, const std::string &a_vector_type_name, const std::string &a_scalar_type_name="none")
Definition WarpXSolverVec.cpp:24
static WarpX * m_WarpX
Definition WarpXSolverVec.H:335
ablastr::fields::MultiLevelScalarField m_scalar_vec
Definition WarpXSolverVec.H:323
ablastr::fields::MultiLevelVectorField m_array_vec
Definition WarpXSolverVec.H:322
void Define(const WarpXSolverVec &a_solver_vec)
Definition WarpXSolverVec.H:77
amrex::Long nDOF_local() const
Definition WarpXSolverVec.H:293
warpx::fields::FieldType getArrayVecType() const
Definition WarpXSolverVec.H:285
void scale(RT a_a)
Scale Y by a (Y *= a)
Definition WarpXSolverVec.H:217
int m_num_amr_levels
Definition WarpXSolverVec.H:332
bool IsDefined() const
Definition WarpXSolverVec.H:70
void zero()
Definition WarpXSolverVec.H:235
~WarpXSolverVec()
Definition WarpXSolverVec.cpp:13
warpx::fields::FieldType m_scalar_type
Definition WarpXSolverVec.H:326
ablastr::fields::MultiLevelVectorField & getArrayVec()
Definition WarpXSolverVec.H:279
RT dotProduct(const WarpXSolverVec &a_X) const
Definition WarpXSolverVec.cpp:231
auto getWarpX() const
Definition WarpXSolverVec.H:313
amrex::Real value_type
Definition WarpXSolverVec.H:67
warpx::fields::FieldType getScalarVecType() const
Definition WarpXSolverVec.H:286
const ablastr::fields::MultiLevelScalarField & getScalarVec() const
Definition WarpXSolverVec.H:281
void setVal(const RT a_val)
Definition WarpXSolverVec.H:238
ablastr::fields::MultiLevelScalarField & getScalarVec()
Definition WarpXSolverVec.H:282
void copyTo(amrex::Real *const) const
Definition WarpXSolverVec.cpp:186
std::string getScalarType() const
Definition WarpXSolverVec.H:290
const ablastr::fields::MultiLevelVectorField & getArrayVec() const
Definition WarpXSolverVec.H:278
void increment(const WarpXSolverVec &X, const RT a)
Increment Y by a*X (Y += a*X)
Definition WarpXSolverVec.H:195
void copyFrom(const amrex::Real *const)
Definition WarpXSolverVec.cpp:141
RT norm2() const
Definition WarpXSolverVec.H:272
void Copy(FieldType a_array_type, FieldType a_scalar_type=FieldType::None, bool allow_type_mismatch=false)
Definition WarpXSolverVec.cpp:113
WarpXSolverVec & operator=(const WarpXSolverVec &a_solver_vec)=delete
WarpXSolverVec(const WarpXSolverVec &)=delete
__host__ static __device__ constexpr IntVectND< dim > TheZeroVector() noexcept
static void LinComb(MultiFab &dst, Real a, const MultiFab &x, int xcomp, Real b, const MultiFab &y, int ycomp, int dstcomp, int numcomp, int nghost)
static void Saxpy(MultiFab &dst, Real a, const MultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
static void Copy(MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
amrex::Vector< ScalarField > MultiLevelScalarField
Definition MultiFabRegister.H:200
amrex::Vector< VectorField > MultiLevelVectorField
Definition MultiFabRegister.H:208
FieldType
Definition Fields.H:94
@ None
Definition Fields.H:94