22 Parameters<const Executor&, const UnstructuredMesh&, const Input&>>
27 static std::unique_ptr<DivOperatorFactory>
30 std::string key = (std::holds_alternative<Dictionary>(inputs))
31 ? std::get<Dictionary>(inputs).get<std::string>(
"DivOperator")
32 : std::get<TokenList>(inputs).popFront<std::string>();
33 keyExistsOrError(key);
34 return table().at(key)(exec, uMesh, inputs);
37 static std::string
name() {
return "DivOperatorFactory"; }
55 virtual std::unique_ptr<DivOperatorFactory>
clone()
const = 0;
72 faceFlux_(divOp.faceFlux_),
74 divOp.divOperatorStrategy_ ? divOp.divOperatorStrategy_->clone() : nullptr
90 std::unique_ptr<DivOperatorFactory> divOperatorStrategy
93 divOperatorStrategy_(std::move(divOperatorStrategy)) {};
99 divOperatorStrategy_(nullptr) {};
104 if (divOperatorStrategy_ ==
nullptr)
109 divOperatorStrategy_->div(tmpsource, faceFlux_,
field_);
117 divOperatorStrategy_->div(divPhi, faceFlux_,
getField());
124 if (std::holds_alternative<NeoFOAM::Dictionary>(input))
126 auto dict = std::get<NeoFOAM::Dictionary>(input);
127 std::string schemeName =
"div(" + faceFlux_.
name +
"," +
field_.
name +
")";
133 auto tokens = std::get<NeoFOAM::TokenList>(input);
138 std::string
getName()
const {
return "DivOperator"; }
144 std::unique_ptr<DivOperatorFactory> divOperatorStrategy_;
A class to contain the data and executors for a field and define some basic operations.
size_t size() const
Gets the size of the field.
const Executor & exec() const
Gets the executor associated with the field.
A factory class for runtime selection of derived classes.
A class representing a list of tokens.
Represents an unstructured mesh in NeoFOAM.
virtual const Executor & exec() const final
OperatorMixin(const Executor exec, VolumeField< scalar > &field, Operator::Type type)
VolumeField< scalar > & getField()
const Executor exec_
Executor associated with the field. (CPU, GPU, openMP, etc.)
VolumeField< scalar > & field_
virtual void div(Field< scalar > &divPhi, const SurfaceField< scalar > &faceFlux, VolumeField< scalar > &phi)=0
virtual void div(VolumeField< scalar > &divPhi, const SurfaceField< scalar > &faceFlux, VolumeField< scalar > &phi)=0
static std::unique_ptr< DivOperatorFactory > create(const Executor &exec, const UnstructuredMesh &uMesh, Input inputs)
DivOperatorFactory(const Executor &exec, const UnstructuredMesh &mesh)
const UnstructuredMesh & mesh_
virtual std::unique_ptr< DivOperatorFactory > clone() const =0
static std::string name()
virtual VolumeField< scalar > div(const SurfaceField< scalar > &faceFlux, VolumeField< scalar > &phi)=0
virtual ~DivOperatorFactory()
void div(Field< scalar > &divPhi)
DivOperator(dsl::Operator::Type termType, const SurfaceField< scalar > &faceFlux, VolumeField< scalar > &phi)
std::string getName() const
void build(const Input &input)
DivOperator(dsl::Operator::Type termType, const SurfaceField< scalar > &faceFlux, VolumeField< scalar > &phi, std::unique_ptr< DivOperatorFactory > divOperatorStrategy)
void div(VolumeField< scalar > &divPhi)
DivOperator(dsl::Operator::Type termType, const SurfaceField< scalar > &faceFlux, VolumeField< scalar > &phi, Input input)
DivOperator(const DivOperator &divOp)
void explicitOperation(Field< scalar > &source)
const UnstructuredMesh & mesh() const
Returns a const reference to the unstructured mesh object.
Represents a surface field in a finite volume method.
Represents a volume field in a finite volume method.
#define NF_ERROR_EXIT(message)
Macro for printing an error message and aborting the program.
std::variant< Dictionary, TokenList > Input
std::variant< SerialExecutor, CPUExecutor, GPUExecutor > Executor