feat(libmeanfield): centrifugal + pressure
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
module;
|
||||
#include <mfem.hpp>
|
||||
export module mean_field:mapping.compactification;
|
||||
export import :mapping.types;
|
||||
|
||||
export namespace mean_field::mapping::compactification {
|
||||
struct ExteriorMapInput {
|
||||
const mfem::Vector &reference_position;
|
||||
const mfem::Vector &displaced_position;
|
||||
const mfem::DenseMatrix &displacement_jacobian;
|
||||
double compactification_coordinate;
|
||||
const mfem::Vector &compactification_coordinate_gradient;
|
||||
};
|
||||
|
||||
struct ExteriorMapResult {
|
||||
mfem::Vector physical_position;
|
||||
mfem::DenseMatrix mapping_jacobian;
|
||||
};
|
||||
|
||||
struct ExteriorMapDirection {
|
||||
const mfem::Vector &displaced_position_variation;
|
||||
const mfem::DenseMatrix &displacement_jacobian_variation;
|
||||
};
|
||||
|
||||
struct ExteriorMapVariation {
|
||||
mfem::Vector physical_position_variation;
|
||||
mfem::DenseMatrix mapping_jacobian_variation;
|
||||
};
|
||||
|
||||
class ExteriorDomainMap {
|
||||
public:
|
||||
virtual ~ExteriorDomainMap() = default;
|
||||
|
||||
[[nodiscard]] virtual MappingStatus Evaluate(
|
||||
const ExteriorMapInput &input,
|
||||
ExteriorMapResult &result
|
||||
) const = 0;
|
||||
[[nodiscard]] virtual MappingStatus EvaluateVariation(
|
||||
const ExteriorMapInput &input,
|
||||
const ExteriorMapResult &result,
|
||||
const ExteriorMapDirection &direction,
|
||||
ExteriorMapVariation &variation
|
||||
) const = 0;
|
||||
[[nodiscard]] virtual std::string_view GetName() const noexcept = 0;
|
||||
};
|
||||
} // namespace mean_field::mapping::compactification
|
||||
50
libmeanfield/interface/mapping/compactification/kelvin.cppm
Normal file
50
libmeanfield/interface/mapping/compactification/kelvin.cppm
Normal file
@@ -0,0 +1,50 @@
|
||||
module;
|
||||
#include <mfem.hpp>
|
||||
|
||||
export module mean_field:mapping.kelvin;
|
||||
export import :mapping.compactification;
|
||||
export import :mapping.types;
|
||||
export import :mapping.compactification.options;
|
||||
|
||||
export namespace mean_field::mapping::compactification {
|
||||
|
||||
class KelvinCompactification final : public ExteriorDomainMap {
|
||||
public:
|
||||
explicit KelvinCompactification(
|
||||
options::KelvinCompactificationOptions options
|
||||
);
|
||||
|
||||
[[nodiscard]] MappingStatus Evaluate(
|
||||
const ExteriorMapInput &input,
|
||||
ExteriorMapResult &result
|
||||
) const override;
|
||||
|
||||
[[nodiscard]] MappingStatus EvaluateVariation(
|
||||
const ExteriorMapInput &input,
|
||||
const ExteriorMapResult &result,
|
||||
const ExteriorMapDirection &direction,
|
||||
ExteriorMapVariation &variation
|
||||
) const override;
|
||||
|
||||
[[nodiscard]] std::string_view GetName() const noexcept override;
|
||||
|
||||
[[nodiscard]] double GetReferenceStellarRadius() const noexcept;
|
||||
[[nodiscard]] double GetReferenceInfinityRadius() const noexcept;
|
||||
[[nodiscard]] double GetCoordinateTolerance() const noexcept;
|
||||
|
||||
private:
|
||||
struct RadialFactors {
|
||||
double coordinate;
|
||||
double computational_radius;
|
||||
double scale;
|
||||
double scale_derivative;
|
||||
};
|
||||
|
||||
[[nodiscard]] MappingStatus ComputeRadialFactors(
|
||||
double compactification_coordinate,
|
||||
RadialFactors &factors
|
||||
) const;
|
||||
|
||||
options::KelvinCompactificationOptions m_options;
|
||||
};
|
||||
} // namespace mean_field::mapping::compactification
|
||||
@@ -0,0 +1,9 @@
|
||||
export module mean_field:mapping.compactification.options;
|
||||
|
||||
export namespace mean_field::mapping::compactification::options {
|
||||
struct KelvinCompactificationOptions {
|
||||
double r_star_ref{1.0};
|
||||
double r_inf_ref{2.0};
|
||||
double coordinate_tolerance{1.0e-12};
|
||||
};
|
||||
} // namespace mean_field::mapping::compactification::options
|
||||
Reference in New Issue
Block a user