feat(newton): first newton solver implementation
This commit is contained in:
@@ -57,33 +57,26 @@ namespace {
|
||||
blocks::type_list<>,
|
||||
preconditioning::IdentityOperatorCharacteristics,
|
||||
preconditioning::backend::Identity>;
|
||||
using LifetimeModel = mean_field::model::StellarModel<mean_field::models::SpecificationSet<
|
||||
using LifetimeModel = mean_field::model::StellarModel<mean_field::models::SpecificationSet<
|
||||
mean_field::eos::Polytrope,
|
||||
mean_field::surface::Isobaric,
|
||||
mean_field::models::FixedTotalMass,
|
||||
mean_field::models::FixedCentralDensity>>;
|
||||
using LifetimeProblem = mean_field::equilibrium::StellarEquilibriumProblem<LifetimeModel>;
|
||||
using LifetimeBlock = decltype(preconditioning::makePreconditioner(
|
||||
std::declval<const LifetimeProblem &>()
|
||||
));
|
||||
using LifetimePrepared = preconditioning::PreparedStellarPreconditioner<
|
||||
LifetimeProblem,
|
||||
LifetimeBlock>;
|
||||
using LifetimeProblem = mean_field::equilibrium::StellarEquilibriumProblem<LifetimeModel>;
|
||||
using LifetimeBlock = decltype(preconditioning::makePreconditioner(std::declval<const LifetimeProblem &>()));
|
||||
using LifetimePrepared = preconditioning::PreparedStellarPreconditioner<LifetimeProblem, LifetimeBlock>;
|
||||
|
||||
template <typename Problem, typename Block>
|
||||
concept CanPrepareStellarPreconditioner = requires(const Problem &problem, Block block) {
|
||||
preconditioning::prepare(problem, std::move(block));
|
||||
};
|
||||
concept CanPrepareStellarPreconditioner =
|
||||
requires(const Problem &problem, Block block) { preconditioning::prepare(problem, std::move(block)); };
|
||||
|
||||
template <typename Problem, typename Block>
|
||||
concept CanPrepareStellarPreconditionerFromTemporary = requires(Block block) {
|
||||
preconditioning::prepare(std::declval<Problem &&>(), std::move(block));
|
||||
};
|
||||
concept CanPrepareStellarPreconditionerFromTemporary =
|
||||
requires(Block block) { preconditioning::prepare(std::declval<Problem &&>(), std::move(block)); };
|
||||
|
||||
template <typename Problem, typename Block>
|
||||
concept CanPrepareStellarPreconditionerFromConstTemporary = requires(Block block) {
|
||||
preconditioning::prepare(std::declval<const Problem &&>(), std::move(block));
|
||||
};
|
||||
concept CanPrepareStellarPreconditionerFromConstTemporary =
|
||||
requires(Block block) { preconditioning::prepare(std::declval<const Problem &&>(), std::move(block)); };
|
||||
|
||||
[[nodiscard]] blocks::form_layout<Form> makeUnevenLayout() {
|
||||
return {
|
||||
@@ -221,7 +214,7 @@ TEST_CASE(
|
||||
integral::FixedTotalMass({.Mtotal = dimensions::MassValue{mass}}),
|
||||
constraint::FixedCentralDensity({.RhoC = dimensions::DensityValue{centralDensity}})
|
||||
);
|
||||
auto problem = equilibrium::discretize(model, finiteElements);
|
||||
auto problem = equilibrium::discretize(model, std::move(finiteElements));
|
||||
auto projected = seed::makeProjectedEquilibriumState(problem, seed::LaneEmden({.radialSampleCount = 512}));
|
||||
problem.Prepare(projected.values, makeDependencies(), zeroRotation());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user