module; #include export module mean_field:model.structure.base; export import :eos.runtime; export namespace mean_field::models::structure { struct StructureSeed { mfem::Vector radius; mfem::Vector density; mfem::Vector enthalpy; double stellarRadius; double centralDensity; double centralEnthalpy; }; struct StructureSeedRequest { double centralDensity; int radialSampleCount{512}; }; class StructureBase { public: virtual ~StructureBase() = default; [[nodiscard]] virtual eos::EquationOfStateView equationOfState() const noexcept = 0; [[nodiscard]] virtual double targetMass() const noexcept = 0; [[nodiscard]] virtual StructureSeed makeInitialSeed(const StructureSeedRequest &request) const = 0; virtual void validate() const = 0; protected: StructureBase() = default; }; } // namespace mean_field::models::structure