scaling.hpp expected optional string serif/dimensions/dimensions.hpp serif/utils/laneemden/solution.hpp src/include/serif/utils/laneemden/laneemden.hpp src/lib/serif/utils/laneemden/scaling.cpp serif::utils::laneemden::PhysicalScales serif::utils::laneemden::PhysicalSample serif serif::utils serif::utils::laneemden #pragmaonce #include<expected> #include<optional> #include<string> #include"serif/dimensions/dimensions.hpp" #include"serif/utils/laneemden/solution.hpp" namespaceserif::utils::laneemden{ structPhysicalScalesfinal{ doublen; doubleradial_scale; dimensions::QuantityValue<dimensions::Mass>mass; dimensions::QuantityValue<dimensions::Length>radius; dimensions::QuantityValue<dimensions::MassDensity>central_density; dimensions::QuantityValue<dimensions::SpecificEnthalpy>central_enthalpy; dimensions::QuantityValue<dimensions::GravitationalConstant>gravitational_constant; //Khasn-dependentdimensions;absentforn=0orwhenthisoptionalderivedvalueisnotrepresentable. std::optional<double>polytropic_constant; }; structPhysicalSamplefinal{ dimensions::QuantityValue<dimensions::MassDensity>density; dimensions::QuantityValue<dimensions::Pressure>pressure; dimensions::QuantityValue<dimensions::SpecificEnthalpy>enthalpy; dimensions::QuantityValue<dimensions::GravitationalPotential>potential; dimensions::QuantityValue<dimensions::Mass>enclosed_mass; dimensions::QuantityValue<dimensions::Acceleration>gravity; }; [[nodiscard]]std::expected<PhysicalScales,std::string>scale_from_mass( constSolution&solution, dimensions::QuantityValue<dimensions::Mass>mass, dimensions::QuantityValue<dimensions::MassDensity>central_density, dimensions::QuantityValue<dimensions::GravitationalConstant>gravitational_constant); [[nodiscard]]std::expected<PhysicalScales,std::string>scale_from_enthalpy( constSolution&solution, dimensions::QuantityValue<dimensions::SpecificEnthalpy>central_enthalpy, dimensions::QuantityValue<dimensions::MassDensity>central_density, dimensions::QuantityValue<dimensions::GravitationalConstant>gravitational_constant); [[nodiscard]]std::expected<PhysicalScales,std::string>scale_from_polytropic_constant( constSolution&solution, doublepolytropic_constant, dimensions::QuantityValue<dimensions::MassDensity>central_density, dimensions::QuantityValue<dimensions::GravitationalConstant>gravitational_constant); [[nodiscard]]std::expected<PhysicalSample,std::string>evaluate_physical( constSolution&solution,constPhysicalScales&scales,dimensions::QuantityValue<dimensions::Length>radius); }