Keep central density as seed data in the n1 sandbox
This commit is contained in:
@@ -116,6 +116,49 @@ TEST_CASE(
|
||||
CHECK(context.hasActiveSolver());
|
||||
}
|
||||
|
||||
TEST_CASE(
|
||||
"An Explicit Lane Emden Seed Builds A Fixed Angular Momentum Context Without Fixing Central Density",
|
||||
"[user-api][solver][context][seed][fixed-angular-momentum]"
|
||||
) {
|
||||
using namespace mean_field;
|
||||
|
||||
auto finiteElements = makeFiniteElements();
|
||||
REQUIRE(finiteElements.okay());
|
||||
|
||||
constexpr double radius = utils::RADIUS;
|
||||
const double polytropicConstant = 2.0 * utils::G * radius * radius / std::numbers::pi_v<double>;
|
||||
const double seedCentralDensity = std::numbers::pi_v<double> * utils::MASS / (4.0 * radius * radius * radius);
|
||||
auto stellarModel = model::StellarModel(
|
||||
eos::Polytrope({.n = 1.0, .K = polytropicConstant}),
|
||||
surface::Isobaric({.Psurf = dimensions::PressureValue{0.0}}),
|
||||
integral::FixedTotalMass({.Mtotal = dimensions::MassValue{utils::MASS}}),
|
||||
integral::FixedAngularMomentum({.Jtotal = dimensions::AngularMomentumValue{0.05}})
|
||||
);
|
||||
auto discretization = equilibrium::makeStellarDiscretization(
|
||||
std::move(finiteElements), normalization::PhysicalRieszDiagonal{dimensions::LengthValue{radius}, utils::G}
|
||||
);
|
||||
auto context = solver::makeContext(
|
||||
std::move(stellarModel), std::move(discretization), preconditioning::makePreconditioner(),
|
||||
solver::linear::FGMRES({.restartLength = 20, .printLevel = -1}),
|
||||
seed::LaneEmden({.centralDensity = dimensions::DensityValue{seedCentralDensity}})
|
||||
);
|
||||
using Problem = typename std::remove_cvref_t<decltype(context)>::ProblemType;
|
||||
STATIC_CHECK(Problem::hasFixedAngularMomentum);
|
||||
STATIC_CHECK_FALSE(Problem::hasFixedCentralDensity);
|
||||
|
||||
REQUIRE(context.isReady());
|
||||
CHECK_FALSE(context.hasActiveSolver());
|
||||
{
|
||||
auto equilibriumSolver = solver::make(context, solver::nonlinear::Newton{});
|
||||
CHECK(equilibriumSolver.isReady());
|
||||
CHECK(context.hasActiveSolver());
|
||||
}
|
||||
CHECK_FALSE(context.hasActiveSolver());
|
||||
REQUIRE(context.isReady());
|
||||
auto nextSolver = solver::make(context, solver::nonlinear::Newton{});
|
||||
CHECK(nextSolver.isReady());
|
||||
}
|
||||
|
||||
TEST_CASE(
|
||||
"Fixed Angular Momentum User API Generates Rotation And Its Composable Solver Border",
|
||||
"[user-api][fixed-angular-momentum][type]"
|
||||
|
||||
Reference in New Issue
Block a user