7#ifndef WarpXSolverVec_H_
8#define WarpXSolverVec_H_
71 const std::string& a_vector_type_name,
72 const std::string& a_scalar_type_name =
"none" );
88 bool allow_type_mismatch =
false);
95 else {
Define(a_solver_vec); }
99 for (
int n = 0; n < 3; ++n) {
120 if (
this != &a_solver_vec) {
176 for (
int n = 0; n < 3; n++) {
199 for (
int n = 0; n < 3; n++) {
219 "WarpXSolverVec::scale() called on undefined WarpXSolverVec");
240 "WarpXSolverVec::setVal() called on undefined WarpXSolverVec");
258 "WarpXSolverVec::function(X) called with undefined WarpXSolverVec X");
267 "WarpXSolverVec::function(X) called with WarpXSolverVec X of different type");
273 return std::sqrt(norm);
295 "WarpXSolverVec::nDOF_local() DOF object is a nullptr");
302 "WarpXSolverVec::nDOF_global() DOF object is a nullptr");
338 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:56
void assertSameType(const WarpXSolverVec &a_solver_vec) const
Definition WarpXSolverVec.H:262
void operator-=(const WarpXSolverVec &a_solver_vec)
Definition WarpXSolverVec.H:148
amrex::Long nDOF_global() const
Definition WarpXSolverVec.H:298
std::string m_scalar_type_name
Definition WarpXSolverVec.H:330
WarpXSolverVec(WarpXSolverVec &&) noexcept=default
bool m_is_defined
Definition WarpXSolverVec.H:321
void Copy(const WarpXSolverVec &a_solver_vec)
Definition WarpXSolverVec.H:91
auto numAMRLevels() const
Definition WarpXSolverVec.H:314
std::string getVectorType() const
Definition WarpXSolverVec.H:287
std::string m_vector_type_name
Definition WarpXSolverVec.H:329
warpx::fields::FieldType m_array_type
Definition WarpXSolverVec.H:326
const auto & getDOFsObject() const
Definition WarpXSolverVec.H:317
static constexpr int m_ncomp
Definition WarpXSolverVec.H:332
void assertIsDefined(const WarpXSolverVec &a_solver_vec) const
Definition WarpXSolverVec.H:254
static bool m_warpx_ptr_defined
Definition WarpXSolverVec.H:335
value_type RT
Definition WarpXSolverVec.H:66
static std::unique_ptr< WarpXSolverDOF > m_dofs
Definition WarpXSolverVec.H:338
void linComb(const RT a, const WarpXSolverVec &X, const RT b, const WarpXSolverVec &Y)
Y = a*X + b*Y.
Definition WarpXSolverVec.H:168
void operator+=(const WarpXSolverVec &a_solver_vec)
Definition WarpXSolverVec.H:131
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:336
ablastr::fields::MultiLevelScalarField m_scalar_vec
Definition WarpXSolverVec.H:324
ablastr::fields::MultiLevelVectorField m_array_vec
Definition WarpXSolverVec.H:323
void Define(const WarpXSolverVec &a_solver_vec)
Definition WarpXSolverVec.H:75
amrex::Long nDOF_local() const
Definition WarpXSolverVec.H:291
warpx::fields::FieldType getArrayVecType() const
Definition WarpXSolverVec.H:283
void scale(RT a_a)
Scale Y by a (Y *= a)
Definition WarpXSolverVec.H:215
int m_num_amr_levels
Definition WarpXSolverVec.H:333
bool IsDefined() const
Definition WarpXSolverVec.H:68
void zero()
Definition WarpXSolverVec.H:233
~WarpXSolverVec()
Definition WarpXSolverVec.cpp:13
warpx::fields::FieldType m_scalar_type
Definition WarpXSolverVec.H:327
ablastr::fields::MultiLevelVectorField & getArrayVec()
Definition WarpXSolverVec.H:277
RT dotProduct(const WarpXSolverVec &a_X) const
Definition WarpXSolverVec.cpp:242
auto getWarpX() const
Definition WarpXSolverVec.H:311
void copyTo(amrex::Real *) const
Definition WarpXSolverVec.cpp:193
void copyFrom(const amrex::Real *)
Definition WarpXSolverVec.cpp:142
amrex::Real value_type
Definition WarpXSolverVec.H:65
warpx::fields::FieldType getScalarVecType() const
Definition WarpXSolverVec.H:284
const ablastr::fields::MultiLevelScalarField & getScalarVec() const
Definition WarpXSolverVec.H:279
void setVal(const RT a_val)
Definition WarpXSolverVec.H:236
void Copy(warpx::fields::FieldType a_array_type, warpx::fields::FieldType a_scalar_type=warpx::fields::FieldType::None, bool allow_type_mismatch=false)
Definition WarpXSolverVec.cpp:114
ablastr::fields::MultiLevelScalarField & getScalarVec()
Definition WarpXSolverVec.H:280
std::string getScalarType() const
Definition WarpXSolverVec.H:288
const ablastr::fields::MultiLevelVectorField & getArrayVec() const
Definition WarpXSolverVec.H:276
void increment(const WarpXSolverVec &X, const RT a)
Increment Y by a*X (Y += a*X)
Definition WarpXSolverVec.H:193
RT norm2() const
Definition WarpXSolverVec.H:270
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:210
amrex::Vector< VectorField > MultiLevelVectorField
Definition MultiFabRegister.H:218
FieldType
Definition Fields.H:97
@ None
Definition Fields.H:97