perf(jacobian-action): major updates to jacobian action application by removing redudant quadrature work. ~5x increase in speed
This commit is contained in:
@@ -6,6 +6,8 @@ module;
|
||||
#include <type_traits>
|
||||
export module mean_field:utils.blocks;
|
||||
|
||||
export import :model.specifications;
|
||||
|
||||
export namespace mean_field::utils::blocks {
|
||||
inline constexpr int dynamic_block_size = -1;
|
||||
|
||||
@@ -19,6 +21,18 @@ export namespace mean_field::utils::blocks {
|
||||
static constexpr int static_block_size = dynamic_block_size;
|
||||
};
|
||||
|
||||
template <typename GeneratedValue> struct generated_value_block final : value_block_base {
|
||||
using GeneratedType = GeneratedValue;
|
||||
|
||||
static constexpr int static_block_size = static_cast<int>(GeneratedValue::scalarArity);
|
||||
};
|
||||
|
||||
template <typename GeneratedResidual> struct generated_residual_block final : residual_block_base {
|
||||
using GeneratedType = GeneratedResidual;
|
||||
|
||||
static constexpr int static_block_size = static_cast<int>(GeneratedResidual::scalarArity);
|
||||
};
|
||||
|
||||
struct term { };
|
||||
struct field { };
|
||||
|
||||
@@ -96,25 +110,44 @@ export namespace mean_field::utils::blocks {
|
||||
static inline constexpr specific specific_term{};
|
||||
};
|
||||
|
||||
struct barotropic_constant final : field {
|
||||
struct mass_normalization final : term {
|
||||
struct value final : value_block_base {
|
||||
static constexpr int static_block_size = 1;
|
||||
};
|
||||
struct fixed_total_mass final : field {
|
||||
using SpecificationType = models::FixedTotalMass;
|
||||
using MultiplierType = models::MultiplierFor<SpecificationType>;
|
||||
using ResidualType = models::ResidualFor<SpecificationType>;
|
||||
|
||||
struct residual final : residual_block_base {
|
||||
static constexpr int static_block_size = 1;
|
||||
};
|
||||
struct mass_normalization final : term {
|
||||
using value = generated_value_block<MultiplierType>;
|
||||
using residual = generated_residual_block<ResidualType>;
|
||||
};
|
||||
|
||||
static inline constexpr mass_normalization mass_normalization_term{};
|
||||
};
|
||||
|
||||
struct fixed_central_density final : field {
|
||||
using SpecificationType = models::FixedCentralDensity;
|
||||
using BorderType = models::BorderFor<SpecificationType>;
|
||||
using ResidualType = models::ResidualFor<SpecificationType>;
|
||||
|
||||
struct central_value final : term {
|
||||
using value = generated_value_block<BorderType>;
|
||||
using residual = generated_residual_block<ResidualType>;
|
||||
};
|
||||
|
||||
static inline constexpr central_value central_value_term{};
|
||||
};
|
||||
|
||||
// Compatibility name for the current barotropic formulation. The scalar
|
||||
// is generated by FixedTotalMass; its realization in this formulation is
|
||||
// the historical C coordinate.
|
||||
using barotropic_constant = fixed_total_mass;
|
||||
|
||||
inline constexpr density density_field{};
|
||||
inline constexpr displacement displacement_field{};
|
||||
inline constexpr surface_deformation surface_deformation_field{};
|
||||
inline constexpr gravity gravity_field{};
|
||||
inline constexpr enthalpy enthalpy_field{};
|
||||
inline constexpr fixed_total_mass fixed_total_mass_constraint{};
|
||||
inline constexpr fixed_central_density fixed_central_density_phase{};
|
||||
inline constexpr barotropic_constant barotropic_constant_field{};
|
||||
|
||||
template <typename... Types> struct type_list {
|
||||
@@ -489,6 +522,61 @@ export namespace mean_field::utils::blocks {
|
||||
density::mass::value,
|
||||
surface_deformation::parameters::value>>;
|
||||
|
||||
// Bordered n=3 family closure. The original stellar coordinates remain a
|
||||
// contiguous prefix and the phase border and row are appended last.
|
||||
using central_density_bordered_stellar_equilibrium_form = block_form<
|
||||
type_list<
|
||||
density::mass::value,
|
||||
surface_deformation::parameters::value,
|
||||
gravity::gradient::value,
|
||||
gravity::poisson::value,
|
||||
enthalpy::specific::value,
|
||||
barotropic_constant::mass_normalization::value,
|
||||
fixed_central_density::central_value::value>,
|
||||
type_list<
|
||||
gravity::gradient::residual,
|
||||
gravity::poisson::residual,
|
||||
density::mass::residual,
|
||||
surface_deformation::shape_equilibrium::residual,
|
||||
enthalpy::specific::residual,
|
||||
barotropic_constant::mass_normalization::residual,
|
||||
fixed_central_density::central_value::residual>>;
|
||||
|
||||
using central_density_bordered_stellar_equilibrium_jacobian_form = type_list<
|
||||
block_row<
|
||||
gravity::gradient::residual,
|
||||
gravity::gradient::value,
|
||||
gravity::poisson::value,
|
||||
surface_deformation::parameters::value>,
|
||||
block_row<
|
||||
gravity::poisson::residual,
|
||||
gravity::gradient::value,
|
||||
density::mass::value,
|
||||
surface_deformation::parameters::value>,
|
||||
block_row<
|
||||
density::mass::residual,
|
||||
density::mass::value,
|
||||
enthalpy::specific::value,
|
||||
surface_deformation::parameters::value>,
|
||||
block_row<
|
||||
surface_deformation::shape_equilibrium::residual,
|
||||
density::mass::value,
|
||||
surface_deformation::parameters::value,
|
||||
gravity::gradient::value,
|
||||
enthalpy::specific::value>,
|
||||
block_row<
|
||||
enthalpy::specific::residual,
|
||||
enthalpy::specific::value,
|
||||
gravity::poisson::value,
|
||||
surface_deformation::parameters::value,
|
||||
barotropic_constant::mass_normalization::value,
|
||||
fixed_central_density::central_value::value>,
|
||||
block_row<
|
||||
barotropic_constant::mass_normalization::residual,
|
||||
density::mass::value,
|
||||
surface_deformation::parameters::value>,
|
||||
block_row<fixed_central_density::central_value::residual, enthalpy::specific::value>>;
|
||||
|
||||
// Columns: [d, h]
|
||||
// Rows: [R_d]
|
||||
using pressure_force_form = block_form<
|
||||
@@ -509,4 +597,8 @@ export namespace mean_field::utils::blocks {
|
||||
static_assert(valid_jacobian_form<
|
||||
surface_deformed_stellar_equilibrium_form,
|
||||
surface_deformed_stellar_equilibrium_jacobian_form>);
|
||||
|
||||
static_assert(valid_jacobian_form<
|
||||
central_density_bordered_stellar_equilibrium_form,
|
||||
central_density_bordered_stellar_equilibrium_jacobian_form>);
|
||||
} // namespace mean_field::utils::blocks
|
||||
|
||||
Reference in New Issue
Block a user