4#include "AMP/mesh/Mesh.h"
5#include "AMP/mesh/MeshElement.h"
6#include "AMP/operators/radiationDiffusionFD/RadiationDiffusionFDDiscretization.h"
7#include "AMP/utils/Constants.h"
8#include "AMP/utils/Database.h"
12#define PI AMP::Constants::pi
43 std::shared_ptr<AMP::Database> mspecific_db_ );
79 std::array<double, 6>
d_ak{ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
80 std::array<double, 6>
d_bk{ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
165 std::shared_ptr<AMP::Database> mspecific_db_ );
195 constexpr static double kE0 = 2.0;
196 constexpr static double kT = 1.7;
197 constexpr static double kX = 1.5;
198 constexpr static double kXPhi = 0.245;
199 constexpr static double kY = 3.5;
200 constexpr static double kYPhi = 0.784;
201 constexpr static double kZ = 2.5;
202 constexpr static double kZPhi = 0.154;
207 std::shared_ptr<AMP::Database> specific_db_ );
245 void getNormalVector(
size_t boundaryID,
size_t &normalComponent,
double &normalSign )
const;
250 size_t gradComponent )
const;
264 size_t component,
double x,
double y,
double z,
size_t gradComponent )
const;
265 double sourceTerm3D(
size_t component,
double x,
double y,
double z )
const;
static constexpr double kXPhi
double exactSolution3D(size_t component, double x, double y, double z) const
double exactSolutionGradient(size_t component, const AMP::Mesh::Point &point, size_t gradComponent) const
Dimension-agnostic wrapper around exactSolutionGradient_ functions.
double exactSolution(size_t component, const AMP::Mesh::Point &point) const override
Exact solution of PDE for given component at the given point.
double sourceTerm2D(size_t component, double x, double y) const
double exactSolutionGradient1D(size_t component, double x) const
static constexpr double kZ
double sourceTerm(size_t component, const AMP::Mesh::Point &point) const override
Solution-independent source term in PDE at the given point.
static constexpr double kX
double exactSolutionGradient3D(size_t component, double x, double y, double z, size_t gradComponent) const
static constexpr double kYPhi
double initialCondition(size_t component, const AMP::Mesh::Point &point) const override
Initial condition of PDE at the given point.
double exactSolution1D(size_t component, double x) const
static constexpr double kE0
double getBoundaryFunctionValueT(size_t boundaryID, const AMP::Mesh::Point &point) const
double sourceTerm3D(size_t component, double x, double y, double z) const
static constexpr double kT
double exactSolutionGradient2D(size_t component, double x, double y, size_t gradComponent) const
Manufactured_RadDifModel(std::shared_ptr< AMP::Database > basic_db_, std::shared_ptr< AMP::Database > specific_db_)
double exactSolution2D(size_t component, double x, double y) const
virtual ~Manufactured_RadDifModel()
static constexpr double kZPhi
static constexpr double kY
double getBoundaryFunctionValueE(size_t boundaryID, const AMP::Mesh::Point &point) const
void getNormalVector(size_t boundaryID, size_t &normalComponent, double &normalSign) const
Get component and sign of normal vector given the boundaryID.
double sourceTerm1D(size_t component, double x) const
bool d_settingInitialCondition
void finalizeGeneralPDEModel_db() override
double initialCondition(size_t component, const AMP::Mesh::Point &point) const override
Initial condition of PDE at the given point.
virtual ~Mousseau_etal_2000_RadDifModel()
void finalizeGeneralPDEModel_db() override
double sourceTerm(size_t component, const AMP::Mesh::Point &point) const override
Solution-independent source term in PDE at the given point.
Mousseau_etal_2000_RadDifModel(std::shared_ptr< AMP::Database > basic_db_, std::shared_ptr< AMP::Database > mspecific_db_)
static constexpr bool IsNonlinear
Flag indicating whether nonlinear or linear PDE coefficients are used.
virtual double exactSolution(size_t component, const AMP::Mesh::Point &point) const
Exact solution of PDE for given component at the given point.
virtual void finalizeGeneralPDEModel_db()=0
std::shared_ptr< AMP::Database > getRadiationDiffusionFD_input_db() const
Get database suitable for creating an instance of a RadDifOp.
bool d_exactSolutionAvailable
Does the derived class implement an exact solution?
virtual double sourceTerm(size_t component, const AMP::Mesh::Point &point) const =0
Solution-independent source term in PDE at the given point.
double diffusionCoefficientE(double T, double zatom) const
Energy diffusion coefficient D_E given temperature T.
double d_k11
Constant scaling factors in the PDE.
static constexpr bool IsNonlinear
RadDifModel(std::shared_ptr< AMP::Database > basic_db_, std::shared_ptr< AMP::Database > mspecific_db_)
Constructor.
void setCurrentTime(double currentTime_)
Set current time of class.
virtual ~RadDifModel()
Destructor.
bool d_RadiationDiffusionFD_input_db_completed
Flag derived classes must overwrite indicating they have constructed the above database.
virtual double initialCondition(size_t component, const AMP::Mesh::Point &point) const =0
Initial condition of PDE at the given point.
size_t d_dim
Shorthand for spatial dimension.
void setMemberPDEConstants()
double getCurrentTime() const
Get current time of class (e.g., as may be used in sourceTerm)
std::array< double, 6 > d_ak
std::array< double, 6 > d_bk
double d_zatom
Atomic number; assumed constant.
bool exactSolutionAvailable() const
Does the derived class implement an exact solution?
std::shared_ptr< AMP::Database > d_mspecific_db
Parameters specific to a model.
std::shared_ptr< AMP::Database > d_RadiationDiffusionFD_input_db
Database of parameters required to create an instance of a RadiationDiffusionFD.
std::shared_ptr< AMP::Database > d_basic_db
Basic parameter database (with model-agnostic parameters)
double d_currentTime
The current time of the solution.