From c8585bacd7c4ba20884f73c1b5154dbe3d5f44eb Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Wed, 12 Feb 2025 16:21:31 -0500 Subject: [PATCH 01/16] ci(gitignore): added .vscode --- .gitignore | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 07227a2..3d33190 100644 --- a/.gitignore +++ b/.gitignore @@ -56,4 +56,9 @@ tags *.log *.cache *.private -*.private/ \ No newline at end of file +*.private/ + +subprojects/mfem/ +subprojects/tetgen/ + +.vscode/ From 0bf4c40699245679cfb1e037c48ebf906ec1f61a Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Wed, 12 Feb 2025 16:22:00 -0500 Subject: [PATCH 02/16] fix(mk): removed directive for mk to delete build directory every run --- mk | 5 ----- 1 file changed, 5 deletions(-) diff --git a/mk b/mk index 6e3a90f..9bab354 100755 --- a/mk +++ b/mk @@ -1,10 +1,5 @@ #!/bin/bash -# Check if the build directory is present, and remove it -if [ -d "build" ]; then - rm -rf build -fi - # Check for the --noTest flag if [[ "$1" == "--noTest" ]]; then meson setup build -Dbuild_tests=false From 112e626760265233919cd3457ba82b1602d434b5 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Wed, 12 Feb 2025 16:24:13 -0500 Subject: [PATCH 03/16] feat(mfem): added mfem into source tree along with patch based build system MFEM is a dependency of our code and we want to build it with our code for portability, here I add a meson subproject which fetches mfem and builds it. Because of some issues with CMake and meson I apply a patch which manually disables running tests and building examples and miniapps in mfem. This is okay as mfem here is not intenteded to be linked against other programs (though it still can be). --- build-config/meson.build | 1 + .../mfem/disable_mfem_selfcheck.patch | 41 +++++++++++++++++++ build-config/mfem/meson.build | 24 +++++++++++ meson.build | 3 ++ subprojects/mfem.wrap | 5 +++ 5 files changed, 74 insertions(+) create mode 100644 build-config/meson.build create mode 100644 build-config/mfem/disable_mfem_selfcheck.patch create mode 100644 build-config/mfem/meson.build create mode 100644 subprojects/mfem.wrap diff --git a/build-config/meson.build b/build-config/meson.build new file mode 100644 index 0000000..cefc100 --- /dev/null +++ b/build-config/meson.build @@ -0,0 +1 @@ +subdir('mfem') \ No newline at end of file diff --git a/build-config/mfem/disable_mfem_selfcheck.patch b/build-config/mfem/disable_mfem_selfcheck.patch new file mode 100644 index 0000000..8e438c0 --- /dev/null +++ b/build-config/mfem/disable_mfem_selfcheck.patch @@ -0,0 +1,41 @@ +--- subprojects/mfem/CMakeLists.txt 2025-02-12 15:54:52.454728232 -0500 ++++ CMakeLists.txt.bak 2025-02-12 16:08:06.654542689 -0500 +@@ -765,7 +765,7 @@ + if (MFEM_ENABLE_EXAMPLES) + add_subdirectory(examples) #install examples if enabled + else() +- add_subdirectory(examples EXCLUDE_FROM_ALL) ++ # add_subdirectory(examples EXCLUDE_FROM_ALL) + endif() + + # Create a target for all miniapps and, optionally, enable it. +@@ -774,7 +774,7 @@ + if (MFEM_ENABLE_MINIAPPS) + add_subdirectory(miniapps) #install miniapps if enabled + else() +- add_subdirectory(miniapps EXCLUDE_FROM_ALL) ++ # add_subdirectory(miniapps EXCLUDE_FROM_ALL) + endif() + + # Target to build all executables, i.e. everything. +@@ -801,19 +801,7 @@ + add_dependencies(${MFEM_EXEC_PREREQUISITES_TARGET_NAME} copy_data) + endif() + +-# Add 'check' target - quick test +-set(MFEM_CHECK_TARGET_NAME ${MFEM_CUSTOM_TARGET_PREFIX}check) +-if (NOT MFEM_USE_MPI) +- add_custom_target(${MFEM_CHECK_TARGET_NAME} +- ${CMAKE_CTEST_COMMAND} -R \"^ex1_ser\" -C ${CMAKE_CFG_INTDIR} +- USES_TERMINAL) +- add_dependencies(${MFEM_CHECK_TARGET_NAME} ex1) +-else() +- add_custom_target(${MFEM_CHECK_TARGET_NAME} +- ${CMAKE_CTEST_COMMAND} -R \"^ex1p\" -C ${CMAKE_CFG_INTDIR} +- USES_TERMINAL) +- add_dependencies(${MFEM_CHECK_TARGET_NAME} ex1p) +-endif() ++message(STATUS "MFEM Miniapps and Examples disabled by patch!") + + #------------------------------------------------------------------------------- + # Documentation diff --git a/build-config/mfem/meson.build b/build-config/mfem/meson.build new file mode 100644 index 0000000..84f69c8 --- /dev/null +++ b/build-config/mfem/meson.build @@ -0,0 +1,24 @@ +cmake = import('cmake') +patchFile = files('disable_mfem_selfcheck.patch') + +patch_check = run_command('grep', '-q', 'MFEM_CHECK_TARGET_NAME', 'subprojects/mfem/CMakeLists.txt', check: false) +if patch_check.returncode() == 0 + message('Patching MFEM CMakeLists.txt to remove self checks') + run_command('patch', '-p4', '-d', '../../subprojects/mfem', '-i', patchFile[0].full_path(), check: true) +else + message('MFEM CMakeLists.txt already patched') +endif + +mfem_cmake_options = cmake.subproject_options() +mfem_cmake_options.add_cmake_defines({ + 'MFEM_ENABLE_EXAMPLES': 'OFF', + 'MFEM_ENABLE_TESTING': 'OFF', + 'MFEM_ENABLE_MINIAPPS': 'OFF', + 'MFEM_USE_BENCMARK': 'OFF', +}) + +mfem_sp = cmake.subproject( + 'mfem', + options: mfem_cmake_options) +mfem_dep = mfem_sp.dependency('mfem') +add_project_arguments('-I' + meson.current_build_dir() + '/subprojects/mfem/__CMake_build/config', language: 'cpp') \ No newline at end of file diff --git a/meson.build b/meson.build index 43145c8..fa228b5 100644 --- a/meson.build +++ b/meson.build @@ -3,7 +3,10 @@ project('4DSSE', 'cpp', version: '0.0.1a', default_options: ['cpp_std=c++23']) # Add default visibility for all C++ targets add_project_arguments('-fvisibility=default', language: 'cpp') +# Build external dependencies +subdir('build-config') +# Build the main project subdir('src') if get_option('build_tests') subdir('tests') diff --git a/subprojects/mfem.wrap b/subprojects/mfem.wrap new file mode 100644 index 0000000..43c167b --- /dev/null +++ b/subprojects/mfem.wrap @@ -0,0 +1,5 @@ +[wrap-git] +url = https://github.com/mfem/mfem.git +revision = master + +[cmake] \ No newline at end of file From f4be5b37336c3e3f7264f1d675ac3a68a5aa160a Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Wed, 12 Feb 2025 16:44:10 -0500 Subject: [PATCH 04/16] feat(poly): added skeleton of polytrope model the polytrope module will be used as an initial guess to the solver. A skeleton of this has been imported from https://github.com/tboudreaux/FEMPolytrope This module will need major updates still to handle 3D, proper boundary conditions, and to incorporate it with the rest of our meshing scheme --- src/poly/coeff/meson.build | 23 +++ src/poly/coeff/private/polyCoeff.cpp | 18 +++ src/poly/coeff/public/polyCoeff.h | 8 ++ src/poly/meson.build | 3 + src/poly/solver/meson.build | 0 src/poly/utils/meson.build | 24 ++++ src/poly/utils/private/polyIO.cpp | 23 +++ src/poly/utils/private/polyMFEMUtils.cpp | 175 +++++++++++++++++++++++ src/poly/utils/public/polyIO.h | 0 src/poly/utils/public/polyMFEMUtils.h | 43 ++++++ 10 files changed, 317 insertions(+) create mode 100644 src/poly/coeff/meson.build create mode 100644 src/poly/coeff/private/polyCoeff.cpp create mode 100644 src/poly/coeff/public/polyCoeff.h create mode 100644 src/poly/meson.build create mode 100644 src/poly/solver/meson.build create mode 100644 src/poly/utils/meson.build create mode 100644 src/poly/utils/private/polyIO.cpp create mode 100644 src/poly/utils/private/polyMFEMUtils.cpp create mode 100644 src/poly/utils/public/polyIO.h create mode 100644 src/poly/utils/public/polyMFEMUtils.h diff --git a/src/poly/coeff/meson.build b/src/poly/coeff/meson.build new file mode 100644 index 0000000..112a1ff --- /dev/null +++ b/src/poly/coeff/meson.build @@ -0,0 +1,23 @@ +polyCoeff_sources = files( + 'private/coeff.cpp' +) + +polyCoeff_headers = files( + 'public/coeff.h' +) + +libPolyCoeff = static_library('polyCoeff', + polyCoeff_sources, + include_directories : include_directories('.'), + cpp_args: ['-fvisibility=default'], + dependencies: [mfem_dep], + install: true +) + + +polyCoeff_dep = declare_dependency( + include_directories : include_directories('.'), + link_with : libPolyCoeff, + sources : polyCoeff_sources, + dependencies : [mfem_dep] +) \ No newline at end of file diff --git a/src/poly/coeff/private/polyCoeff.cpp b/src/poly/coeff/private/polyCoeff.cpp new file mode 100644 index 0000000..ad4d117 --- /dev/null +++ b/src/poly/coeff/private/polyCoeff.cpp @@ -0,0 +1,18 @@ +#include "mfem.hpp" +#include + +#include "coeff.h" + +double xi_coeff_func(const mfem::Vector &x) { + return std::pow(x(0), 2); +} + +void vec_xi_coeff_func(const mfem::Vector &x, mfem::Vector &v) { + v.SetSize(1); + v[0] = -std::pow(x(0), 2); +} + +double theta_initial_guess(const mfem::Vector &x, double root) { + double xi = x[0]; + return 1-std::pow(xi/root, 2); +} \ No newline at end of file diff --git a/src/poly/coeff/public/polyCoeff.h b/src/poly/coeff/public/polyCoeff.h new file mode 100644 index 0000000..46204f1 --- /dev/null +++ b/src/poly/coeff/public/polyCoeff.h @@ -0,0 +1,8 @@ +#include "mfem.hpp" +#include + +double xi_coeff_func(const mfem::Vector &x); + +void vec_xi_coeff_func(const mfem::Vector &x, mfem::Vector &v); + +double theta_initial_guess(const mfem::Vector &x, double root); \ No newline at end of file diff --git a/src/poly/meson.build b/src/poly/meson.build new file mode 100644 index 0000000..d9c272f --- /dev/null +++ b/src/poly/meson.build @@ -0,0 +1,3 @@ +subdir('coeff') +subdir('utils') +subdir('solver') \ No newline at end of file diff --git a/src/poly/solver/meson.build b/src/poly/solver/meson.build new file mode 100644 index 0000000..e69de29 diff --git a/src/poly/utils/meson.build b/src/poly/utils/meson.build new file mode 100644 index 0000000..fc072eb --- /dev/null +++ b/src/poly/utils/meson.build @@ -0,0 +1,24 @@ +polyutils_sources = files( + 'private/polyIO.cpp', + 'private/polyMFEMUtils.cpp' +) + +polyutils_headers = files( + 'public/polyIO.h', + 'public/polyMFEMUtils.h' +) + +libpolyutils = static_library('polyutils', + polyutils_sources, + include_directories : include_directories('.'), + cpp_args: ['-fvisibility=default'], + dependencies: [mfem_dep], + install: true +) + +libpolyutils_dep = declare_dependency( + include_directories : include_directories('.'), + link_with : libpolyutils, + sources : polyutils_sources, + dependencies : [mfem_dep] +) diff --git a/src/poly/utils/private/polyIO.cpp b/src/poly/utils/private/polyIO.cpp new file mode 100644 index 0000000..8eaf25b --- /dev/null +++ b/src/poly/utils/private/polyIO.cpp @@ -0,0 +1,23 @@ +#include "mfem.hpp" +#include +#include + +#include "io.h" + +void write_solution_to_csv(const mfem::GridFunction &u, const mfem::Mesh &mesh, const std::string &filename) { + std::ofstream file(filename); + if (!file.is_open()) { + std::cerr << "Error: Could not open " << filename << " for writing." << std::endl; + return; + } + + file << "xi,u\n"; // CSV header + + for (int i = 0; i < u.Size(); i++) { + double xi = mesh.GetVertex(i)[0]; // Get spatial coordinate + file << xi << "," << u[i] << "\n"; // Write to CSV + } + + file.close(); + std::cout << "Solution written to " << filename << std::endl; +} \ No newline at end of file diff --git a/src/poly/utils/private/polyMFEMUtils.cpp b/src/poly/utils/private/polyMFEMUtils.cpp new file mode 100644 index 0000000..781efab --- /dev/null +++ b/src/poly/utils/private/polyMFEMUtils.cpp @@ -0,0 +1,175 @@ +#include "mfem.hpp" +#include +#include +#include + +#include "polyMFEMUtils.h" + +NonlinearPowerIntegrator::NonlinearPowerIntegrator( + mfem::FunctionCoefficient &coeff, + double n) : coeff_(coeff), polytropicIndex(n) { + +} + +void NonlinearPowerIntegrator::AssembleElementVector( + const mfem::FiniteElement &el, + mfem::ElementTransformation &Trans, + const mfem::Vector &elfun, + mfem::Vector &elvect) { + + const mfem::IntegrationRule *ir = &mfem::IntRules.Get(el.GetGeomType(), 2 * el.GetOrder() + 3); + int dof = el.GetDof(); + elvect.SetSize(dof); + elvect = 0.0; + + mfem::Vector shape(dof); + + for (int iqp = 0; iqp < ir->GetNPoints(); iqp++) { + mfem::IntegrationPoint ip = ir->IntPoint(iqp); + Trans.SetIntPoint(&ip); + double weight = ip.weight * Trans.Weight(); + + el.CalcShape(ip, shape); + + double u_val = 0.0; + for (int j = 0; j < dof; j++) { + u_val += elfun(j) * shape(j); + } + double u_safe = std::max(u_val, 0.0); + double u_nl = std::pow(u_safe, polytropicIndex); + + double coeff_val = coeff_.Eval(Trans, ip); + double x2_u_nl = coeff_val * u_nl; + + for (int i = 0; i < dof; i++){ + elvect(i) += shape(i) * x2_u_nl * weight; + } + } +} + +void NonlinearPowerIntegrator::AssembleElementGrad ( + const mfem::FiniteElement &el, + mfem::ElementTransformation &Trans, + const mfem::Vector &elfun, + mfem::DenseMatrix &elmat) { + + const mfem::IntegrationRule *ir = &mfem::IntRules.Get(el.GetGeomType(), 2 * el.GetOrder() + 3); + int dof = el.GetDof(); + elmat.SetSize(dof); + elmat = 0.0; + mfem::Vector shape(dof); + + for (int iqp = 0; iqp < ir->GetNPoints(); iqp++) { + mfem::IntegrationPoint ip = ir->IntPoint(iqp); + Trans.SetIntPoint(&ip); + double weight = ip.weight * Trans.Weight(); + + el.CalcShape(ip, shape); + + double u_val = 0.0; + + for (int j = 0; j < dof; j++) { + u_val += elfun(j) * shape(j); + } + double coeff_val = coeff_.Eval(Trans, ip); + + + // Calculate the Jacobian + double u_safe = std::max(u_val, 0.0); + double d_u_nl = coeff_val * polytropicIndex * std::pow(u_safe, polytropicIndex - 1); + double x2_d_u_nl = d_u_nl; + + for (int i = 0; i < dof; i++) { + for (int j = 0; j < dof; j++) { + elmat(i, j) += shape(i) * x2_d_u_nl * shape(j) * weight; + } + } + + } +} + +BilinearIntegratorWrapper::BilinearIntegratorWrapper( + mfem::BilinearFormIntegrator *integratorInput + ) : integrator(integratorInput) { } + +BilinearIntegratorWrapper::~BilinearIntegratorWrapper() { + delete integrator; +} + +void BilinearIntegratorWrapper::AssembleElementVector( + const mfem::FiniteElement &el, + mfem::ElementTransformation &Trans, + const mfem::Vector &elfun, + mfem::Vector &elvect) { + int dof = el.GetDof(); + mfem::DenseMatrix elMat(dof); + integrator->AssembleElementMatrix(el, Trans, elMat); + elvect.SetSize(dof); + elvect = 0.0; + for (int i = 0; i < dof; i++) + { + double sum = 0.0; + for (int j = 0; j < dof; j++) + { + sum += elMat(i, j) * elfun(j); + } + elvect(i) = sum; + } +} + +void BilinearIntegratorWrapper::AssembleElementGrad(const mfem::FiniteElement &el, + mfem::ElementTransformation &Trans, + const mfem::Vector &elfun, + mfem::DenseMatrix &elmat) { + int dof = el.GetDof(); + elmat.SetSize(dof, dof); + elmat = 0.0; + integrator->AssembleElementMatrix(el, Trans, elmat); +} + +CompositeNonlinearIntegrator::CompositeNonlinearIntegrator() { } + + +CompositeNonlinearIntegrator::~CompositeNonlinearIntegrator() { + for (size_t i = 0; i < integrators.size(); i++) { + delete integrators[i]; + } +} + +void CompositeNonlinearIntegrator::add_integrator(mfem::NonlinearFormIntegrator *integrator) { + integrators.push_back(integrator); +} + +void CompositeNonlinearIntegrator::AssembleElementVector( + const mfem::FiniteElement &el, + mfem::ElementTransformation &Trans, + const mfem::Vector &elfun, + mfem::Vector &elvect) { + int dof = el.GetDof(); + elvect.SetSize(dof); + elvect = 0.0; + mfem::Vector temp(dof); + + for (size_t i = 0; i < integrators.size(); i++) { + temp= 0.0; + integrators[i]->AssembleElementVector(el, Trans, elfun, temp); + elvect.Add(1.0, temp); + } +} + +void CompositeNonlinearIntegrator::AssembleElementGrad( + const mfem::FiniteElement &el, + mfem::ElementTransformation &Trans, + const mfem::Vector &elfun, + mfem::DenseMatrix &elmat) { + int dof = el.GetDof(); + elmat.SetSize(dof, dof); + elmat = 0.0; + mfem::DenseMatrix temp(dof); + temp.SetSize(dof, dof); + for (size_t i = 0; i < integrators.size(); i++) { + temp = 0.0; + integrators[i] -> AssembleElementGrad(el, Trans, elfun, temp); + elmat.Add(1.0, temp); + } +} \ No newline at end of file diff --git a/src/poly/utils/public/polyIO.h b/src/poly/utils/public/polyIO.h new file mode 100644 index 0000000..e69de29 diff --git a/src/poly/utils/public/polyMFEMUtils.h b/src/poly/utils/public/polyMFEMUtils.h new file mode 100644 index 0000000..33985aa --- /dev/null +++ b/src/poly/utils/public/polyMFEMUtils.h @@ -0,0 +1,43 @@ +#include "mfem.hpp" +#include + + +void write_solution_to_csv(const mfem::GridFunction &u, const mfem::Mesh &mesh, const std::string &filename); + +class NonlinearPowerIntegrator: public mfem::NonlinearFormIntegrator { +private: + mfem::FunctionCoefficient coeff_; + double polytropicIndex; +public: + NonlinearPowerIntegrator(mfem::FunctionCoefficient &coeff, double n); + + virtual void AssembleElementVector(const mfem::FiniteElement &el, mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::Vector &elvect) override; + virtual void AssembleElementGrad (const mfem::FiniteElement &el, mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::DenseMatrix &elmat) override; +}; + +class BilinearIntegratorWrapper : public mfem::NonlinearFormIntegrator +{ +private: + mfem::BilinearFormIntegrator *integrator; +public: + BilinearIntegratorWrapper(mfem::BilinearFormIntegrator *integratorInput); + + virtual ~BilinearIntegratorWrapper() ; + + virtual void AssembleElementVector(const mfem::FiniteElement &el, mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::Vector &elvect) override; + virtual void AssembleElementGrad(const mfem::FiniteElement &el,mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::DenseMatrix &elmat) override; +}; + +class CompositeNonlinearIntegrator: public mfem::NonlinearFormIntegrator { + private: + std::vector integrators; + public: + CompositeNonlinearIntegrator(); + + virtual ~CompositeNonlinearIntegrator(); + + void add_integrator(mfem::NonlinearFormIntegrator *integrator); + + virtual void AssembleElementVector(const mfem::FiniteElement &el, mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::Vector &elvect) override; + virtual void AssembleElementGrad(const mfem::FiniteElement &el, mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::DenseMatrix &elmat) override; +}; \ No newline at end of file From 7330fb99069f78f21cc8a406821062589577afb1 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Fri, 14 Feb 2025 10:50:07 -0500 Subject: [PATCH 05/16] feat(poly): initial build system for polytrope --- src/poly/coeff/private/polyCoeff.cpp | 30 +++++++-- src/poly/utils/private/polyIO.cpp | 2 +- src/poly/utils/public/polyIO.h | 16 +++++ src/poly/utils/public/polyMFEMUtils.h | 89 ++++++++++++++++++++++++++- 4 files changed, 130 insertions(+), 7 deletions(-) diff --git a/src/poly/coeff/private/polyCoeff.cpp b/src/poly/coeff/private/polyCoeff.cpp index ad4d117..c4076a0 100644 --- a/src/poly/coeff/private/polyCoeff.cpp +++ b/src/poly/coeff/private/polyCoeff.cpp @@ -3,16 +3,38 @@ #include "coeff.h" -double xi_coeff_func(const mfem::Vector &x) { +/** + * @brief Computes the xi coefficient function. + * + * @param x Input vector. + * @return double The computed xi coefficient. + */ +double xi_coeff_func(const mfem::Vector &x) +{ return std::pow(x(0), 2); } -void vec_xi_coeff_func(const mfem::Vector &x, mfem::Vector &v) { +/** + * @brief Computes the vector xi coefficient function. + * + * @param x Input vector. + * @param v Output vector to store the computed xi coefficient. + */ +void vec_xi_coeff_func(const mfem::Vector &x, mfem::Vector &v) +{ v.SetSize(1); v[0] = -std::pow(x(0), 2); } -double theta_initial_guess(const mfem::Vector &x, double root) { +/** + * @brief Computes the initial guess for theta. + * + * @param x Input vector. + * @param root Root value used in the computation. + * @return double The initial guess for theta. + */ +double theta_initial_guess(const mfem::Vector &x, double root) +{ double xi = x[0]; - return 1-std::pow(xi/root, 2); + return 1 - std::pow(xi / root, 2); } \ No newline at end of file diff --git a/src/poly/utils/private/polyIO.cpp b/src/poly/utils/private/polyIO.cpp index 8eaf25b..d540cb0 100644 --- a/src/poly/utils/private/polyIO.cpp +++ b/src/poly/utils/private/polyIO.cpp @@ -2,7 +2,7 @@ #include #include -#include "io.h" +#include "polyIO.h" void write_solution_to_csv(const mfem::GridFunction &u, const mfem::Mesh &mesh, const std::string &filename) { std::ofstream file(filename); diff --git a/src/poly/utils/public/polyIO.h b/src/poly/utils/public/polyIO.h index e69de29..9ca7ceb 100644 --- a/src/poly/utils/public/polyIO.h +++ b/src/poly/utils/public/polyIO.h @@ -0,0 +1,16 @@ +#ifndef POLY_IO_H +#define POLY_IO_H + +#include "mfem.hpp" +#include + +/** + * @brief Writes the solution to a CSV file. + * + * @param u The GridFunction containing the solution. + * @param mesh The mesh associated with the solution. + * @param filename The name of the CSV file to write to. + */ +void write_solution_to_csv(const mfem::GridFunction &u, const mfem::Mesh &mesh, const std::string &filename); + +#endif // POLY_IO_H \ No newline at end of file diff --git a/src/poly/utils/public/polyMFEMUtils.h b/src/poly/utils/public/polyMFEMUtils.h index 33985aa..ac07264 100644 --- a/src/poly/utils/public/polyMFEMUtils.h +++ b/src/poly/utils/public/polyMFEMUtils.h @@ -4,40 +4,125 @@ void write_solution_to_csv(const mfem::GridFunction &u, const mfem::Mesh &mesh, const std::string &filename); +/** + * @brief A class for nonlinear power integrator. + */ class NonlinearPowerIntegrator: public mfem::NonlinearFormIntegrator { private: mfem::FunctionCoefficient coeff_; double polytropicIndex; public: + /** + * @brief Constructor for NonlinearPowerIntegrator. + * + * @param coeff The function coefficient. + * @param n The polytropic index. + */ NonlinearPowerIntegrator(mfem::FunctionCoefficient &coeff, double n); + /** + * @brief Assembles the element vector. + * + * @param el The finite element. + * @param Trans The element transformation. + * @param elfun The element function. + * @param elvect The element vector to be assembled. + */ virtual void AssembleElementVector(const mfem::FiniteElement &el, mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::Vector &elvect) override; + + /** + * @brief Assembles the element gradient. + * + * @param el The finite element. + * @param Trans The element transformation. + * @param elfun The element function. + * @param elmat The element matrix to be assembled. + */ virtual void AssembleElementGrad (const mfem::FiniteElement &el, mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::DenseMatrix &elmat) override; }; +/** + * @brief A wrapper class for bilinear integrator. + */ class BilinearIntegratorWrapper : public mfem::NonlinearFormIntegrator { private: mfem::BilinearFormIntegrator *integrator; public: + /** + * @brief Constructor for BilinearIntegratorWrapper. + * + * @param integratorInput The bilinear form integrator input. + */ BilinearIntegratorWrapper(mfem::BilinearFormIntegrator *integratorInput); - virtual ~BilinearIntegratorWrapper() ; + /** + * @brief Destructor for BilinearIntegratorWrapper. + */ + virtual ~BilinearIntegratorWrapper(); + /** + * @brief Assembles the element vector. + * + * @param el The finite element. + * @param Trans The element transformation. + * @param elfun The element function. + * @param elvect The element vector to be assembled. + */ virtual void AssembleElementVector(const mfem::FiniteElement &el, mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::Vector &elvect) override; - virtual void AssembleElementGrad(const mfem::FiniteElement &el,mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::DenseMatrix &elmat) override; + + /** + * @brief Assembles the element gradient. + * + * @param el The finite element. + * @param Trans The element transformation. + * @param elfun The element function. + * @param elmat The element matrix to be assembled. + */ + virtual void AssembleElementGrad(const mfem::FiniteElement &el, mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::DenseMatrix &elmat) override; }; +/** + * @brief A class for composite nonlinear integrator. + */ class CompositeNonlinearIntegrator: public mfem::NonlinearFormIntegrator { private: std::vector integrators; public: + /** + * @brief Constructor for CompositeNonlinearIntegrator. + */ CompositeNonlinearIntegrator(); + /** + * @brief Destructor for CompositeNonlinearIntegrator. + */ virtual ~CompositeNonlinearIntegrator(); + /** + * @brief Adds an integrator to the composite integrator. + * + * @param integrator The nonlinear form integrator to add. + */ void add_integrator(mfem::NonlinearFormIntegrator *integrator); + /** + * @brief Assembles the element vector. + * + * @param el The finite element. + * @param Trans The element transformation. + * @param elfun The element function. + * @param elvect The element vector to be assembled. + */ virtual void AssembleElementVector(const mfem::FiniteElement &el, mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::Vector &elvect) override; + + /** + * @brief Assembles the element gradient. + * + * @param el The finite element. + * @param Trans The element transformation. + * @param elfun The element function. + * @param elmat The element matrix to be assembled. + */ virtual void AssembleElementGrad(const mfem::FiniteElement &el, mfem::ElementTransformation &Trans, const mfem::Vector &elfun, mfem::DenseMatrix &elmat) override; }; \ No newline at end of file From 02c2096ac5ed55f39d389f4130cc4763272e26f1 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 16 Feb 2025 12:54:20 -0500 Subject: [PATCH 06/16] refactor(utils/opatio): saved --- utils/opatio/src/opatio/opat/opat.py | 40 ++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/utils/opatio/src/opatio/opat/opat.py b/utils/opatio/src/opatio/opat/opat.py index 741a761..eea33da 100644 --- a/utils/opatio/src/opatio/opat/opat.py +++ b/utils/opatio/src/opatio/opat/opat.py @@ -61,6 +61,46 @@ defaultHeader = Header( ) class OpatIO: + """ + @brief Class for handling OPAT file input/output operations. + This class provides methods to validate, manipulate, and save OPAT files. It includes functionalities to validate character arrays, 1D arrays, and 2D arrays, compute checksums, set header information, add tables, and save the OPAT file in both ASCII and binary formats. + Attributes: + header (Header): The header of the OPAT file. + tables (List[Tuple[Tuple[float, float], OPATTable]]): A list of tables in the OPAT file. + Methods: + validate_char_array_size(s: str, nmax: int) -> bool: + Validate the size of a character array. + validate_logKappa(logKappa): + Validate the logKappa array. + validate_1D(arr, name: str): + Validate a 1D array. + compute_checksum(data: bytes) -> bytes: + Compute the SHA-256 checksum of the given data. + set_version(version: int) -> int: + Set the version of the OPAT file. + set_source(source: str) -> str: + Set the source information of the OPAT file. + set_comment(comment: str) -> str: + Set the comment of the OPAT file. + add_table(X: float, Z: float, logR: Iterable[float], logT: Iterable[float], logKappa: Iterable[Iterable[float]]): + Add a table to the OPAT file. + _header_bytes() -> bytes: + Convert the header to bytes. + _table_bytes(table: OPATTable) -> Tuple[bytes, bytes]: + Convert a table to bytes. + _tableIndex_bytes(tableIndex: TableIndex) -> bytes: + Convert a table index to bytes. + __repr__() -> str: + Get the string representation of the OpatIO object. + _format_table_as_string(table: OPATTable, X: float, Z: float) -> str: + Format a table as a string. + print_table_indexes(table_indexes: List[TableIndex]) -> str: + Print the table indexes. + save_as_ascii(filename: str) -> str: + Save the OPAT file as an ASCII file. + save(filename: str) -> str: + Save the OPAT file as a binary file. + """ def __init__(self): self.header: Header = defaultHeader self.tables: List[Tuple[Tuple[float, float], OPATTable]] = [] From 490831d898049b86f2249e570124d3a16ae7251a Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 16 Feb 2025 13:35:09 -0500 Subject: [PATCH 07/16] feat(meshGeneration): simple spherical mesh generation script --- utils/meshGeneration/generateMesh.py | 24 ++ utils/meshGeneration/readme.md | 8 + utils/meshGeneration/sphere.mesh | 599 +++++++++++++++++++++++++++ 3 files changed, 631 insertions(+) create mode 100644 utils/meshGeneration/generateMesh.py create mode 100644 utils/meshGeneration/readme.md create mode 100644 utils/meshGeneration/sphere.mesh diff --git a/utils/meshGeneration/generateMesh.py b/utils/meshGeneration/generateMesh.py new file mode 100644 index 0000000..9d6805b --- /dev/null +++ b/utils/meshGeneration/generateMesh.py @@ -0,0 +1,24 @@ +import pygmsh +import meshio + +import argparse + +def generate_spherical_mesh(radius=1, meshSize=0.1): + with pygmsh.geo.Geometry() as geo: + # Create a spherical (ball) geometry centered at (0,0,0) + sphere = geo.add_ball([0, 0, 0], radius) + # Generate a 2D mesh (i.e. surface mesh) of the sphere + myMesh = geo.generate_mesh(dim=2) + return myMesh + +def write_mfem_mesh(meshData, filename): + meshio.write(filename, meshData, file_format='netgen') + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Generate a spherical mesh') + parser.add_argument('--radius', type=float, default=1.0, help='Radius of the sphere') + parser.add_argument('--meshSize', type=float, default=0.1, help='Mesh size') + args = parser.parse_args() + + meshData = generate_spherical_mesh(args.radius, args.meshSize) + write_mfem_mesh(meshData, 'sphere.mesh') \ No newline at end of file diff --git a/utils/meshGeneration/readme.md b/utils/meshGeneration/readme.md new file mode 100644 index 0000000..27c4d15 --- /dev/null +++ b/utils/meshGeneration/readme.md @@ -0,0 +1,8 @@ +# spherical mesh generation +A simple script to generate the base spherical mesh which 4DSSE uses to solve equations. +This will produce a unit sphere mesh centered on (0, 0, 0) which can be rescaled within the +4DSSE program. + +## Dependecies +- pygmsh +- meshio \ No newline at end of file diff --git a/utils/meshGeneration/sphere.mesh b/utils/meshGeneration/sphere.mesh new file mode 100644 index 0000000..61ae482 --- /dev/null +++ b/utils/meshGeneration/sphere.mesh @@ -0,0 +1,599 @@ +# Generated by meshio 5.3.5 +mesh3d + +dimension +3 + +geomtype +0 + +# surfnr bcnr domin domout np p1 p2 p3 +surfaceelements +310 +1 1 0 0 3 67 73 71 +1 1 0 0 3 67 71 63 +1 1 0 0 3 61 71 64 +1 1 0 0 3 63 71 68 +1 1 0 0 3 68 71 61 +1 1 0 0 3 71 73 65 +1 1 0 0 3 64 89 61 +1 1 0 0 3 60 76 100 +1 1 0 0 3 64 71 65 +1 1 0 0 3 60 77 76 +1 1 0 0 3 62 67 63 +1 1 0 0 3 20 58 4 +1 1 0 0 3 60 100 99 +1 1 0 0 3 20 66 58 +1 1 0 0 3 2 57 23 +1 1 0 0 3 59 60 99 +1 1 0 0 3 60 68 77 +1 1 0 0 3 2 84 57 +1 1 0 0 3 66 70 58 +1 1 0 0 3 62 70 67 +1 1 0 0 3 63 68 59 +1 1 0 0 3 56 67 66 +1 1 0 0 3 64 65 57 +1 1 0 0 3 59 68 60 +1 1 0 0 3 62 63 59 +1 1 0 0 3 67 70 66 +1 1 0 0 3 57 72 23 +1 1 0 0 3 65 72 57 +1 1 0 0 3 61 89 79 +1 1 0 0 3 21 66 20 +1 1 0 0 3 58 94 4 +1 1 0 0 3 58 69 94 +1 1 0 0 3 56 66 21 +1 1 0 0 3 22 56 21 +1 1 0 0 3 23 72 22 +1 1 0 0 3 69 70 62 +1 1 0 0 3 58 70 69 +1 1 0 0 3 56 73 67 +1 1 0 0 3 22 72 56 +1 1 0 0 3 65 73 72 +1 1 0 0 3 72 73 56 +1 1 0 0 3 64 91 89 +1 1 0 0 3 74 87 83 +1 1 0 0 3 74 85 9 +1 1 0 0 3 83 88 74 +1 1 0 0 3 82 115 78 +1 1 0 0 3 74 88 85 +1 1 0 0 3 79 80 78 +1 1 0 0 3 85 88 81 +1 1 0 0 3 76 110 100 +1 1 0 0 3 86 122 119 +1 1 0 0 3 80 82 78 +1 1 0 0 3 78 115 76 +1 1 0 0 3 79 81 80 +1 1 0 0 3 77 78 76 +1 1 0 0 3 82 119 115 +1 1 0 0 3 76 115 110 +1 1 0 0 3 77 79 78 +1 1 0 0 3 77 61 79 +1 1 0 0 3 9 85 8 +1 1 0 0 3 8 84 2 +1 1 0 0 3 7 75 11 +1 1 0 0 3 83 86 82 +1 1 0 0 3 81 88 80 +1 1 0 0 3 80 88 83 +1 1 0 0 3 75 87 11 +1 1 0 0 3 75 122 86 +1 1 0 0 3 81 91 85 +1 1 0 0 3 80 83 82 +1 1 0 0 3 8 85 84 +1 1 0 0 3 10 74 9 +1 1 0 0 3 77 68 61 +1 1 0 0 3 84 64 57 +1 1 0 0 3 86 119 82 +1 1 0 0 3 87 90 83 +1 1 0 0 3 10 87 74 +1 1 0 0 3 11 87 10 +1 1 0 0 3 75 90 87 +1 1 0 0 3 84 91 64 +1 1 0 0 3 79 89 81 +1 1 0 0 3 83 90 86 +1 1 0 0 3 85 91 84 +1 1 0 0 3 86 90 75 +1 1 0 0 3 7 117 75 +1 1 0 0 3 89 91 81 +1 1 0 0 3 96 93 102 +1 1 0 0 3 102 93 103 +1 1 0 0 3 95 92 96 +1 1 0 0 3 94 92 95 +1 1 0 0 3 93 96 104 +1 1 0 0 3 95 96 97 +1 1 0 0 3 19 92 94 +1 1 0 0 3 17 16 93 +1 1 0 0 3 95 97 98 +1 1 0 0 3 94 95 69 +1 1 0 0 3 98 97 99 +1 1 0 0 3 101 100 105 +1 1 0 0 3 97 96 102 +1 1 0 0 3 101 105 107 +1 1 0 0 3 17 93 104 +1 1 0 0 3 102 103 107 +1 1 0 0 3 100 99 105 +1 1 0 0 3 93 16 106 +1 1 0 0 3 98 99 59 +1 1 0 0 3 19 18 92 +1 1 0 0 3 96 92 104 +1 1 0 0 3 4 19 94 +1 1 0 0 3 95 98 69 +1 1 0 0 3 105 102 107 +1 1 0 0 3 103 93 106 +1 1 0 0 3 98 62 69 +1 1 0 0 3 99 97 105 +1 1 0 0 3 98 59 62 +1 1 0 0 3 97 102 105 +1 1 0 0 3 103 114 107 +1 1 0 0 3 16 5 106 +1 1 0 0 3 18 17 104 +1 1 0 0 3 92 18 104 +1 1 0 0 3 118 113 120 +1 1 0 0 3 108 114 103 +1 1 0 0 3 109 118 120 +1 1 0 0 3 114 108 121 +1 1 0 0 3 119 118 122 +1 1 0 0 3 113 116 120 +1 1 0 0 3 108 15 116 +1 1 0 0 3 112 118 119 +1 1 0 0 3 110 112 115 +1 1 0 0 3 110 100 101 +1 1 0 0 3 110 111 112 +1 1 0 0 3 116 113 121 +1 1 0 0 3 108 116 121 +1 1 0 0 3 15 14 116 +1 1 0 0 3 111 101 114 +1 1 0 0 3 113 111 121 +1 1 0 0 3 112 111 113 +1 1 0 0 3 5 15 108 +1 1 0 0 3 110 101 111 +1 1 0 0 3 115 112 119 +1 1 0 0 3 108 103 106 +1 1 0 0 3 111 114 121 +1 1 0 0 3 13 12 109 +1 1 0 0 3 109 12 117 +1 1 0 0 3 112 113 118 +1 1 0 0 3 116 14 120 +1 1 0 0 3 109 117 122 +1 1 0 0 3 114 101 107 +1 1 0 0 3 13 109 120 +1 1 0 0 3 117 75 122 +1 1 0 0 3 14 13 120 +1 1 0 0 3 118 109 122 +1 1 0 0 3 12 7 117 +1 1 0 0 3 5 108 106 +1 1 0 0 3 123 126 125 +1 1 0 0 3 132 137 133 +1 1 0 0 3 132 160 131 +1 1 0 0 3 132 161 160 +1 1 0 0 3 130 132 131 +1 1 0 0 3 133 163 161 +1 1 0 0 3 128 130 129 +1 1 0 0 3 123 127 126 +1 1 0 0 3 137 140 133 +1 1 0 0 3 132 133 161 +1 1 0 0 3 133 140 167 +1 1 0 0 3 133 167 163 +1 1 0 0 3 128 129 126 +1 1 0 0 3 21 139 135 +1 1 0 0 3 4 124 20 +1 1 0 0 3 130 131 143 +1 1 0 0 3 126 150 125 +1 1 0 0 3 130 143 129 +1 1 0 0 3 129 150 126 +1 1 0 0 3 123 125 23 +1 1 0 0 3 135 138 21 +1 1 0 0 3 124 170 167 +1 1 0 0 3 131 152 143 +1 1 0 0 3 130 137 132 +1 1 0 0 3 125 153 2 +1 1 0 0 3 127 135 134 +1 1 0 0 3 20 139 21 +1 1 0 0 3 135 136 134 +1 1 0 0 3 127 128 126 +1 1 0 0 3 23 125 2 +1 1 0 0 3 124 139 20 +1 1 0 0 3 22 123 23 +1 1 0 0 3 127 138 135 +1 1 0 0 3 128 137 130 +1 1 0 0 3 21 138 22 +1 1 0 0 3 135 139 136 +1 1 0 0 3 127 134 128 +1 1 0 0 3 4 170 124 +1 1 0 0 3 136 139 124 +1 1 0 0 3 123 138 127 +1 1 0 0 3 134 137 128 +1 1 0 0 3 136 140 134 +1 1 0 0 3 22 138 123 +1 1 0 0 3 134 140 137 +1 1 0 0 3 148 149 151 +1 1 0 0 3 141 147 149 +1 1 0 0 3 147 141 185 +1 1 0 0 3 151 149 154 +1 1 0 0 3 142 148 151 +1 1 0 0 3 11 7 141 +1 1 0 0 3 145 129 150 +1 1 0 0 3 8 9 142 +1 1 0 0 3 149 148 155 +1 1 0 0 3 144 178 152 +1 1 0 0 3 142 9 148 +1 1 0 0 3 143 129 145 +1 1 0 0 3 149 147 154 +1 1 0 0 3 143 145 146 +1 1 0 0 3 142 151 157 +1 1 0 0 3 143 146 152 +1 1 0 0 3 151 145 157 +1 1 0 0 3 11 141 155 +1 1 0 0 3 146 151 154 +1 1 0 0 3 141 149 155 +1 1 0 0 3 2 8 153 +1 1 0 0 3 150 125 153 +1 1 0 0 3 146 145 151 +1 1 0 0 3 141 7 190 +1 1 0 0 3 9 10 148 +1 1 0 0 3 147 144 156 +1 1 0 0 3 145 150 157 +1 1 0 0 3 8 142 153 +1 1 0 0 3 152 146 156 +1 1 0 0 3 154 147 156 +1 1 0 0 3 148 10 155 +1 1 0 0 3 10 11 155 +1 1 0 0 3 146 154 156 +1 1 0 0 3 144 152 156 +1 1 0 0 3 150 153 157 +1 1 0 0 3 153 142 157 +1 1 0 0 3 159 165 172 +1 1 0 0 3 165 159 171 +1 1 0 0 3 158 166 168 +1 1 0 0 3 162 183 165 +1 1 0 0 3 166 158 173 +1 1 0 0 3 16 17 159 +1 1 0 0 3 163 161 164 +1 1 0 0 3 162 181 183 +1 1 0 0 3 161 160 169 +1 1 0 0 3 167 136 140 +1 1 0 0 3 160 131 178 +1 1 0 0 3 16 159 172 +1 1 0 0 3 160 179 169 +1 1 0 0 3 160 178 179 +1 1 0 0 3 170 167 173 +1 1 0 0 3 164 161 169 +1 1 0 0 3 163 164 166 +1 1 0 0 3 163 166 173 +1 1 0 0 3 166 164 171 +1 1 0 0 3 159 17 168 +1 1 0 0 3 167 124 136 +1 1 0 0 3 162 165 174 +1 1 0 0 3 5 16 172 +1 1 0 0 3 167 163 173 +1 1 0 0 3 168 166 175 +1 1 0 0 3 164 169 174 +1 1 0 0 3 165 171 174 +1 1 0 0 3 158 170 173 +1 1 0 0 3 158 19 170 +1 1 0 0 3 19 4 170 +1 1 0 0 3 172 165 192 +1 1 0 0 3 17 18 168 +1 1 0 0 3 169 162 174 +1 1 0 0 3 171 164 174 +1 1 0 0 3 18 19 158 +1 1 0 0 3 165 183 192 +1 1 0 0 3 18 158 168 +1 1 0 0 3 171 159 175 +1 1 0 0 3 159 168 175 +1 1 0 0 3 166 171 175 +1 1 0 0 3 185 186 187 +1 1 0 0 3 180 178 144 +1 1 0 0 3 182 185 187 +1 1 0 0 3 177 184 187 +1 1 0 0 3 180 144 182 +1 1 0 0 3 179 178 180 +1 1 0 0 3 13 14 177 +1 1 0 0 3 179 180 181 +1 1 0 0 3 179 181 162 +1 1 0 0 3 186 185 190 +1 1 0 0 3 182 147 185 +1 1 0 0 3 179 162 169 +1 1 0 0 3 178 131 152 +1 1 0 0 3 180 182 189 +1 1 0 0 3 183 181 184 +1 1 0 0 3 184 177 188 +1 1 0 0 3 186 177 187 +1 1 0 0 3 12 13 186 +1 1 0 0 3 182 144 147 +1 1 0 0 3 187 184 189 +1 1 0 0 3 13 177 186 +1 1 0 0 3 182 187 189 +1 1 0 0 3 15 176 188 +1 1 0 0 3 12 186 190 +1 1 0 0 3 185 141 190 +1 1 0 0 3 14 15 188 +1 1 0 0 3 176 5 172 +1 1 0 0 3 184 181 189 +1 1 0 0 3 177 14 188 +1 1 0 0 3 15 5 176 +1 1 0 0 3 181 180 189 +1 1 0 0 3 184 188 191 +1 1 0 0 3 188 176 191 +1 1 0 0 3 176 172 192 +1 1 0 0 3 7 12 190 +1 1 0 0 3 183 191 192 +1 1 0 0 3 183 184 191 +1 1 0 0 3 191 176 192 + +# matnr np p1 p2 p3 p4 +volumeelements +0 + +# surfid 0 p1 p2 trignum1 trignum2 domin/surfnr1 domout/surfnr2 ednr1 dist1 ednr2 dist2 +edgesegmentsgi2 +60 +1 0 2 8 -1 -1 0 0 1 0 1 0 +1 0 8 9 -1 -1 0 0 1 0 1 0 +1 0 9 10 -1 -1 0 0 1 0 1 0 +1 0 10 11 -1 -1 0 0 1 0 1 0 +1 0 11 7 -1 -1 0 0 1 0 1 0 +1 0 7 12 -1 -1 0 0 1 0 1 0 +1 0 12 13 -1 -1 0 0 1 0 1 0 +1 0 13 14 -1 -1 0 0 1 0 1 0 +1 0 14 15 -1 -1 0 0 1 0 1 0 +1 0 15 5 -1 -1 0 0 1 0 1 0 +1 0 5 16 -1 -1 0 0 1 0 1 0 +1 0 16 17 -1 -1 0 0 1 0 1 0 +1 0 17 18 -1 -1 0 0 1 0 1 0 +1 0 18 19 -1 -1 0 0 1 0 1 0 +1 0 19 4 -1 -1 0 0 1 0 1 0 +1 0 4 20 -1 -1 0 0 1 0 1 0 +1 0 20 21 -1 -1 0 0 1 0 1 0 +1 0 21 22 -1 -1 0 0 1 0 1 0 +1 0 22 23 -1 -1 0 0 1 0 1 0 +1 0 23 2 -1 -1 0 0 1 0 1 0 +1 0 2 24 -1 -1 0 0 1 0 1 0 +1 0 24 25 -1 -1 0 0 1 0 1 0 +1 0 25 26 -1 -1 0 0 1 0 1 0 +1 0 26 27 -1 -1 0 0 1 0 1 0 +1 0 27 3 -1 -1 0 0 1 0 1 0 +1 0 3 28 -1 -1 0 0 1 0 1 0 +1 0 28 29 -1 -1 0 0 1 0 1 0 +1 0 29 30 -1 -1 0 0 1 0 1 0 +1 0 30 31 -1 -1 0 0 1 0 1 0 +1 0 31 5 -1 -1 0 0 1 0 1 0 +1 0 5 32 -1 -1 0 0 1 0 1 0 +1 0 32 33 -1 -1 0 0 1 0 1 0 +1 0 33 34 -1 -1 0 0 1 0 1 0 +1 0 34 35 -1 -1 0 0 1 0 1 0 +1 0 35 6 -1 -1 0 0 1 0 1 0 +1 0 6 36 -1 -1 0 0 1 0 1 0 +1 0 36 37 -1 -1 0 0 1 0 1 0 +1 0 37 38 -1 -1 0 0 1 0 1 0 +1 0 38 39 -1 -1 0 0 1 0 1 0 +1 0 39 2 -1 -1 0 0 1 0 1 0 +1 0 7 40 -1 -1 0 0 1 0 1 0 +1 0 40 41 -1 -1 0 0 1 0 1 0 +1 0 41 42 -1 -1 0 0 1 0 1 0 +1 0 42 43 -1 -1 0 0 1 0 1 0 +1 0 43 3 -1 -1 0 0 1 0 1 0 +1 0 3 44 -1 -1 0 0 1 0 1 0 +1 0 44 45 -1 -1 0 0 1 0 1 0 +1 0 45 46 -1 -1 0 0 1 0 1 0 +1 0 46 47 -1 -1 0 0 1 0 1 0 +1 0 47 4 -1 -1 0 0 1 0 1 0 +1 0 4 48 -1 -1 0 0 1 0 1 0 +1 0 48 49 -1 -1 0 0 1 0 1 0 +1 0 49 50 -1 -1 0 0 1 0 1 0 +1 0 50 51 -1 -1 0 0 1 0 1 0 +1 0 51 6 -1 -1 0 0 1 0 1 0 +1 0 6 52 -1 -1 0 0 1 0 1 0 +1 0 52 53 -1 -1 0 0 1 0 1 0 +1 0 53 54 -1 -1 0 0 1 0 1 0 +1 0 54 55 -1 -1 0 0 1 0 1 0 +1 0 55 7 -1 -1 0 0 1 0 1 0 + +# X Y Z +points +192 +0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 +0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 +-1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 +0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 +9.5105651603336416e-01 0.0000000000000000e+00 -3.0901699518065218e-01 +8.0901699328934940e-01 0.0000000000000000e+00 -5.8778525378667057e-01 +5.8778525072186560e-01 0.0000000000000000e+00 -8.0901699551606054e-01 +3.0901699346099087e-01 0.0000000000000000e+00 -9.5105651659211610e-01 +-3.0901699518065218e-01 0.0000000000000000e+00 -9.5105651603336416e-01 +-5.8778525378667057e-01 0.0000000000000000e+00 -8.0901699328934940e-01 +-8.0901699551606054e-01 0.0000000000000000e+00 -5.8778525072186560e-01 +-9.5105651659211610e-01 0.0000000000000000e+00 -3.0901699346099087e-01 +-9.5105651603336416e-01 0.0000000000000000e+00 3.0901699518065218e-01 +-8.0901699328934940e-01 0.0000000000000000e+00 5.8778525378667057e-01 +-5.8778525072186560e-01 0.0000000000000000e+00 8.0901699551606054e-01 +-3.0901699346099087e-01 0.0000000000000000e+00 9.5105651659211610e-01 +3.0901699518065218e-01 0.0000000000000000e+00 9.5105651603336416e-01 +5.8778525378667057e-01 0.0000000000000000e+00 8.0901699328934940e-01 +8.0901699551606054e-01 0.0000000000000000e+00 5.8778525072186560e-01 +9.5105651659211610e-01 0.0000000000000000e+00 3.0901699346099087e-01 +9.5105651603336416e-01 3.0901699518065218e-01 0.0000000000000000e+00 +8.0901699328934940e-01 5.8778525378667057e-01 0.0000000000000000e+00 +5.8778525072186560e-01 8.0901699551606054e-01 0.0000000000000000e+00 +3.0901699346099087e-01 9.5105651659211610e-01 0.0000000000000000e+00 +-3.0901699518065218e-01 9.5105651603336416e-01 0.0000000000000000e+00 +-5.8778525378667057e-01 8.0901699328934940e-01 0.0000000000000000e+00 +-8.0901699551606054e-01 5.8778525072186560e-01 0.0000000000000000e+00 +-9.5105651659211610e-01 3.0901699346099087e-01 0.0000000000000000e+00 +-9.5105651603336416e-01 -3.0901699518065218e-01 0.0000000000000000e+00 +-8.0901699328934940e-01 -5.8778525378667057e-01 0.0000000000000000e+00 +-5.8778525072186560e-01 -8.0901699551606054e-01 0.0000000000000000e+00 +-3.0901699346099087e-01 -9.5105651659211610e-01 0.0000000000000000e+00 +3.0901699518065218e-01 -9.5105651603336416e-01 0.0000000000000000e+00 +5.8778525378667057e-01 -8.0901699328934940e-01 0.0000000000000000e+00 +8.0901699551606054e-01 -5.8778525072186560e-01 0.0000000000000000e+00 +9.5105651659211610e-01 -3.0901699346099087e-01 0.0000000000000000e+00 +0.0000000000000000e+00 3.0901699518065218e-01 -9.5105651603336416e-01 +0.0000000000000000e+00 5.8778525378667057e-01 -8.0901699328934940e-01 +0.0000000000000000e+00 8.0901699551606054e-01 -5.8778525072186560e-01 +0.0000000000000000e+00 9.5105651659211610e-01 -3.0901699346099087e-01 +0.0000000000000000e+00 9.5105651603336416e-01 3.0901699518065218e-01 +0.0000000000000000e+00 8.0901699328934940e-01 5.8778525378667057e-01 +0.0000000000000000e+00 5.8778525072186560e-01 8.0901699551606054e-01 +0.0000000000000000e+00 3.0901699346099087e-01 9.5105651659211610e-01 +0.0000000000000000e+00 -3.0901699518065218e-01 9.5105651603336416e-01 +0.0000000000000000e+00 -5.8778525378667057e-01 8.0901699328934940e-01 +0.0000000000000000e+00 -8.0901699551606054e-01 5.8778525072186560e-01 +0.0000000000000000e+00 -9.5105651659211610e-01 3.0901699346099087e-01 +0.0000000000000000e+00 -9.5105651603336416e-01 -3.0901699518065218e-01 +0.0000000000000000e+00 -8.0901699328934940e-01 -5.8778525378667057e-01 +0.0000000000000000e+00 -5.8778525072186560e-01 -8.0901699551606054e-01 +0.0000000000000000e+00 -3.0901699346099087e-01 -9.5105651659211610e-01 +6.8470814951826409e-01 1.9795072619446352e-01 6.8640155517997259e-01 +9.3170082380461794e-01 2.7046138100760253e-01 1.8888266494679734e-01 +1.5249989491340643e-01 2.7318581654793372e-01 9.3917516924007993e-01 +1.7451493683301730e-01 8.4651147280092809e-01 4.8495730232217488e-01 +7.5591371896848225e-02 9.6150067109531490e-01 2.1462065953611797e-01 +5.8208782607342802e-01 7.9625497010137314e-01 7.8178784778529520e-02 +2.5521175646824912e-01 6.6993409998867981e-01 6.9216186531485824e-01 +4.3397544190119108e-01 7.2779267661010405e-01 5.1392739027933543e-01 +8.3141018507464481e-01 5.3342839154226829e-01 6.9439717759431099e-02 +8.2272682290574706e-01 4.3258944933390464e-01 3.3917108689069825e-01 +4.4002096804192220e-01 2.2382423123463577e-01 8.6358977164579276e-01 +5.3809427134059340e-01 4.7309423208257295e-01 6.8704089714942440e-01 +3.8042413149122001e-01 8.7229518697285169e-01 2.8238103425430638e-01 +4.4675795259730804e-02 5.2642249216265291e-01 8.3611577491237821e-01 +2.9508126240253552e-01 4.6252415451878831e-01 8.2684019655385133e-01 +6.3455768144290903e-01 6.5452921020204968e-01 3.7523479701038925e-01 +8.5308775631695877e-01 2.0259398944103049e-01 4.6562988926345750e-01 +7.2938723299902364e-01 3.9155703954436299e-01 5.3983062480627453e-01 +6.6179414256968438e-01 2.5618119427692176e-01 -6.9935588582964481e-01 +1.0617925916040324e-01 2.7705469082260237e-01 -9.4419035374163296e-01 +3.7538452698433408e-03 9.8299673739002436e-01 -1.0594865985121323e-01 +3.0880636833573294e-01 9.5071424987208053e-01 -2.6434400056731325e-03 +2.4787094408181370e-01 9.0251551182114254e-01 -3.2656381236112825e-01 +5.3302835060062925e-01 8.0478720705931917e-01 -1.9687101958574477e-01 +4.8352138206601264e-01 7.1639074350172371e-01 -4.9974403170792259e-01 +7.0794945495842965e-01 6.1416356104863112e-01 -3.1801386843434465e-01 +1.7800917644995551e-01 7.7100336451973650e-01 -5.8808410329146776e-01 +3.9652295044934865e-01 5.3996169887401557e-01 -7.2654334072726368e-01 +9.4704755980031019e-01 2.7021341037443436e-01 -1.0403073901454661e-01 +8.5087554699681633e-01 3.2217899622399099e-01 -3.9739635254583422e-01 +8.6819359281909952e-02 5.5936554761791990e-01 -8.1686728524567387e-01 +4.1503222149303010e-01 2.3182390156132765e-01 -8.6749274534174914e-01 +6.3924090161113967e-01 5.1152599318166136e-01 -5.4768670816263954e-01 +7.1362837782328037e-01 6.6998586893888923e-01 -1.0160824788933366e-01 +2.6782910398091664e-01 4.1000771122747326e-01 -8.6183519961950728e-01 +8.4694978186195402e-01 4.9251805155046446e-01 -1.6303011215864308e-01 +-4.5994829107514834e-01 2.6823744542186589e-01 8.4100292742873339e-01 +-8.3590402106315942e-01 3.1846243244931932e-01 4.2690051690529685e-01 +-1.3443561865454329e-01 2.7601155793903576e-01 9.4108111428769059e-01 +-2.3787463085812280e-01 5.4120757263847075e-01 7.8961850105666453e-01 +-5.8745209262643650e-01 4.8698569869998631e-01 6.2873847924936965e-01 +-3.5668735450718081e-01 7.3067430214562168e-01 5.5783875856532450e-01 +-3.7102325266884784e-02 7.3473394373452172e-01 6.5725269533134434e-01 +-1.4000887637599627e-01 8.8125257256782907e-01 4.2056421716799119e-01 +-2.2646314046939883e-01 9.5743508286865353e-01 1.1125588543225773e-01 +-5.1453508021203231e-01 8.4609237663894121e-01 2.8819130345123893e-03 +-6.3836175055914735e-01 6.4293594120652897e-01 3.8910803954967738e-01 +-8.4002197749875718e-01 4.9452049653804980e-01 1.6810820323685638e-01 +-6.8474146297778204e-01 2.3137412863320325e-01 6.8203013099060072e-01 +-4.4085821465001995e-01 8.4746584921949164e-01 2.7891654112714803e-01 +-9.5355354044291873e-01 2.3472906845234354e-01 1.4533812508812599e-01 +-6.7816992011711974e-01 6.9927443457560712e-01 1.4914479012711596e-01 +-9.2717001470462024e-01 3.1241092830209960e-01 -1.2388429094992712e-01 +-4.3053540109906119e-01 2.7050768424120791e-01 -8.5306543450530903e-01 +-3.0805934134836954e-01 9.1957019583148047e-01 -2.0544568209556069e-01 +-5.6865572270573217e-01 7.5361311715844359e-01 -2.8958440253570816e-01 +-3.5395322555411912e-01 7.6217702901108453e-01 -5.1543749825254859e-01 +-6.2200388501813608e-01 5.6223605101585006e-01 -5.1575717475343619e-01 +-7.6529139777488275e-01 6.1977074921919395e-01 -8.9771567481759268e-02 +-5.6743315568982634e-02 8.9495152375570364e-01 -4.0860874425989979e-01 +-8.4104269374174434e-01 2.8805475678872455e-01 -4.3883221117059851e-01 +-1.3929880559620145e-01 2.2184345105563399e-01 -9.5927980824431380e-01 +-3.9574499123219831e-01 5.4649647228571063e-01 -7.2230956730541296e-01 +-1.2164982514323656e-01 7.0794558575765665e-01 -6.7306741217899424e-01 +-6.5958644752066864e-01 2.9815621582429092e-01 -6.8266160893998840e-01 +-7.8071347140547043e-01 5.1210369623398078e-01 -3.2584555990997233e-01 +-1.7455071972280478e-01 4.5493187539711227e-01 -8.6236715276534526e-01 +8.5585183913677587e-01 -2.5111106818084333e-01 4.4855633542866147e-01 +1.2114360781298997e-01 -2.7131175877454594e-01 9.4597557969765389e-01 +9.5249019569267568e-01 -2.4891315099442510e-01 1.3065741842541725e-01 +8.0434062715564159e-01 -5.1684140266917311e-01 2.5710991281757750e-01 +6.8164555949198447e-01 -4.6279913184338489e-01 5.4932252393590930e-01 +5.9859036493462536e-01 -6.8382833398585197e-01 3.8411706783276278e-01 +6.7635393943109134e-01 -7.1358830357167402e-01 5.3991704585162545e-02 +4.3505886551347622e-01 -8.6388595166648985e-01 2.0061567771595035e-01 +2.0667777830841835e-01 -9.6712494882669120e-01 3.8464364385972336e-03 +1.3100033624624871e-01 -9.2500827456833901e-01 3.1471329622285199e-01 +4.1540085966687408e-02 -8.0171323399673411e-01 5.8720892188583784e-01 +4.4942523751083763e-01 -6.0945930088847644e-01 6.3010720965747002e-01 +5.0771598317097966e-01 -3.6816104725387044e-01 7.6113374452457161e-01 +2.4588062721787787e-01 -4.9761888485119637e-01 8.1938131048588780e-01 +3.3784391326092500e-01 -7.9840978129760654e-01 4.7426002434536035e-01 +7.0105690084997274e-01 -2.1797617925009757e-01 6.6795489999892510e-01 +3.4887939515545596e-01 -2.2146345059529948e-01 9.0046126620465272e-01 +2.3631237942977656e-01 -6.7864118894007697e-01 6.8748945656629368e-01 +1.3488963647881833e-01 -2.9068852032843440e-01 -9.3641700178394904e-01 +8.5198208070144021e-01 -2.7246117188164276e-01 -4.3186707731257157e-01 +4.8066949753200960e-01 -8.5565866311457872e-01 -1.2197025135123547e-01 +2.2871877771121072e-02 -8.5924935543450731e-01 -4.8577061470021110e-01 +7.0883282274669634e-01 -6.4493262198176182e-01 -2.6745752705543369e-01 +4.8344453558145639e-01 -7.5468903008765253e-01 -4.2542948751698484e-01 +1.0685418097550842e-01 -6.4291197223118091e-01 -7.4039869533838454e-01 +6.5615480473959642e-01 -2.7249347086431724e-01 -6.9747080994695665e-01 +3.8516936358832643e-01 -4.0842789141070901e-01 -8.1164981707175010e-01 +8.5178332011169944e-01 -4.9810624665385961e-01 -3.8332648352899339e-02 +6.4800852744084847e-01 -5.1580581042107809e-01 -5.3552147921900040e-01 +2.4904681081323449e-01 -9.0705019040830859e-01 -3.0555494034558234e-01 +9.3844755164909621e-01 -2.6346089428082975e-01 -1.6686107848186166e-01 +3.7183666859451892e-01 -6.3939190718781380e-01 -6.5179200853578578e-01 +4.3859287333031016e-01 -1.9010423582464059e-01 -8.6879793866763633e-01 +2.6320082210549256e-01 -7.9661291201862972e-01 -5.2945443081835297e-01 +8.4317375267838701e-01 -4.5131112361644532e-01 -2.6801222424419641e-01 +-4.3828517726611455e-01 -2.0187493698026027e-01 8.6804339063358371e-01 +-8.4186958752772001e-01 -2.9398098809928930e-01 4.3985127062926604e-01 +-1.0279065204886616e-01 -9.7422992009809140e-01 1.2098349001889161e-01 +-1.8331255803103169e-01 -8.7137965017806274e-01 4.3015108510799682e-01 +-6.0291220008406954e-01 -7.9191373221123385e-01 1.5226706364615256e-02 +-2.7623736838456209e-01 -6.8861267386114278e-01 6.6605639960908813e-01 +-4.6678658770560472e-01 -7.4879848774946500e-01 4.5042319954411575e-01 +-8.1023598696758636e-01 -5.4382791095914274e-01 1.4016019231715435e-01 +-5.3218368316686915e-01 -5.0609242622296824e-01 6.6648339066744211e-01 +-2.1248572239240118e-02 -5.5489167755226421e-01 8.2379596527628451e-01 +-6.8499013063831538e-01 -2.0807761100479236e-01 6.8499013323326841e-01 +-3.9442535247224686e-01 -8.8566536167056586e-01 2.0282184228958722e-01 +-1.4484347967787778e-01 -2.4258649995340470e-01 9.5255006995841396e-01 +-6.7993804682976577e-01 -5.7664782422455418e-01 4.2671261122752396e-01 +-9.5553102468721973e-01 -2.3344509870616453e-01 1.3712784685238530e-01 +-3.0894199923148291e-01 -4.4829190663995100e-01 8.3044601022617126e-01 +-6.0023084599166754e-01 -7.4409293649565300e-01 2.5796471157675138e-01 +-6.9933998807049391e-01 -4.1493108775015147e-01 5.6376924231675662e-01 +-9.5322253027210568e-01 -2.2934563144679618e-01 -1.8289032271886924e-01 +-6.6505689637598142e-01 -3.0514342031620023e-01 -6.7287734642080033e-01 +-3.3768497519499008e-02 -9.6683377349002453e-01 -2.0247639174118240e-01 +-3.3594173173246972e-01 -9.2533844392007270e-01 -8.2077656012423228e-02 +-2.7055761873508544e-01 -8.6805074553629291e-01 -3.9550717415914821e-01 +-5.5209577150761679e-01 -7.7292549688178802e-01 -2.7839627809663792e-01 +-2.0567537889015278e-01 -7.2608291235747602e-01 -6.4107272863139497e-01 +-7.7975317418805279e-01 -5.7473587159077411e-01 -1.7654793111436179e-01 +-7.0145962603020762e-01 -5.3721360170235144e-01 -4.5355637360417173e-01 +-1.6215641768162498e-01 -4.7233852315098823e-01 -8.5252135170796206e-01 +-4.2735456408433870e-01 -2.7973639440107817e-01 -8.5383061510085811e-01 +-4.5183745877492620e-01 -5.3877839906727343e-01 -6.9937117017974626e-01 +-8.3294697851848709e-01 -2.3745599959010638e-01 -4.8175183316491493e-01 +-4.5047103590756565e-01 -7.2435242074617368e-01 -5.1012254970820869e-01 +-1.4916491104322735e-01 -2.0819944547081287e-01 -9.5777646097061830e-01 +-8.5584128040099283e-01 -4.0086316410412770e-01 -3.0539497613483868e-01 +-8.9572290022461698e-01 -4.0729371217520260e-01 -5.6819356598662642e-02 + +# pnum index +pointelements +7 +1 1 +2 1 +3 1 +4 1 +5 1 +6 1 +7 1 + +endmesh From 64e6a745d032573432cdf7f90e62947b49adccfb Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 16 Feb 2025 13:45:06 -0500 Subject: [PATCH 08/16] fix(meshGeneration): changed from netgen to vtk as that format is better supported --- utils/meshGeneration/generateMesh.py | 2 +- utils/meshGeneration/sphere.mesh | Bin 22040 -> 17780 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/meshGeneration/generateMesh.py b/utils/meshGeneration/generateMesh.py index 9d6805b..26dc861 100644 --- a/utils/meshGeneration/generateMesh.py +++ b/utils/meshGeneration/generateMesh.py @@ -12,7 +12,7 @@ def generate_spherical_mesh(radius=1, meshSize=0.1): return myMesh def write_mfem_mesh(meshData, filename): - meshio.write(filename, meshData, file_format='netgen') + meshio.write(filename, meshData, file_format='vtk') if __name__ == '__main__': parser = argparse.ArgumentParser(description='Generate a spherical mesh') diff --git a/utils/meshGeneration/sphere.mesh b/utils/meshGeneration/sphere.mesh index 61ae4828857cfb94c68a5d6d84e20ae25ab1a54b..24e26f49a20ec429c22f1606af3a570ca70dc69c 100644 GIT binary patch literal 17780 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 literal 22040 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 From 08f810448c439803612ac421a68f2a64f4e3092a Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 16 Feb 2025 13:53:19 -0500 Subject: [PATCH 09/16] fix(meshGeneration): changed file extension to vtk and 3D --- utils/meshGeneration/generateMesh.py | 4 ++-- utils/meshGeneration/sphere.mesh | Bin 17780 -> 0 bytes utils/meshGeneration/sphere.vtk | Bin 0 -> 48318 bytes 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 utils/meshGeneration/sphere.mesh create mode 100644 utils/meshGeneration/sphere.vtk diff --git a/utils/meshGeneration/generateMesh.py b/utils/meshGeneration/generateMesh.py index 26dc861..e3ad512 100644 --- a/utils/meshGeneration/generateMesh.py +++ b/utils/meshGeneration/generateMesh.py @@ -8,7 +8,7 @@ def generate_spherical_mesh(radius=1, meshSize=0.1): # Create a spherical (ball) geometry centered at (0,0,0) sphere = geo.add_ball([0, 0, 0], radius) # Generate a 2D mesh (i.e. surface mesh) of the sphere - myMesh = geo.generate_mesh(dim=2) + myMesh = geo.generate_mesh(dim=3) return myMesh def write_mfem_mesh(meshData, filename): @@ -21,4 +21,4 @@ if __name__ == '__main__': args = parser.parse_args() meshData = generate_spherical_mesh(args.radius, args.meshSize) - write_mfem_mesh(meshData, 'sphere.mesh') \ No newline at end of file + write_mfem_mesh(meshData, 'sphere.vtk') \ No newline at end of file diff --git a/utils/meshGeneration/sphere.mesh b/utils/meshGeneration/sphere.mesh deleted file mode 100644 index 24e26f49a20ec429c22f1606af3a570ca70dc69c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17780 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 diff --git a/utils/meshGeneration/sphere.vtk b/utils/meshGeneration/sphere.vtk new file mode 100644 index 0000000000000000000000000000000000000000..904ec6a37b8c1fba7f68d381fda422ba0582f424 GIT binary patch literal 48318 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 KhyU`Q`~L#|j6#b5 literal 0 HcmV?d00001 From 189a4f5f0b4c094d9957000f720ad2730032ab38 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 16 Feb 2025 14:04:16 -0500 Subject: [PATCH 10/16] feat(resource/mesh): added base unit sphere mesh --- src/resources/mesh/sphere.vtk | Bin 0 -> 48318 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/resources/mesh/sphere.vtk diff --git a/src/resources/mesh/sphere.vtk b/src/resources/mesh/sphere.vtk new file mode 100644 index 0000000000000000000000000000000000000000..904ec6a37b8c1fba7f68d381fda422ba0582f424 GIT binary patch literal 48318 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 KhyU`Q`~L#|j6#b5 literal 0 HcmV?d00001 From 41da26cd815e410e67b97e1348337a3039b6862e Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 16 Feb 2025 14:33:31 -0500 Subject: [PATCH 11/16] docs(readme): updated readme --- Readme.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index 93b9b91..e1beda1 100644 --- a/Readme.md +++ b/Readme.md @@ -1,8 +1,16 @@ # New implimentation of 3+1D SSE +New (as yet unnamed) 4DSSE code. We need an exciting name. -# Building -In order to build run +This code is very early in development and should not be used for scientific purposes yet. + + +## Building +In order to build you will need meson installed on your system. The easiest way to do this is to use the python package manager (pip) +```bash +pip install meson +``` +You can then either use the mk script or meson commands automatically. When running either the script or meson commands manually `MFEM` will be pulled from github and built. As part of this a small patch will be applied to the MFEM `CMakeLists.txt` file. This process should only need to happen once as future builds will use the cached version of MFEM in `subprojects` and the cached build files of `MFEM` in `build`. ```bash ./mk ``` @@ -10,3 +18,6 @@ if you want to build with no test suite run ```bash ./mk --noTest ``` + +## Current Status +Currently we are working on implimenting modules such as opacity, equation of state, polytrope, and meshing. Builds may not work on any branches at any time. From 1713f6cb0869dd0636f9e81c5c410dbf40598ed5 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 16 Feb 2025 15:07:20 -0500 Subject: [PATCH 12/16] fix(utils/meshGeneration): changed mesh format to gmsh 2.2 meshio writes vtk version 9 but mfem only supports up to version 4, so we changed to gmsh version 2.2 which is supported --- utils/meshGeneration/generateMesh.py | 4 ++-- utils/meshGeneration/sphere.msh | Bin 0 -> 34259 bytes utils/meshGeneration/sphere.vtk | Bin 48318 -> 0 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 utils/meshGeneration/sphere.msh delete mode 100644 utils/meshGeneration/sphere.vtk diff --git a/utils/meshGeneration/generateMesh.py b/utils/meshGeneration/generateMesh.py index e3ad512..eb76bb2 100644 --- a/utils/meshGeneration/generateMesh.py +++ b/utils/meshGeneration/generateMesh.py @@ -12,7 +12,7 @@ def generate_spherical_mesh(radius=1, meshSize=0.1): return myMesh def write_mfem_mesh(meshData, filename): - meshio.write(filename, meshData, file_format='vtk') + meshio.write(filename, meshData, file_format='gmsh22') if __name__ == '__main__': parser = argparse.ArgumentParser(description='Generate a spherical mesh') @@ -21,4 +21,4 @@ if __name__ == '__main__': args = parser.parse_args() meshData = generate_spherical_mesh(args.radius, args.meshSize) - write_mfem_mesh(meshData, 'sphere.vtk') \ No newline at end of file + write_mfem_mesh(meshData, 'sphere.msh') \ No newline at end of file diff --git a/utils/meshGeneration/sphere.msh b/utils/meshGeneration/sphere.msh new file mode 100644 index 0000000000000000000000000000000000000000..416c655ee2b9cd106d956e1d466e6f27ab12367b GIT binary patch literal 34259 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 L2e1GBue<&aH!g3X literal 0 HcmV?d00001 diff --git a/utils/meshGeneration/sphere.vtk b/utils/meshGeneration/sphere.vtk deleted file mode 100644 index 904ec6a37b8c1fba7f68d381fda422ba0582f424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48318 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 KhyU`Q`~L#|j6#b5 From ea037cf996bdb9dd4ac56a0d5af25dea0f00d089 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 16 Feb 2025 15:08:33 -0500 Subject: [PATCH 13/16] feat(meshIO): added basic mesh reading implimentation also added basic unit sphere mesh file which can be rescaled --- src/meshIO/meson.build | 19 +++++++++++++++ src/meshIO/private/meshIO.cpp | 37 ++++++++++++++++++++++++++++++ src/meshIO/public/meshIO.h | 42 ++++++++++++++++++++++++++++++++++ src/meson.build | 3 ++- src/resources/mesh/sphere.msh | Bin 0 -> 34259 bytes src/resources/mesh/sphere.vtk | Bin 48318 -> 0 bytes 6 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/meshIO/meson.build create mode 100644 src/meshIO/private/meshIO.cpp create mode 100644 src/meshIO/public/meshIO.h create mode 100644 src/resources/mesh/sphere.msh delete mode 100644 src/resources/mesh/sphere.vtk diff --git a/src/meshIO/meson.build b/src/meshIO/meson.build new file mode 100644 index 0000000..1ea870a --- /dev/null +++ b/src/meshIO/meson.build @@ -0,0 +1,19 @@ +# Define the library +meshIO_sources = files( + 'private/meshIO.cpp', +) + +meshIO_headers = files( + 'public/meshIO.h' +) + +# Define the libmeshIO library so it can be linked against by other parts of the build system +libmeshIO = static_library('meshIO', + meshIO_sources, + include_directories: include_directories('public'), + cpp_args: ['-fvisibility=default'], + dependencies: [mfem_dep], + install : true) + +# Make headers accessible +install_headers(meshIO_headers, subdir : '4DSSE/meshIO') \ No newline at end of file diff --git a/src/meshIO/private/meshIO.cpp b/src/meshIO/private/meshIO.cpp new file mode 100644 index 0000000..8674af3 --- /dev/null +++ b/src/meshIO/private/meshIO.cpp @@ -0,0 +1,37 @@ +#include "mfem.hpp" +#include +#include +#include + +#include "meshIO.h" + + +MeshIO::MeshIO(const std::string &mesh_file) +{ + mesh_file_ = mesh_file; + std::ifstream mesh_stream(mesh_file); + if (!mesh_stream) + { + throw std::runtime_error("Mesh file not found: " + mesh_file); + loaded_ = false; + } + else + { + mesh_ = mfem::Mesh(mesh_stream, 1, 2); + loaded_ = true; + } +} + +MeshIO::~MeshIO() +{ +} + +bool MeshIO::IsLoaded() const +{ + return loaded_; +} + +mfem::Mesh& MeshIO::GetMesh() +{ + return mesh_; +} \ No newline at end of file diff --git a/src/meshIO/public/meshIO.h b/src/meshIO/public/meshIO.h new file mode 100644 index 0000000..5975801 --- /dev/null +++ b/src/meshIO/public/meshIO.h @@ -0,0 +1,42 @@ +#ifndef MESHIO_H +#define MESHIO_H + +#include "mfem.hpp" +#include + +/** + * @brief Class for handling mesh input/output operations. + */ +class MeshIO +{ +private: + bool loaded_; ///< Flag to indicate if the mesh is loaded + std::string mesh_file_; ///< Filename of the mesh file + mfem::Mesh mesh_; ///< The mesh object + +public: + /** + * @brief Constructor that initializes the MeshIO object with a mesh file. + * @param mesh_file The name of the mesh file. + */ + MeshIO(const std::string &mesh_file); + + /** + * @brief Destructor for the MeshIO class. + */ + ~MeshIO(); + + /** + * @brief Get the mesh object. + * @return Reference to the mesh object. + */ + mfem::Mesh& GetMesh(); + + /** + * @brief Check if the mesh is loaded. + * @return True if the mesh is loaded, false otherwise. + */ + bool IsLoaded() const; +}; + +#endif // MESHIO_H \ No newline at end of file diff --git a/src/meson.build b/src/meson.build index db87771..9ae232d 100644 --- a/src/meson.build +++ b/src/meson.build @@ -4,4 +4,5 @@ subdir('resources') # Build the main source code subdir('dobj') subdir('const') -subdir('opatIO') \ No newline at end of file +subdir('opatIO') +subdir('meshIO') \ No newline at end of file diff --git a/src/resources/mesh/sphere.msh b/src/resources/mesh/sphere.msh new file mode 100644 index 0000000000000000000000000000000000000000..416c655ee2b9cd106d956e1d466e6f27ab12367b GIT binary patch literal 34259 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 L2e1GBue<&aH!g3X literal 0 HcmV?d00001 diff --git a/src/resources/mesh/sphere.vtk b/src/resources/mesh/sphere.vtk deleted file mode 100644 index 904ec6a37b8c1fba7f68d381fda422ba0582f424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48318 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 KhyU`Q`~L#|j6#b5 From a727eca14cfbbd1d27f392f4329132602a98ed56 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 16 Feb 2025 15:09:22 -0500 Subject: [PATCH 14/16] docs(meson.build): updated build system docs --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 74c7770..3724fac 100644 --- a/meson.build +++ b/meson.build @@ -3,7 +3,7 @@ project('4DSSE', 'cpp', version: '0.0.1a', default_options: ['cpp_std=c++23'], m # Add default visibility for all C++ targets add_project_arguments('-fvisibility=default', language: 'cpp') -# Build external dependencies +# Build external dependencies first so that all the embedded resources are available to the other targets subdir('build-config') # Build the main project From 2f753c6ea07f31501102b41e65417f9535620c19 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 16 Feb 2025 15:10:13 -0500 Subject: [PATCH 15/16] test(tests/meshIO): added basic test suite for meshIO just tests the constuctor, getMesh, and isLoaded method. This confirms that a basic spherical mesh can be loaded in correctly --- tests/meshIO/meshIOTest.cpp | 26 ++++++++++++++++++++++++++ tests/meshIO/meson.build | 22 ++++++++++++++++++++++ tests/meson.build | 1 + 3 files changed, 49 insertions(+) create mode 100644 tests/meshIO/meshIOTest.cpp create mode 100644 tests/meshIO/meson.build diff --git a/tests/meshIO/meshIOTest.cpp b/tests/meshIO/meshIOTest.cpp new file mode 100644 index 0000000..1ed55d1 --- /dev/null +++ b/tests/meshIO/meshIOTest.cpp @@ -0,0 +1,26 @@ +#include +#include "meshIO.h" +#include +#include +#include "mfem.hpp" + +std::string EXAMPLE_FILENAME = std::string(getenv("MESON_SOURCE_ROOT")) + "/src/resources/mesh/sphere.msh"; + + +class meshIOTest : public ::testing::Test {}; + +TEST_F(meshIOTest, DefaultConstructor) { + EXPECT_NO_THROW(MeshIO meshIO(EXAMPLE_FILENAME)); +} + +TEST_F(meshIOTest, IsLoaded) { + MeshIO meshIO(EXAMPLE_FILENAME); + EXPECT_EQ(meshIO.IsLoaded(), true); +} + +TEST_F(meshIOTest, GetMesh) { + MeshIO meshIO(EXAMPLE_FILENAME); + mfem::Mesh& mesh = meshIO.GetMesh(); + EXPECT_EQ(mesh.GetNE(), 670); + EXPECT_EQ(mesh.GetNV(), 201); +} \ No newline at end of file diff --git a/tests/meshIO/meson.build b/tests/meshIO/meson.build new file mode 100644 index 0000000..6db5297 --- /dev/null +++ b/tests/meshIO/meson.build @@ -0,0 +1,22 @@ +# Test files for mesh +test_sources = [ + 'meshIOTest.cpp', +] + +foreach test_file : test_sources + exe_name = test_file.split('.')[0] + message('Building test: ' + exe_name) + + # Create an executable target for each test + test_exe = executable( + exe_name, + test_file, + dependencies: [gtest_dep, mfem_dep], + include_directories: include_directories('../../src/meshIO/public'), + link_with: libmeshIO, # Link the dobj library + install_rpath: '@loader_path/../../src' # Ensure runtime library path resolves correctly + ) + + # Add the executable as a test + test(exe_name, test_exe) +endforeach diff --git a/tests/meson.build b/tests/meson.build index 45693ff..162daab 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -6,6 +6,7 @@ gtest_nomain_dep = dependency('gtest', main: false, required : true) subdir('dobj') subdir('const') subdir('opatIO') +subdir('meshIO') # Subdirectories for sandbox tests subdir('dobj_sandbox') From 4158c893d49ea6c64938403ddccfb39f9e8aff91 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 16 Feb 2025 15:20:24 -0500 Subject: [PATCH 16/16] docs(tests/meshIO): added comments to meshIO tests --- tests/meshIO/meshIOTest.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/meshIO/meshIOTest.cpp b/tests/meshIO/meshIOTest.cpp index 1ed55d1..07eec4f 100644 --- a/tests/meshIO/meshIOTest.cpp +++ b/tests/meshIO/meshIOTest.cpp @@ -6,6 +6,16 @@ std::string EXAMPLE_FILENAME = std::string(getenv("MESON_SOURCE_ROOT")) + "/src/resources/mesh/sphere.msh"; +double ComputeMeshVolume(mfem::Mesh &mesh) +{ + double totalVolume = 0.0; + for (int i = 0; i < mesh.GetNE(); i++) // Loop over all elements + { + totalVolume += mesh.GetElementVolume(i); + } + return totalVolume; +} + class meshIOTest : public ::testing::Test {}; @@ -23,4 +33,6 @@ TEST_F(meshIOTest, GetMesh) { mfem::Mesh& mesh = meshIO.GetMesh(); EXPECT_EQ(mesh.GetNE(), 670); EXPECT_EQ(mesh.GetNV(), 201); + double volume = ComputeMeshVolume(mesh); + EXPECT_DOUBLE_EQ(volume, 3.9357596288315868); } \ No newline at end of file