feat(surface): surface deformation prescriptions
restricted the unknown state vector to surface deformation and implemented one prescription, NodalRadialSurface, while the full volumetric displacment field is reconstructed analytically from that. This reduced the number of degrees of freedom in the system by a factor of 80 while also removing many null vectors from the system.
This commit is contained in:
@@ -526,6 +526,41 @@ TEST_CASE(
|
||||
CHECK(true);
|
||||
}
|
||||
|
||||
TEST_CASE(
|
||||
"Reduced Stellar Equilibrium Form Encodes Surface Shape Coordinates And Couplings",
|
||||
tags::reduced_stellar_geometry &tags::unit &tags::utils
|
||||
) {
|
||||
using form = blocks::surface_deformed_stellar_equilibrium_form;
|
||||
using jacobian = blocks::surface_deformed_stellar_equilibrium_jacobian_form;
|
||||
|
||||
constexpr auto surface_parameters =
|
||||
blocks::get_value_block<form>(blocks::surface_deformation_field.parameters_term);
|
||||
constexpr auto surface_shape =
|
||||
blocks::get_residual_block<form>(blocks::surface_deformation_field.shape_equilibrium_term);
|
||||
|
||||
STATIC_REQUIRE(form::value_block_count == 6);
|
||||
STATIC_REQUIRE(form::residual_block_count == 6);
|
||||
STATIC_REQUIRE(static_cast<int>(surface_parameters) == 1);
|
||||
STATIC_REQUIRE(static_cast<int>(surface_shape) == 3);
|
||||
STATIC_REQUIRE((blocks::valid_jacobian_form<form, jacobian>));
|
||||
|
||||
STATIC_REQUIRE(
|
||||
blocks::has_jacobian_coupling_v<
|
||||
blocks::gravity::gradient::residual, blocks::surface_deformation::parameters::value, jacobian>
|
||||
);
|
||||
STATIC_REQUIRE(
|
||||
blocks::has_jacobian_coupling_v<
|
||||
blocks::surface_deformation::shape_equilibrium::residual, blocks::surface_deformation::parameters::value,
|
||||
jacobian>
|
||||
);
|
||||
STATIC_REQUIRE_FALSE(blocks::contains_type_v<blocks::displacement::geometry::value, typename form::value_blocks>);
|
||||
STATIC_REQUIRE_FALSE(
|
||||
blocks::contains_type_v<blocks::displacement::geometry::residual, typename form::residual_blocks>
|
||||
);
|
||||
|
||||
CHECK(true);
|
||||
}
|
||||
|
||||
TEST_CASE(
|
||||
"Block Validators Reject Structurally Malformed Forms",
|
||||
tags::unit &tags::solver &tags::utils
|
||||
@@ -623,4 +658,4 @@ TEST_CASE(
|
||||
const std::array<int, form::value_block_count> invalid_value_sizes{11, 13, 17, 19, 23, 2};
|
||||
|
||||
CHECK_THROWS(blocks::form_layout<form>(invalid_value_sizes, residual_sizes));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user