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:
608
tests/deformation/contracts.cpp
Normal file
608
tests/deformation/contracts.cpp
Normal file
@@ -0,0 +1,608 @@
|
||||
#include <concepts>
|
||||
|
||||
#include <catch2/catch_test_macros.hpp>
|
||||
|
||||
#include <mfem.hpp>
|
||||
|
||||
import mean_field;
|
||||
import test_helpers;
|
||||
|
||||
namespace {
|
||||
struct DeformationCompilationContext final { };
|
||||
|
||||
constexpr mean_field::deformation::SurfaceDeformationDescriptor surfaceDescriptor{
|
||||
.name = "TestRadialSurface",
|
||||
.spatialDimension = 3,
|
||||
.motionKind = mean_field::deformation::SurfaceMotionKind::Radial,
|
||||
.linearOnReferenceGeometry = true,
|
||||
.requiresStarShapedReferenceSurface = true,
|
||||
.hasExactDerivativeTranspose = true,
|
||||
.hasExactPullbackDerivative = true,
|
||||
.translationTreatment = mean_field::deformation::GeometricGaugeTreatment::ExcludedByParameterization,
|
||||
.orientationTreatment = mean_field::deformation::GeometricGaugeTreatment::ExcludedByParameterization
|
||||
};
|
||||
|
||||
constexpr mean_field::deformation::InteriorDeformationExtensionDescriptor interiorDescriptor{
|
||||
.name = "TestRadialInteriorExtension",
|
||||
.spatialDimension = 3,
|
||||
.linearOnReferenceGeometry = true,
|
||||
.requiresRadialFoliation = true,
|
||||
.requiresAuxiliarySolve = false,
|
||||
.hasExactDerivativeTranspose = true,
|
||||
.hasExactPullbackDerivative = true,
|
||||
.centerBehavior = mean_field::deformation::InteriorCenterBehavior::FixedAtReferenceCenter
|
||||
};
|
||||
|
||||
constexpr mean_field::deformation::VacuumDeformationExtensionDescriptor vacuumDescriptor{
|
||||
.name = "TestFixedInfinityExtension",
|
||||
.spatialDimension = 3,
|
||||
.linearOnReferenceGeometry = true,
|
||||
.requiresRadialFoliation = true,
|
||||
.requiresAuxiliarySolve = false,
|
||||
.hasExactDerivativeTranspose = true,
|
||||
.hasExactPullbackDerivative = true,
|
||||
.outerBoundaryBehavior = mean_field::deformation::VacuumOuterBoundaryBehavior::FixedAtReferenceInfinity
|
||||
};
|
||||
|
||||
template <
|
||||
bool HasBuild = true,
|
||||
bool HasJacobian = true,
|
||||
bool HasJacobianTranspose = true,
|
||||
bool HasPullbackDerivative = true>
|
||||
class PreparedSurfaceFixture final {
|
||||
public:
|
||||
[[nodiscard]] mean_field::deformation::SurfaceDeformationDescriptor descriptor() const noexcept {
|
||||
return surfaceDescriptor;
|
||||
}
|
||||
|
||||
[[nodiscard]] int parameterCount() const noexcept {
|
||||
return 4;
|
||||
}
|
||||
|
||||
[[nodiscard]] int surfaceDisplacementSize() const noexcept {
|
||||
return 12;
|
||||
}
|
||||
|
||||
void buildSurfaceDisplacement(
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasBuild
|
||||
{
|
||||
}
|
||||
|
||||
void applyJacobian(
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasJacobian
|
||||
{
|
||||
}
|
||||
|
||||
void applyJacobianTranspose(
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasJacobianTranspose
|
||||
{
|
||||
}
|
||||
|
||||
void applyPullbackDerivative(
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasPullbackDerivative
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Prepared, bool HasDescriptor = true, bool HasValidation = true, bool HasCompilation = true>
|
||||
class SurfacePrescriptionFixture final {
|
||||
public:
|
||||
using PreparedType = Prepared;
|
||||
|
||||
[[nodiscard]] mean_field::deformation::SurfaceDeformationDescriptor descriptor() const noexcept
|
||||
requires HasDescriptor
|
||||
{
|
||||
return surfaceDescriptor;
|
||||
}
|
||||
|
||||
void validate() const
|
||||
requires HasValidation
|
||||
{
|
||||
}
|
||||
|
||||
static constexpr bool hasCompilation = HasCompilation;
|
||||
};
|
||||
|
||||
template <
|
||||
typename Prepared,
|
||||
bool HasDescriptor,
|
||||
bool HasValidation,
|
||||
bool HasCompilation>
|
||||
requires HasCompilation
|
||||
Prepared compileSurfaceDeformationPrescription(
|
||||
const SurfacePrescriptionFixture<
|
||||
Prepared,
|
||||
HasDescriptor,
|
||||
HasValidation,
|
||||
HasCompilation> &,
|
||||
const DeformationCompilationContext &
|
||||
) {
|
||||
return {};
|
||||
}
|
||||
|
||||
template <
|
||||
bool HasBuild = true,
|
||||
bool HasJacobian = true,
|
||||
bool HasJacobianTranspose = true,
|
||||
bool HasPullbackDerivative = true,
|
||||
bool HasScalarDofCount = true,
|
||||
bool HasSupportQuery = true>
|
||||
class PreparedInteriorExtensionFixture final {
|
||||
public:
|
||||
[[nodiscard]] mean_field::deformation::InteriorDeformationExtensionDescriptor descriptor() const noexcept {
|
||||
return interiorDescriptor;
|
||||
}
|
||||
|
||||
[[nodiscard]] int surfaceDisplacementSize() const noexcept {
|
||||
return 12;
|
||||
}
|
||||
|
||||
[[nodiscard]] int interiorDisplacementSize() const noexcept {
|
||||
return 24;
|
||||
}
|
||||
|
||||
[[nodiscard]] int scalarTrueDofCount() const noexcept
|
||||
requires HasScalarDofCount
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
|
||||
[[nodiscard]] bool hasStellarSupport(const int) const
|
||||
requires HasSupportQuery
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void buildInteriorDisplacement(
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasBuild
|
||||
{
|
||||
}
|
||||
|
||||
void applyJacobian(
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasJacobian
|
||||
{
|
||||
}
|
||||
|
||||
void applyJacobianTranspose(
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasJacobianTranspose
|
||||
{
|
||||
}
|
||||
|
||||
void applyPullbackDerivative(
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasPullbackDerivative
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Prepared, bool HasDescriptor = true, bool HasValidation = true, bool HasCompilation = true>
|
||||
class InteriorExtensionFixture final {
|
||||
public:
|
||||
using PreparedType = Prepared;
|
||||
|
||||
[[nodiscard]] mean_field::deformation::InteriorDeformationExtensionDescriptor descriptor() const noexcept
|
||||
requires HasDescriptor
|
||||
{
|
||||
return interiorDescriptor;
|
||||
}
|
||||
|
||||
void validate() const
|
||||
requires HasValidation
|
||||
{
|
||||
}
|
||||
|
||||
static constexpr bool hasCompilation = HasCompilation;
|
||||
};
|
||||
|
||||
template <
|
||||
typename Prepared,
|
||||
bool HasDescriptor,
|
||||
bool HasValidation,
|
||||
bool HasCompilation>
|
||||
requires HasCompilation
|
||||
Prepared compileInteriorDeformationExtension(
|
||||
const InteriorExtensionFixture<
|
||||
Prepared,
|
||||
HasDescriptor,
|
||||
HasValidation,
|
||||
HasCompilation> &,
|
||||
const DeformationCompilationContext &
|
||||
) {
|
||||
return {};
|
||||
}
|
||||
|
||||
template <
|
||||
bool HasBuild = true,
|
||||
bool HasJacobian = true,
|
||||
bool HasJacobianTranspose = true,
|
||||
bool HasPullbackDerivative = true,
|
||||
bool HasScalarDofCount = true,
|
||||
bool HasSupportQuery = true>
|
||||
class PreparedVacuumExtensionFixture final {
|
||||
public:
|
||||
[[nodiscard]] mean_field::deformation::VacuumDeformationExtensionDescriptor descriptor() const noexcept {
|
||||
return vacuumDescriptor;
|
||||
}
|
||||
|
||||
[[nodiscard]] int surfaceDisplacementSize() const noexcept {
|
||||
return 12;
|
||||
}
|
||||
|
||||
[[nodiscard]] int vacuumDisplacementSize() const noexcept {
|
||||
return 30;
|
||||
}
|
||||
|
||||
[[nodiscard]] int scalarTrueDofCount() const noexcept
|
||||
requires HasScalarDofCount
|
||||
{
|
||||
return 10;
|
||||
}
|
||||
|
||||
[[nodiscard]] bool hasVacuumSupport(const int) const
|
||||
requires HasSupportQuery
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void buildVacuumDisplacement(
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasBuild
|
||||
{
|
||||
}
|
||||
|
||||
void applyJacobian(
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasJacobian
|
||||
{
|
||||
}
|
||||
|
||||
void applyJacobianTranspose(
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasJacobianTranspose
|
||||
{
|
||||
}
|
||||
|
||||
void applyPullbackDerivative(
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasPullbackDerivative
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Prepared, bool HasDescriptor = true, bool HasValidation = true, bool HasCompilation = true>
|
||||
class VacuumExtensionFixture final {
|
||||
public:
|
||||
using PreparedType = Prepared;
|
||||
|
||||
[[nodiscard]] mean_field::deformation::VacuumDeformationExtensionDescriptor descriptor() const noexcept
|
||||
requires HasDescriptor
|
||||
{
|
||||
return vacuumDescriptor;
|
||||
}
|
||||
|
||||
void validate() const
|
||||
requires HasValidation
|
||||
{
|
||||
}
|
||||
|
||||
static constexpr bool hasCompilation = HasCompilation;
|
||||
};
|
||||
|
||||
template <
|
||||
typename Prepared,
|
||||
bool HasDescriptor,
|
||||
bool HasValidation,
|
||||
bool HasCompilation>
|
||||
requires HasCompilation
|
||||
Prepared compileVacuumDeformationExtension(
|
||||
const VacuumExtensionFixture<
|
||||
Prepared,
|
||||
HasDescriptor,
|
||||
HasValidation,
|
||||
HasCompilation> &,
|
||||
const DeformationCompilationContext &
|
||||
) {
|
||||
return {};
|
||||
}
|
||||
|
||||
using CompletePreparedSurface = PreparedSurfaceFixture<>;
|
||||
using CompleteSurfacePrescription = SurfacePrescriptionFixture<CompletePreparedSurface>;
|
||||
|
||||
using CompletePreparedInteriorExtension = PreparedInteriorExtensionFixture<>;
|
||||
using CompleteInteriorExtension = InteriorExtensionFixture<CompletePreparedInteriorExtension>;
|
||||
|
||||
using CompletePreparedVacuumExtension = PreparedVacuumExtensionFixture<>;
|
||||
using CompleteVacuumExtension = VacuumExtensionFixture<CompletePreparedVacuumExtension>;
|
||||
|
||||
constexpr mean_field::deformation::DomainDeformationDescriptor domainDescriptor{
|
||||
.surfaceDeformation = surfaceDescriptor,
|
||||
.stellarInteriorExtension = interiorDescriptor,
|
||||
.vacuumExtension = vacuumDescriptor,
|
||||
.linearOnReferenceGeometry = true,
|
||||
.requiresAuxiliarySolve = false,
|
||||
.hasExactDerivativeTranspose = true,
|
||||
.hasExactPullbackDerivative = true
|
||||
};
|
||||
|
||||
template <
|
||||
bool HasBuild = true,
|
||||
bool HasJacobian = true,
|
||||
bool HasJacobianTranspose = true,
|
||||
bool HasPullbackDerivative = true>
|
||||
class PreparedDomainDeformationFixture final {
|
||||
public:
|
||||
[[nodiscard]] mean_field::deformation::DomainDeformationDescriptor descriptor() const noexcept {
|
||||
return domainDescriptor;
|
||||
}
|
||||
|
||||
[[nodiscard]] int parameterCount() const noexcept {
|
||||
return 4;
|
||||
}
|
||||
|
||||
[[nodiscard]] int surfaceDisplacementSize() const noexcept {
|
||||
return 12;
|
||||
}
|
||||
|
||||
[[nodiscard]] int volumeDisplacementSize() const noexcept {
|
||||
return 24;
|
||||
}
|
||||
|
||||
void buildVolumeDisplacement(
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasBuild
|
||||
{
|
||||
}
|
||||
|
||||
void applyJacobian(
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasJacobian
|
||||
{
|
||||
}
|
||||
|
||||
void applyJacobianTranspose(
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasJacobianTranspose
|
||||
{
|
||||
}
|
||||
|
||||
void applyPullbackDerivative(
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
const mfem::Vector &,
|
||||
mfem::Vector &
|
||||
) const
|
||||
requires HasPullbackDerivative
|
||||
{
|
||||
}
|
||||
};
|
||||
} // namespace
|
||||
|
||||
TEST_CASE(
|
||||
"Surface Deformation Contracts Require Complete Forward And Pullback Operations",
|
||||
tags::surface_deformation_type_contract
|
||||
) {
|
||||
STATIC_CHECK(mean_field::deformation::PreparedSurfaceDeformationPrescription<CompletePreparedSurface>);
|
||||
STATIC_CHECK(mean_field::deformation::SurfaceDeformationPrescription<CompleteSurfacePrescription>);
|
||||
STATIC_CHECK(
|
||||
mean_field::deformation::SurfaceDeformationCompilable<
|
||||
CompleteSurfacePrescription, DeformationCompilationContext>
|
||||
);
|
||||
|
||||
STATIC_CHECK_FALSE(mean_field::deformation::PreparedSurfaceDeformationPrescription<PreparedSurfaceFixture<false>>);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedSurfaceDeformationPrescription<PreparedSurfaceFixture<true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedSurfaceDeformationPrescription<PreparedSurfaceFixture<true, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedSurfaceDeformationPrescription<PreparedSurfaceFixture<true, true, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::SurfaceDeformationPrescription<
|
||||
SurfacePrescriptionFixture<CompletePreparedSurface, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::SurfaceDeformationPrescription<
|
||||
SurfacePrescriptionFixture<CompletePreparedSurface, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::SurfaceDeformationCompilable<
|
||||
SurfacePrescriptionFixture<CompletePreparedSurface, true, true, false>, DeformationCompilationContext>
|
||||
);
|
||||
}
|
||||
|
||||
TEST_CASE(
|
||||
"Interior Extension Contracts Require Complete Forward And Pullback Operations",
|
||||
tags::interior_deformation_extension_type_contract
|
||||
) {
|
||||
STATIC_CHECK(mean_field::deformation::PreparedInteriorDeformationExtension<CompletePreparedInteriorExtension>);
|
||||
STATIC_CHECK(mean_field::deformation::InteriorDeformationExtension<CompleteInteriorExtension>);
|
||||
STATIC_CHECK(
|
||||
mean_field::deformation::InteriorDeformationExtensionCompilable<
|
||||
CompleteInteriorExtension, DeformationCompilationContext>
|
||||
);
|
||||
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedInteriorDeformationExtension<PreparedInteriorExtensionFixture<false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedInteriorDeformationExtension<PreparedInteriorExtensionFixture<true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedInteriorDeformationExtension<
|
||||
PreparedInteriorExtensionFixture<true, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedInteriorDeformationExtension<
|
||||
PreparedInteriorExtensionFixture<true, true, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedInteriorDeformationExtension<
|
||||
PreparedInteriorExtensionFixture<true, true, true, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedInteriorDeformationExtension<
|
||||
PreparedInteriorExtensionFixture<true, true, true, true, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(mean_field::deformation::PreparedInteriorDeformationExtension<CompletePreparedVacuumExtension>);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::InteriorDeformationExtension<
|
||||
InteriorExtensionFixture<CompletePreparedInteriorExtension, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::InteriorDeformationExtensionCompilable<
|
||||
InteriorExtensionFixture<CompletePreparedInteriorExtension, true, true, false>,
|
||||
DeformationCompilationContext>
|
||||
);
|
||||
}
|
||||
|
||||
TEST_CASE(
|
||||
"Vacuum Extension Contracts Require Complete Forward And Pullback Operations",
|
||||
tags::vacuum_deformation_extension_type_contract
|
||||
) {
|
||||
STATIC_CHECK(mean_field::deformation::PreparedVacuumDeformationExtension<CompletePreparedVacuumExtension>);
|
||||
STATIC_CHECK(mean_field::deformation::VacuumDeformationExtension<CompleteVacuumExtension>);
|
||||
STATIC_CHECK(
|
||||
mean_field::deformation::VacuumDeformationExtensionCompilable<
|
||||
CompleteVacuumExtension, DeformationCompilationContext>
|
||||
);
|
||||
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedVacuumDeformationExtension<PreparedVacuumExtensionFixture<false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedVacuumDeformationExtension<PreparedVacuumExtensionFixture<true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedVacuumDeformationExtension<PreparedVacuumExtensionFixture<true, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedVacuumDeformationExtension<
|
||||
PreparedVacuumExtensionFixture<true, true, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedVacuumDeformationExtension<
|
||||
PreparedVacuumExtensionFixture<true, true, true, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedVacuumDeformationExtension<
|
||||
PreparedVacuumExtensionFixture<true, true, true, true, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(mean_field::deformation::PreparedVacuumDeformationExtension<CompletePreparedInteriorExtension>);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::VacuumDeformationExtension<
|
||||
VacuumExtensionFixture<CompletePreparedVacuumExtension, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::VacuumDeformationExtensionCompilable<
|
||||
VacuumExtensionFixture<CompletePreparedVacuumExtension, true, true, false>, DeformationCompilationContext>
|
||||
);
|
||||
}
|
||||
|
||||
TEST_CASE(
|
||||
"Prepared Domain Deformation Contracts Require Complete Lift And Pullback Operations",
|
||||
tags::domain_deformation_type_contract
|
||||
) {
|
||||
STATIC_CHECK(mean_field::deformation::PreparedDomainDeformationOperator<PreparedDomainDeformationFixture<>>);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedDomainDeformationOperator<PreparedDomainDeformationFixture<false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedDomainDeformationOperator<PreparedDomainDeformationFixture<true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedDomainDeformationOperator<PreparedDomainDeformationFixture<true, true, false>>
|
||||
);
|
||||
STATIC_CHECK_FALSE(
|
||||
mean_field::deformation::PreparedDomainDeformationOperator<
|
||||
PreparedDomainDeformationFixture<true, true, true, false>>
|
||||
);
|
||||
}
|
||||
|
||||
TEST_CASE(
|
||||
"Deformation Descriptors Report Geometry And Exact Linearization Capabilities",
|
||||
tags::deformation_type_contract
|
||||
) {
|
||||
STATIC_CHECK(surfaceDescriptor.isValid());
|
||||
STATIC_CHECK(surfaceDescriptor.supportsExactNewtonLinearization());
|
||||
STATIC_CHECK(interiorDescriptor.isValid());
|
||||
STATIC_CHECK(interiorDescriptor.supportsExactNewtonLinearization());
|
||||
STATIC_CHECK(vacuumDescriptor.isValid());
|
||||
STATIC_CHECK(vacuumDescriptor.supportsExactNewtonLinearization());
|
||||
STATIC_CHECK(domainDescriptor.isValid());
|
||||
STATIC_CHECK(domainDescriptor.supportsExactNewtonLinearization());
|
||||
|
||||
constexpr auto invalidInteriorDescriptor = [] {
|
||||
auto descriptor = interiorDescriptor;
|
||||
descriptor.centerBehavior = mean_field::deformation::InteriorCenterBehavior::Unspecified;
|
||||
return descriptor;
|
||||
}();
|
||||
|
||||
constexpr auto invalidVacuumDescriptor = [] {
|
||||
auto descriptor = vacuumDescriptor;
|
||||
descriptor.outerBoundaryBehavior = mean_field::deformation::VacuumOuterBoundaryBehavior::Unspecified;
|
||||
return descriptor;
|
||||
}();
|
||||
|
||||
STATIC_CHECK_FALSE(invalidInteriorDescriptor.isValid());
|
||||
STATIC_CHECK_FALSE(invalidVacuumDescriptor.isValid());
|
||||
|
||||
CHECK(surfaceDescriptor.motionKind == mean_field::deformation::SurfaceMotionKind::Radial);
|
||||
CHECK(interiorDescriptor.centerBehavior == mean_field::deformation::InteriorCenterBehavior::FixedAtReferenceCenter);
|
||||
CHECK(
|
||||
vacuumDescriptor.outerBoundaryBehavior ==
|
||||
mean_field::deformation::VacuumOuterBoundaryBehavior::FixedAtReferenceInfinity
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user