Files
MeanField/CMakeLists.txt
Emily Boudreaux 85500fef3b 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.
2026-09-01 11:50:13 -04:00

313 lines
14 KiB
CMake

cmake_minimum_required(VERSION 3.28)
project(MeanField C CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(MEAN_FIELD_UNIFORM_POLYNOMIAL_ORDER_INCREMENT 0 CACHE STRING
"Uniform increment applied to every registered finite-element family order")
if (NOT MEAN_FIELD_UNIFORM_POLYNOMIAL_ORDER_INCREMENT MATCHES "^[0-9]+$")
message(FATAL_ERROR "MEAN_FIELD_UNIFORM_POLYNOMIAL_ORDER_INCREMENT must be a non-negative integer")
endif ()
add_compile_options(
-gdwarf-4
-Wno-unused-parameter
-Wno-unused-function
-Wno-unused-variable
-Wno-unused-const-variable
-Wno-unused-private-field
-Wno-unused-but-set-variable
-Wno-unused-local-typedefs
-Wno-unused-value
-Wno-unused-label
-Wno-unused-lambda-capture
)
find_package(MPI REQUIRED COMPONENTS CXX)
find_package(XAD REQUIRED)
find_package(mfem REQUIRED)
find_package(UMFPACK REQUIRED)
find_package(hypre REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_check_modules(stroid REQUIRED IMPORTED_TARGET stroid)
add_library(mean_field)
target_compile_definitions(mean_field
PUBLIC
MEAN_FIELD_UNIFORM_POLYNOMIAL_ORDER_INCREMENT=${MEAN_FIELD_UNIFORM_POLYNOMIAL_ORDER_INCREMENT}
)
target_include_directories(mean_field
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/libmeanfield/include>
)
target_sources(mean_field
PRIVATE
libmeanfield/impl/analysis/integral.cpp
libmeanfield/impl/fem.cpp
libmeanfield/impl/mapping/coefficients.cpp
libmeanfield/impl/mapping/compactification/kelvin.cpp
libmeanfield/impl/physics/gravity.cpp
libmeanfield/impl/physics/solid.cpp
libmeanfield/impl/utils/domain.cpp
libmeanfield/impl/utils/misc.cpp
libmeanfield/impl/integrators/advection.cpp
libmeanfield/impl/integrators/centrifugal.cpp
libmeanfield/impl/integrators/coriolis.cpp
libmeanfield/impl/integrators/gravity.cpp
libmeanfield/impl/integrators/mass_continuity.cpp
libmeanfield/impl/integrators/viscosity.cpp
libmeanfield/impl/mapping/domain_mapper.cpp
libmeanfield/impl/mapping/transformations.cpp
libmeanfield/impl/deformation/nodal_radial_surface.cpp
libmeanfield/impl/deformation/radial_extensions.cpp
libmeanfield/impl/operators/gravity_field.cpp
libmeanfield/impl/operators/gravity_field_jacobian.cpp
libmeanfield/impl/operators/kernels/gravity_kernels.cpp
libmeanfield/impl/operators/prepared_hdiv_mass.cpp
libmeanfield/impl/operators/prepared_gravity_source.cpp
libmeanfield/impl/operators/contexts/gravity_field_context.cpp
libmeanfield/impl/operators/kernels/barotropic_closure_kernels.cpp
libmeanfield/impl/operators/prepared_barotropic_closure.cpp
libmeanfield/impl/operators/contexts/barotropic_closure_linearization_context.cpp
libmeanfield/impl/operators/kernels/hydrostatic_equilibrium_kernels.cpp
libmeanfield/impl/operators/contexts/hydrostatic_equilibrium_context.cpp
libmeanfield/impl/operators/prepared_hydrostatic_equilibrium.cpp
libmeanfield/impl/operators/kernels/pressure_force_kernels.cpp
libmeanfield/impl/operators/contexts/pressure_force_context.cpp
libmeanfield/impl/operators/prepared_pressure_force.cpp
libmeanfield/impl/operators/kernels/gravity_displacement_force_kernels.cpp
libmeanfield/impl/operators/prepared_gravity_displacement_force.cpp
libmeanfield/impl/operators/contexts/rotation_displacement_force_context.cpp
libmeanfield/impl/operators/kernels/rotation_displacement_force_kernels.cpp
libmeanfield/impl/operators/prepared_rotation_displacement_force.cpp
libmeanfield/impl/operators/prepared_displacement_operator.cpp
libmeanfield/impl/models/polytropic.cpp
libmeanfield/impl/operators/prepared_mass_normalization.cpp
libmeanfield/impl/operators/prepared_stellar_equilibrium.cpp
)
target_sources(mean_field
PUBLIC
FILE_SET CXX_MODULES FILES
libmeanfield/interface/mean_field.cppm
libmeanfield/interface/fem.cppm
libmeanfield/interface/analysis/integral.cppm
libmeanfield/interface/boundary/context.cppm
libmeanfield/interface/mapping/coefficients.cppm
libmeanfield/interface/mapping/domain_mapper.cppm
libmeanfield/interface/mapping/types.cppm
libmeanfield/interface/mapping/transformations.cppm
libmeanfield/interface/mapping/compactification/compactification.cppm
libmeanfield/interface/mapping/compactification/kelvin.cppm
libmeanfield/interface/mapping/compactification/options.cppm
libmeanfield/interface/physics/gravity.cppm
libmeanfield/interface/physics/solid.cppm
libmeanfield/interface/utils/domain.cppm
libmeanfield/interface/utils/misc.cppm
libmeanfield/interface/utils/user.cppm
libmeanfield/interface/integrators/advection.cppm
libmeanfield/interface/integrators/centrifugal.cppm
libmeanfield/interface/integrators/coriolis.cppm
libmeanfield/interface/integrators/gravity.cppm
libmeanfield/interface/integrators/mass_continuity.cppm
libmeanfield/interface/integrators/pressure_gradient.cppm
libmeanfield/interface/integrators/viscosity.cppm
libmeanfield/interface/quadrature/policy.cppm
libmeanfield/interface/quadrature/mfem.cppm
libmeanfield/interface/solver/fields.cppm
libmeanfield/interface/operators/gravity_field.cppm
libmeanfield/interface/operators/gravity_field_jacobian.cppm
libmeanfield/interface/operators/kernels/gravity_kernels.cppm
libmeanfield/interface/operators/kernels/barotropic_closure_kernels.cppm
libmeanfield/interface/utils/blocks.cppm
libmeanfield/interface/operators/contexts/gravity_field_context.cppm
libmeanfield/interface/operators/prepared_gravity_source.cppm
libmeanfield/interface/operators/prepared_hdiv_mass.cppm
libmeanfield/interface/operators/prepared_hydrostatic_equilibrium_operator.cppm
libmeanfield/interface/field/field_base.cppm
libmeanfield/interface/field/field_registry.cppm
libmeanfield/interface/field/field_mfem.cppm
libmeanfield/interface/operators/prepared_barotropic_closure_operator.cppm
libmeanfield/interface/operators/contexts/barotropic_closure_linearization_context.cppm
libmeanfield/interface/physics/rigid_rotation.cppm
libmeanfield/interface/operators/kernels/hydrostatic_equilibrium_kernels.cppm
libmeanfield/interface/operators/contexts/hydrostatic_equilibrium_context.cppm
libmeanfield/interface/operators/kernels/pressure_force_kernels.cppm
libmeanfield/interface/operators/contexts/pressure_force_context.cppm
libmeanfield/interface/operators/prepared_pressure_force.cppm
libmeanfield/interface/operators/kernels/gravity_displacement_force_kernels.cppm
libmeanfield/interface/operators/prepared_gravity_displacement_force.cppm
libmeanfield/interface/operators/contexts/rotation_displacement_force_context.cppm
libmeanfield/interface/operators/kernels/rotation_displacement_force_kernels.cppm
libmeanfield/interface/operators/prepared_rotation_displacement_force.cppm
libmeanfield/interface/operators/prepared_displacement_operator.cppm
libmeanfield/interface/eos/quantities.cppm
libmeanfield/interface/eos/relations.cppm
libmeanfield/interface/eos/concepts.cppm
libmeanfield/interface/eos/evaluation.cppm
libmeanfield/interface/eos/pressure_surface.cppm
libmeanfield/interface/eos/runtime.cppm
libmeanfield/interface/eos/polytropic.cppm
libmeanfield/interface/models/structure/structure_base.cppm
libmeanfield/interface/models/structure/polytropic.cppm
libmeanfield/interface/models/structure_profile.cppm
libmeanfield/interface/surface/constant.cppm
libmeanfield/interface/surface/dependencies.cppm
libmeanfield/interface/surface/compiled.cppm
libmeanfield/interface/surface/compiler.cppm
libmeanfield/interface/deformation/descriptors.cppm
libmeanfield/interface/deformation/surface_prescription.cppm
libmeanfield/interface/deformation/nodal_radial_surface.cppm
libmeanfield/interface/deformation/interior_extension.cppm
libmeanfield/interface/deformation/vacuum_extension.cppm
libmeanfield/interface/deformation/radial_extensions.cppm
libmeanfield/interface/deformation/domain_deformation.cppm
libmeanfield/interface/models/stellar_model.cppm
libmeanfield/interface/operators/prepared_mass_normalization.cppm
libmeanfield/interface/operators/prepared_centering_constraint.cppm
libmeanfield/interface/operators/prepared_surface_constraint.cppm
libmeanfield/interface/operators/prepared_stellar_equilibrium.cppm
)
target_link_libraries(mean_field
PUBLIC
MPI::MPI_CXX
XAD::xad
mfem
PkgConfig::stroid
)
add_library(test_mod)
target_sources(test_mod
PUBLIC
FILE_SET CXX_MODULES FILES
tests/test_helpers.cppm
)
target_link_libraries(test_mod
PUBLIC
mean_field
)
find_package(Catch2 3 REQUIRED)
cmake_policy(SET CMP0167 NEW)
find_package(Boost REQUIRED)
pkg_check_modules(fourdst_config REQUIRED IMPORTED_TARGET fourdst_config)
add_executable(tests
tests/test_main.cpp
tests/physics/gravity.cpp
tests/geometry/volume.cpp
tests/quadrature/policy.cpp
tests/integrators/centrifugal.cpp
tests/integrators/gravity.cpp
tests/mapping/domain_mapper.cpp
tests/mapping/compactification/kelvin.cpp
tests/utils/blocks.cpp
tests/operators/gravity_field.cpp
tests/mapping/hdiv_mass_tensor.cpp
tests/operators/prepared_hdiv_mass.cpp
tests/operators/prepared_gravity_source.cpp
tests/operators/contexts/gravity_field_context.cpp
tests/physics/gravity_monopole_accuracy.cpp
tests/physics/barotrope.cpp
tests/physics/polytropic_eos_characterization.cpp
tests/physics/equation_of_state_type_system.cpp
tests/physics/equation_of_state_consumer_contracts.cpp
tests/physics/polytropic_eos_relations.cpp
tests/physics/equation_of_state_runtime_view.cpp
tests/surface/constant_surface_compilation.cpp
tests/operators/kernels/barotropic_closure_kernels.cpp
tests/operators/prepared_barotropic_closure.cpp
tests/operators/contexts/barotropic_closure_linearization_context.cpp
tests/operators/kernels/hydrostatic_equilibrium_kernels.cpp
tests/operators/contexts/hydrostatic_equilibrium_context.cpp
tests/operators/prepared_hydrostatic_equilibrium.cpp
tests/operators/prepared_hydrostatic_equilibrium_jacobian.cpp
tests/operators/prepared_hydrostatic_equilibrium_displacement_jacobian.cpp
tests/operators/prepared_hydrostatic_equilibrium_complete_jacobian.cpp
tests/operators/prepared_hydrostatic_equilibrium_analytic_accuracy.cpp
tests/physics/barotrope_pressure.cpp
tests/operators/kernels/pressure_force_kernels.cpp
tests/operators/contexts/pressure_force_context.cpp
tests/operators/prepared_pressure_force.cpp
tests/operators/gravity_displacement_force.cpp
tests/operators/gravity_displacement_force_analytic_comparisons.cpp
tests/operators/contexts/rotation_displacement_force_context.cpp
tests/operators/prepared_rotation_displacement_force.cpp
tests/operators/prepared_rotation_displacement_force_analytic.cpp
tests/operators/prepared_rotation_displacement_force_affine_deformation.cpp
tests/operators/prepared_displacement_operator.cpp
tests/models/stellar_model.cpp
tests/deformation/contracts.cpp
tests/deformation/surface_scalar_dof_map.cpp
tests/deformation/nodal_radial_surface.cpp
tests/deformation/radial_extensions.cpp
tests/deformation/domain_deformation.cpp
tests/operators/prepared_mass_normalization.cpp
tests/operators/prepared_stellar_equilibrium.cpp
tests/utils/domain.cpp
tests/field/field_base.cpp
tests/field/field_registry.cpp
tests/field/field_mfem.cpp
tests/field/field_dof_map.cpp
)
target_link_libraries(tests PRIVATE mean_field test_mod Catch2::Catch2 Boost::boost)
add_library(experiment_mod)
target_sources(experiment_mod
PUBLIC
FILE_SET CXX_MODULES FILES
experiments/experiment_results.cppm
experiments/stellar_null_space.cppm
)
target_link_libraries(experiment_mod
PUBLIC
mean_field
test_mod
)
add_executable(experiments
experiments/experiment_main.cpp
experiments/gravity_accuracy_budget.cpp
)
target_link_libraries(experiments PRIVATE mean_field test_mod experiment_mod Catch2::Catch2 Boost::boost)
add_executable(stellar_null_space_experiments
experiments/experiment_main.cpp
experiments/rigid_motion_null_space.cpp
experiments/gravity_completed_rigid_motion.cpp
experiments/coupled_gauge_modes.cpp
)
target_link_libraries(stellar_null_space_experiments
PRIVATE
mean_field
test_mod
experiment_mod
Catch2::Catch2
Boost::boost
)
include (CTest)
include (Catch)
catch_discover_tests(
tests
experiments
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
)