From a7fa4fc1fdd7db02fe8549d8a896259d644757aa Mon Sep 17 00:00:00 2001 From: billellis Date: Fri, 6 Oct 2023 15:05:34 +0100 Subject: [PATCH 01/41] Started implementation of steady state solvers, equation systemss and formulations. --- .../steady_state_equation_system_operator.cpp | 50 +++++++++++++++++ .../steady_state_equation_system_operator.hpp | 55 +++++++++++++++++++ src/formulations/steady_state_formulation.cpp | 0 src/formulations/steady_state_formulation.hpp | 13 +++++ 4 files changed, 118 insertions(+) create mode 100644 src/formulations/steady_state_equation_system_operator.cpp create mode 100644 src/formulations/steady_state_equation_system_operator.hpp create mode 100644 src/formulations/steady_state_formulation.cpp create mode 100644 src/formulations/steady_state_formulation.hpp diff --git a/src/formulations/steady_state_equation_system_operator.cpp b/src/formulations/steady_state_equation_system_operator.cpp new file mode 100644 index 000000000..f180b8c2d --- /dev/null +++ b/src/formulations/steady_state_equation_system_operator.cpp @@ -0,0 +1,50 @@ +#include "steady_state_equation_system_operator.hpp" + +namespace hephaestus { + +void SteadyStateEquationSystemOperator::SetGridFunctions() { + local_test_vars = populateVectorFromNamedFieldsMap( + _gridfunctions, state_var_names) + + // Set operator size and block structure + block_trueOffsets.SetSize(local_test_vars.size() + 1) + block_trueOffsets[0] = 0; + for (unsigned int ind = 0; ind < local_test_vars.size(); ++ind) { + block_trueOffsets[ind + 1] = + local_test_vars.at(ind)->ParFESpace()->TrueVSize(); + } + block_trueOffsets.PartialSum(); + + true_offsets.SetSize(local_test_vars.size() + 1); + true_offsets[0] = 0; + for (unsigned int ind = 0; ind < local_test_vars.size(); ++ind) { + true_offsets[ind + 1] = local_test_vars.at(ind)->ParFESpace()->GetVSize(); + } + true_offsets.PartialSum(); + + this->height = true_offsets[local_test_vars.size()]; + this->width = true_offsets[local_test_vars.size()]; + trueX.Update(block_trueOffsets); + trueRhs.Update(block_trueOffsets); + + // Populate vector of active auxiliary gridfunctions + active_aux_var_names.resize(0); + for (auto &aux_var_name : aux_var_names) { + if (_gridfunctions.Has(aux_var_name)) { + active_aux_var_names.push_back(aux_var_name); + } + } +} + +void SteadyStateEquationSystemOperator::Init(mfem::Vector &X) { + // Define material property coefficients + for (unsigned int ind = 0; ind < local_test_vars.size(); ++ind) { + local_test_vars.at(ind)->MakeRef(local_test_vars.at(ind)->ParFESpace(), + const_cast(X), + true_offsets[ind]); + } +} + +void SteadyStateEquationSystemOperator::Solve(mfem::Vector &X) {} + +} \ No newline at end of file diff --git a/src/formulations/steady_state_equation_system_operator.hpp b/src/formulations/steady_state_equation_system_operator.hpp new file mode 100644 index 000000000..70735530e --- /dev/null +++ b/src/formulations/steady_state_equation_system_operator.hpp @@ -0,0 +1,55 @@ +#pragma once +#include "../common/pfem_extras.hpp" +#include "auxsolvers.hpp" +#include "equation_system.hpp" +#include "hephaestus_solvers.hpp" +#include "inputs.hpp" +#include "sources.hpp" + +namespace hephaestus { +class SteadyStateEquationSystemOperator : public mfem::Operator { +public: + SteadyStateEquationSystemOperator( + mfem::ParMesh &pmesh, hephaestus::FESpaces &fespaces, + hephaestus::GridFunctions &gridfunctions, hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients, hephaestus::Sources &sources, + hephaestus::InputParameters &solver_options) + : myid_(0), num_procs_(1), pmesh_(&pmesh), _fespaces(fespaces), + _gridfunctions(gridfunctions), _bc_map(bc_map), _sources(sources), + _coefficients(coefficients), _solver_options(solver_options){}; + + ~SteadyStateEquationSystemOperator(){}; + + virtual void SetGridFunctions(); + virtual void Init(mfem::Vector &X); + virtual void Solve(mfem::Vector &X); + void Mult(const mfem::Vector &x, mfem::Vector &y) const override{}; + + mfem::Array true_offsets, block_trueOffsets; + // Vector of names of state gridfunctions used in formulation, ordered by + // appearance in block vector during solve. + std::vector state_var_names; + // Vector of names of recognised auxiliary gridfunctions that can be + // calculated from formulation, + std::vector aux_var_names; + // Vector of names of active auxiliary gridfunctions that are being calculated + // in formulation, + std::vector active_aux_var_names; + + std::vector local_trial_vars, local_test_vars; + + int myid_; + int num_procs_; + mfem::ParMesh *pmesh_; + hephaestus::FESpaces &_fespaces; + hephaestus::GridFunctions &_gridfunctions; + hephaestus::BCMap &_bc_map; + hephaestus::Sources &_sources; + hephaestus::Coefficients &_coefficients; + hephaestus::InputParameters &_solver_options; + + mfem::OperatorHandle blockA; + mfem::BlockVector trueX, trueRhs; +}; + +} // namespace hephaestus \ No newline at end of file diff --git a/src/formulations/steady_state_formulation.cpp b/src/formulations/steady_state_formulation.cpp new file mode 100644 index 000000000..e69de29bb diff --git a/src/formulations/steady_state_formulation.hpp b/src/formulations/steady_state_formulation.hpp new file mode 100644 index 000000000..d45319720 --- /dev/null +++ b/src/formulations/steady_state_formulation.hpp @@ -0,0 +1,13 @@ +#pragma once +#include "steady_state_problem_builder.hpp" + +namespace hephaestus { + +// +class SteadyStateFormulation : public hephaestus::SteadyStateProblemBuilder { + + +public: + SteadyStateFormulation(); +}; +} // namespace hephaestus \ No newline at end of file From 6ff50f718cc27e40e133af52ec26e0baead52160 Mon Sep 17 00:00:00 2001 From: billellis Date: Fri, 6 Oct 2023 15:09:17 +0100 Subject: [PATCH 02/41] Added missing constructor to steadyStateFormulation. --- src/formulations/steady_state_formulation.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/formulations/steady_state_formulation.cpp b/src/formulations/steady_state_formulation.cpp index e69de29bb..f6c6b7a6e 100644 --- a/src/formulations/steady_state_formulation.cpp +++ b/src/formulations/steady_state_formulation.cpp @@ -0,0 +1,7 @@ +#include "steady_state_formulation.hpp" + +namespace hephaestus { + +SteadyStateFormulation::SteadyStateFormulation(){}; + +} // namespace hephaestus From 4bdfea9cc4eec2a6c3d90f1271286a48cdb9933b Mon Sep 17 00:00:00 2001 From: billellis Date: Fri, 6 Oct 2023 15:09:39 +0100 Subject: [PATCH 03/41] Added SteadyStateFormulation include header to formulation.hpp. --- src/formulations/formulation.hpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/formulations/formulation.hpp b/src/formulations/formulation.hpp index 04eed44ed..21f01bce6 100644 --- a/src/formulations/formulation.hpp +++ b/src/formulations/formulation.hpp @@ -1,4 +1,10 @@ #pragma once +<<<<<<< HEAD #include "frequency_domain_em_formulation.hpp" #include "steady_state_em_formulation.hpp" #include "time_domain_em_formulation.hpp" +======= +#include "frequency_domain_formulation.hpp" +#include "time_domain_formulation.hpp" +#include "steady_state_formulation.hpp" +>>>>>>> d27c7c4 (Added SteadyStateFormulation include header to formulation.hpp.) From 88cc9d1f3333321d896e0217ee0c68a6adaeed0c Mon Sep 17 00:00:00 2001 From: billellis Date: Sat, 28 Oct 2023 23:15:53 +0100 Subject: [PATCH 04/41] Further implementation of thermomech formulation --- src/CMakeCache.txt | 371 ++++++++ src/CMakeFiles/3.25.1/CMakeCXXCompiler.cmake | 83 ++ .../3.25.1/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 15992 bytes src/CMakeFiles/3.25.1/CMakeSystem.cmake | 15 + .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 857 ++++++++++++++++++ src/CMakeFiles/3.25.1/CompilerIdCXX/a.out | Bin 0 -> 16096 bytes src/CMakeFiles/CMakeOutput.log | 230 +++++ src/CMakeFiles/cmake.check_cache | 1 + .../thermal_expansion_formulation.cpp | 202 +++++ .../thermal_expansion_formulation.hpp | 73 ++ src/formulations/formulation.hpp | 6 - src/integrators/MixedWeakDivIntegrator.cpp | 78 ++ src/integrators/MixedWeakDivIntegrator.hpp | 42 + src/kernels/mixed_weak_divergence_kernel.cpp | 22 + src/kernels/mixed_weak_divergence_kernel.hpp | 21 + 15 files changed, 1995 insertions(+), 6 deletions(-) create mode 100644 src/CMakeCache.txt create mode 100644 src/CMakeFiles/3.25.1/CMakeCXXCompiler.cmake create mode 100755 src/CMakeFiles/3.25.1/CMakeDetermineCompilerABI_CXX.bin create mode 100644 src/CMakeFiles/3.25.1/CMakeSystem.cmake create mode 100644 src/CMakeFiles/3.25.1/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 src/CMakeFiles/3.25.1/CompilerIdCXX/a.out create mode 100644 src/CMakeFiles/CMakeOutput.log create mode 100644 src/CMakeFiles/cmake.check_cache create mode 100644 src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp create mode 100644 src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp create mode 100644 src/integrators/MixedWeakDivIntegrator.cpp create mode 100644 src/integrators/MixedWeakDivIntegrator.hpp create mode 100644 src/kernels/mixed_weak_divergence_kernel.cpp create mode 100644 src/kernels/mixed_weak_divergence_kernel.hpp diff --git a/src/CMakeCache.txt b/src/CMakeCache.txt new file mode 100644 index 000000000..97d0e3467 --- /dev/null +++ b/src/CMakeCache.txt @@ -0,0 +1,371 @@ +# This is the CMakeCache file. +# For build in directory: /home/bill/Projects/hephaestus/src +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//The directory containing a CMake configuration file for Boost. +Boost_DIR:PATH=/usr/lib/x86_64-linux-gnu/cmake/Boost-1.74.0 + +//Path to a file. +Boost_INCLUDE_DIR:PATH=/usr/include + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-12 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-12 + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/bill/Projects/hephaestus/src/CMakeFiles/pkgRedirects + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=hephaestus + +//Value Computed by CMake +CMAKE_PROJECT_VERSION:STATIC=0.0.0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MAJOR:STATIC=0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MINOR:STATIC=0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_PATCH:STATIC=0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_TWEAK:STATIC= + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Path to the MFEM common miniapp headers. +MFEM_COMMON_INCLUDES:PATH=/home/bill/Projects/hephaestus/../mfem/miniapps/common + +//Path to the MFEM build or install prefix. +MFEM_DIR:PATH=/home/bill/Projects/hephaestus/../mfem_build + +//The directory containing a CMake configuration file for boost_headers. +boost_headers_DIR:PATH=/usr/lib/x86_64-linux-gnu/cmake/boost_headers-1.74.0 + +//Value Computed by CMake +hephaestus_BINARY_DIR:STATIC=/home/bill/Projects/hephaestus/src + +//Value Computed by CMake +hephaestus_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +hephaestus_SOURCE_DIR:STATIC=/home/bill/Projects/hephaestus + +//The directory containing a CMake configuration file for mfem. +mfem_DIR:PATH=mfem_DIR-NOTFOUND + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: Boost_DIR +Boost_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/bill/Projects/hephaestus/src +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=25 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=1 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/bill/Projects/hephaestus +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.25 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//Details about finding Boost +FIND_PACKAGE_MESSAGE_DETAILS_Boost:INTERNAL=[/usr/lib/x86_64-linux-gnu/cmake/Boost-1.74.0/BoostConfig.cmake][c ][v1.74.0()] +//linker supports push/pop state +_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE +//ADVANCED property for variable: boost_headers_DIR +boost_headers_DIR-ADVANCED:INTERNAL=1 + diff --git a/src/CMakeFiles/3.25.1/CMakeCXXCompiler.cmake b/src/CMakeFiles/3.25.1/CMakeCXXCompiler.cmake new file mode 100644 index 000000000..08880e71e --- /dev/null +++ b/src/CMakeFiles/3.25.1/CMakeCXXCompiler.cmake @@ -0,0 +1,83 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "12.3.0") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-12") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-12") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/12;/usr/include/x86_64-linux-gnu/c++/12;/usr/include/c++/12/backward;/usr/lib/gcc/x86_64-linux-gnu/12/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/12;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/src/CMakeFiles/3.25.1/CMakeDetermineCompilerABI_CXX.bin b/src/CMakeFiles/3.25.1/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..1d9cbca5a080640d7c58b918a8033555c4b855ff GIT binary patch literal 15992 zcmeHOeQX>@6`#9&xipC{Y0{XaG)HMrLh;6S662(Vo@1Z0ha5X34irMz?D^LAiu*8k zd(9=r`zAW-+OOn_RZ|w?C#7b(t`u>SWF=;QSVYLr4pJ+iK6Enk|9W`9<_>& zZ&J6YilIjv7=AgxXp;|sAx_$7qw*T$J9c#Ec~2A$ACM)q4Q%`Vd#ppx@oKVKy> zc;FLK0T6tnzNFL`!V&QU2K_iTv+de%cJD$=N?f)I!jDDvQ--#u?$AlFCiMXkPmT$H zdnBG=?2uxBVZRCS3uC|d0l5xNhhOk=|4w}e#qUhgFGhv&?V46V)b}3p^W!4=*8_C( zA*pY%en?3Cff8P|J@00_cW%$;+VgI)I@Lba)7{>^)2Nh;F28DSSCYOwruGjVQB+Kg zISHeRpU^VOW8FH@vwg?4ix2(!&diTL|ATAK-S?dpm-6{b18l?XW*@fU#N}a#u*`X` zlWlZ7K1n$l+k_XKpBH>$kpug!ZKCTVF4=^)7U7GF@HY{ETa$8>Wl=;&t%_%tJ*!~5 zMPf#$Y-`Ld+Ijb0N3ojY+pYEwX7=@2T}GF&tC8QaQ(2jj16Ix{JL7J}bIKzJ`tqfs zGh%1+4wW@tC>5o2OPe+|NQ;O~DTb?9otaWq0^5xDyW@avY$ej7DdGdF&2S?JKwa%ZIr}zGp3aGEI zkm<`~M(gHJ`Q;J+Ffr!oWnX02J?E{bs^80bs``fd<<`w7*zmj{*}J~|t}Mg0>*ma? z`P858GM}1TV#b~}FI@N5Q2|?|fR_4Y-7ffZdr$0TwW{86#5}n-&RKKj1#hK!YVUFq zu57E<>sNAgczW62>8?9=jC>pQv;Xh!Ath&ykl)P5ubMN}%g>~*aWhY)ubN*mPp^M= zHHGJUOB1b6)?(>v!mi`f{1t1?EseLH3u}JUOtbzEp^~m0JI_`7ebnd`t~yFl1fmE; z5r`rXMIeem6oDuLQ3Rq0L=lK05Jljhj{v{_daaZh8W`SFq4#s8F)KIem5+Ax91GeH zWrhc`d%S7ODVLnw(Q;;=wSOp`=^yG-FP=X9*u9e4NlEe0a8AKTF7o->Gtn-FryIrV_DD zD_69fp%-e*^V)&q6?HZlasv{HUyRe51%%2f0aP-1=-38S5eWeu)$G zuUxN}Sbkg|06yx#YuTT}o1X61Zd6&dZ4;{SVq_2K_viCCAq zzprmka_f<7wdhroon6KbqocjE>WiKCcagMno6xUaA&;x2>ZN+visKz4&1WSbNipDc z!_DluKjLb&nw0S<<|--t*$}@&c#Ln@XDAa>Z7Pw{48}dLvX0Ty0*qI!Rq8&0VZ??Yt0pgP|3gEYW zeuGk}07==e5uZ>S8vOiJk_j{ znvu&`Jx_ds#!p)cmKu4#$XXgFDH(_UvnEnq5qpd`c)cw4+vNAue}+WLSBdBLgzcBb z8%;qGK5i!dwgrq9_7J}|PQQ|&>p~qKEqk3tiB`(f(>BYq#}yG3uR1nnjH>xn^_Ew# zMtNO*g)DO=Ydl}d+IcJImC6;%u1=}ZQeiUhcuvmfXl}tP`d!N|mu-3|SoF%%YOHJ* z94l8X6sE}~AX#MTEimmnV1L-@yZi1ws>RJa<=%Z6V{~#-Ssxhe>~@P|B`feOlG!fJ z&Oc$avhFz5n{#d2VLcRerf1WbB-3yKOgZs1Vw0srZwMVkov-#^rQAk#-Q z?Z&XurfALnL(1AeIJ~cS&>9{XIGi4_Mtb+rLrpRa?Quw9E5qw;UvP4^XDdH+R0<1v zF9Qh+H#S(gO39kAi#gu(kQpYcoLjW26(^_ol*m3?sfe%avY?F;{JfRVh<8vl-4?NM zFGi!;yaU7UB-)QunJ##Cme4C}oIuVk(sqnVWfV)EV~iK8#$>rP>6E?c0F|w}w3o)s z2}S+d&STIwpRg+v%E(O@sS1r=S!+J(lq+tjxInN-S9bC?J1B!kkTNFo`e2NgDC0R( zbmU=3mL)&3hBF}pZz4zjkhH%Zf!YIkD%>u(qtqPk7=wbU3>x|c8qrOzx__PGc@tgo zji>M7eQ=mJp=7oVrniv5a~rzc{j}JAFHtwg6Z8-7`{L*1!GzyIaQuH7^vC}> zFbPA!u>bpr{|n8H(01^pWi9oh%=pal3q zzD^nDP(S8v3Golx%jv*fEg^zAF>mnjzoWtE4E%$Lz7LwFq`+@U!}vPBnZ9Tbe*gGB i3~dkkU*Q`lN~uucs8?%wj@;aTEB~=jS{ZT(iRvGDbR3lc literal 0 HcmV?d00001 diff --git a/src/CMakeFiles/3.25.1/CMakeSystem.cmake b/src/CMakeFiles/3.25.1/CMakeSystem.cmake new file mode 100644 index 000000000..60c39546f --- /dev/null +++ b/src/CMakeFiles/3.25.1/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-6.2.0-35-generic") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "6.2.0-35-generic") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-6.2.0-35-generic") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "6.2.0-35-generic") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/src/CMakeFiles/3.25.1/CompilerIdCXX/CMakeCXXCompilerId.cpp b/src/CMakeFiles/3.25.1/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 000000000..c9ba632f0 --- /dev/null +++ b/src/CMakeFiles/3.25.1/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,857 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(1) +# if defined(__LCC__) +# define COMPILER_VERSION_MINOR DEC(__LCC__- 100) +# endif +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > 202002L + "23" +#elif CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/src/CMakeFiles/3.25.1/CompilerIdCXX/a.out b/src/CMakeFiles/3.25.1/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..af772193ccf4f65330f7ec6d0559990d12cec44c GIT binary patch literal 16096 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 BSqA_B literal 0 HcmV?d00001 diff --git a/src/CMakeFiles/CMakeOutput.log b/src/CMakeFiles/CMakeOutput.log new file mode 100644 index 000000000..8870c14b8 --- /dev/null +++ b/src/CMakeFiles/CMakeOutput.log @@ -0,0 +1,230 @@ +The system is: Linux - 6.2.0-35-generic - x86_64 +Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. +Compiler: /usr/bin/c++ +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + +The CXX compiler identification is GNU, found in "/home/bill/Projects/hephaestus/src/CMakeFiles/3.25.1/CompilerIdCXX/a.out" + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /home/bill/Projects/hephaestus/src/CMakeFiles/CMakeScratch/TryCompile-fefg0b + +Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_b60f1/fast && /usr/bin/gmake -f CMakeFiles/cmTC_b60f1.dir/build.make CMakeFiles/cmTC_b60f1.dir/build +gmake[1]: Entering directory '/home/bill/Projects/hephaestus/src/CMakeFiles/CMakeScratch/TryCompile-fefg0b' +Building CXX object CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o +/usr/bin/c++ -v -o CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.25/Modules/CMakeCXXCompilerABI.cpp +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 12.3.0-1ubuntu1~23.04' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 12.3.0 (Ubuntu 12.3.0-1ubuntu1~23.04) +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b60f1.dir/' + /usr/lib/gcc/x86_64-linux-gnu/12/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.25/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_b60f1.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccFDMmMV.s +GNU C++17 (Ubuntu 12.3.0-1ubuntu1~23.04) version 12.3.0 (x86_64-linux-gnu) + compiled by GNU C version 12.3.0, GMP version 6.2.1, MPFR version 4.2.0, MPC version 1.3.1, isl version isl-0.25-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/12" +ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/12/include-fixed" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include" +#include "..." search starts here: +#include <...> search starts here: + /usr/include/c++/12 + /usr/include/x86_64-linux-gnu/c++/12 + /usr/include/c++/12/backward + /usr/lib/gcc/x86_64-linux-gnu/12/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include +End of search list. +GNU C++17 (Ubuntu 12.3.0-1ubuntu1~23.04) version 12.3.0 (x86_64-linux-gnu) + compiled by GNU C version 12.3.0, GMP version 6.2.1, MPFR version 4.2.0, MPC version 1.3.1, isl version isl-0.25-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +Compiler executable checksum: 16d8e9c7f95d1b20c28ab711ca7df821 +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b60f1.dir/' + as -v --64 -o CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccFDMmMV.s +GNU assembler version 2.40 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.40 +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.' +Linking CXX executable cmTC_b60f1 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b60f1.dir/link.txt --verbose=1 +/usr/bin/c++ -v CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_b60f1 +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 12.3.0-1ubuntu1~23.04' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 12.3.0 (Ubuntu 12.3.0-1ubuntu1~23.04) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_b60f1' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_b60f1.' + /usr/lib/gcc/x86_64-linux-gnu/12/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/12/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper -plugin-opt=-fresolution=/tmp/ccwVbdIz.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b60f1 /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/12 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/12/../../.. CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_b60f1' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_b60f1.' +gmake[1]: Leaving directory '/home/bill/Projects/hephaestus/src/CMakeFiles/CMakeScratch/TryCompile-fefg0b' + + + +Parsed CXX implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/usr/include/c++/12] + add: [/usr/include/x86_64-linux-gnu/c++/12] + add: [/usr/include/c++/12/backward] + add: [/usr/lib/gcc/x86_64-linux-gnu/12/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/include/c++/12] ==> [/usr/include/c++/12] + collapse include dir [/usr/include/x86_64-linux-gnu/c++/12] ==> [/usr/include/x86_64-linux-gnu/c++/12] + collapse include dir [/usr/include/c++/12/backward] ==> [/usr/include/c++/12/backward] + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/12/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/12/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/12;/usr/include/x86_64-linux-gnu/c++/12;/usr/include/c++/12/backward;/usr/lib/gcc/x86_64-linux-gnu/12/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/bill/Projects/hephaestus/src/CMakeFiles/CMakeScratch/TryCompile-fefg0b] + ignore line: [] + ignore line: [Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_b60f1/fast && /usr/bin/gmake -f CMakeFiles/cmTC_b60f1.dir/build.make CMakeFiles/cmTC_b60f1.dir/build] + ignore line: [gmake[1]: Entering directory '/home/bill/Projects/hephaestus/src/CMakeFiles/CMakeScratch/TryCompile-fefg0b'] + ignore line: [Building CXX object CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.25/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 12.3.0-1ubuntu1~23.04' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 12.3.0 (Ubuntu 12.3.0-1ubuntu1~23.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b60f1.dir/'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/12/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.25/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_b60f1.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccFDMmMV.s] + ignore line: [GNU C++17 (Ubuntu 12.3.0-1ubuntu1~23.04) version 12.3.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 12.3.0 GMP version 6.2.1 MPFR version 4.2.0 MPC version 1.3.1 isl version isl-0.25-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/12"] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/12/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/include/c++/12] + ignore line: [ /usr/include/x86_64-linux-gnu/c++/12] + ignore line: [ /usr/include/c++/12/backward] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/12/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C++17 (Ubuntu 12.3.0-1ubuntu1~23.04) version 12.3.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 12.3.0 GMP version 6.2.1 MPFR version 4.2.0 MPC version 1.3.1 isl version isl-0.25-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: 16d8e9c7f95d1b20c28ab711ca7df821] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b60f1.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccFDMmMV.s] + ignore line: [GNU assembler version 2.40 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.40] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [Linking CXX executable cmTC_b60f1] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b60f1.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_b60f1 ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 12.3.0-1ubuntu1~23.04' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 12.3.0 (Ubuntu 12.3.0-1ubuntu1~23.04) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_b60f1' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_b60f1.'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/12/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/12/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper -plugin-opt=-fresolution=/tmp/ccwVbdIz.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b60f1 /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/12 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/12/../../.. CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/12/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/12/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccwVbdIz.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_b60f1] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/12] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/12] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/12/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/12/../../..] + arg [CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crtn.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/12] ==> [/usr/lib/gcc/x86_64-linux-gnu/12] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/12/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/12;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + diff --git a/src/CMakeFiles/cmake.check_cache b/src/CMakeFiles/cmake.check_cache new file mode 100644 index 000000000..3dccd7317 --- /dev/null +++ b/src/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp new file mode 100644 index 000000000..e1c026894 --- /dev/null +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp @@ -0,0 +1,202 @@ +#include "thermal_expansion_formulation.hpp" + +namespace hephaestus { + +ThermalExpansionFormulation::ThermalExpansionFormulation() : TimeDomainFormulation() { + + temp_var_name = std::string("temp_var"); + displacement_var_name = std::string("displacement_var"); + stress_free_temp_coef_name = std::string("stress_free_temp"); + lame_param_coef_name = std::string("lame_param"); + shear_modulus_coef_name = std::string("shear_modulus"); + thermal_expansion_coef_name = std::string("thermal_expansion"); + thermal_expansion_coef_name = std::string("thermal_conductivity"); +} + +void ThermalExpansionFormulation::RegisterCoefficients() { + hephaestus::Coefficients &coefficients = this->GetProblem()->coefficients; + + + if (!coefficients.scalars.Has(lame_param_coef_name)) { + MFEM_ABORT(lame_param_coef_name + " coefficient not found."); + } + + if (!coefficients.scalars.Has(shear_modulus_coef_name)) { + MFEM_ABORT(shear_modulus_coef_name + " coefficient not found."); + } + + if (!coefficients.scalars.Has(stress_free_temp_coef_name)) { + MFEM_ABORT(stress_free_temp_coef_name + " coefficient not found."); + } + + if (!coefficients.scalars.Has(thermal_expansion_coef_name)) { + MFEM_ABORT(thermal_expansion_coef_name + " coefficient not found."); + } + + if (!coefficients.scalars.Has(thermal_conductivity_coef_name)) { + MFEM_ABORT(thermal_conductivity_coef_name + " coefficient not found."); + } +} + +// void ThermalExpansionFormulation::ConstructEquationSystem() { +// hephaestus::InputParameters weak_form_params; +// weak_form_params.SetParam("TempVarName", temp_var_name); +// weak_form_params.SetParam("DisplacementVarName", displacement_var_name); +// weak_form_params.SetParam("StressFreeTempVarName", stress_free_temp_coef_name); +// weak_form_params.SetParam("LameParamCoefName", lame_param_coef_name); +// weak_form_params.SetParam("ShearModulusCoefName", shear_modulus_coef_name); +// weak_form_params.SetParam("ThermalExpansionCoefName", thermal_expansion_coef_name); +// this->GetProblem()->ss_equation_system = +// std::make_unique(weak_form_params); +// } + +void ThermalExpansionFormulation::ConstructOperator() { + this->problem->ss_operator = std::make_unique( + *(this->problem->pmesh), this->problem->fespaces, + this->problem->gridfunctions, this->problem->bc_map, + this->problem->coefficients, this->problem->sources, + this->problem->solver_options); + this->problem->ss_operator->SetEquationSystem( + this->problem->ss_equation_system.get()); + this->problem->ss_operator->SetGridFunctions(); +}; + +void ThermalExpansionFormulation::RegisterGridFunctions() { + int &myid = this->GetProblem()->myid_; + hephaestus::GridFunctions &gridfunctions = this->GetProblem()->gridfunctions; + hephaestus::FESpaces &fespaces = this->GetProblem()->fespaces; + + // Register default ParGridFunctions of state gridfunctions if not provided + if (!gridfunctions.Has(temp_var_name)) { + if (myid == 0) { + MFEM_WARNING(temp_var_name << " not found in gridfunctions: building " + "gridfunction from defaults"); + } + AddFESpace(std::string("_TempFESpace"), std::string("H1_")); + AddGridFunction(temp_var_name, std::string("_TempFESpace")); + }; + + if (!gridfunctions.Has(displacement_var_name)) { + if (myid == 0) { + MFEM_WARNING(displacement_var_name << " not found in gridfunctions: building " + "gridfunction from defaults"); + } + AddFESpace(std::string("_DisplacementFESpace"), std::string("H1_"), 3, mfem::ordering::byVdim); + AddGridFunction(displacement_var_name, std::string("_DisplacementFESpace")); + }; + // Register time derivatives + SteadyStateProblemBuilder::RegisterGridFunctions(); +}; + + + +ThermalExpansionOperator::ThermalExpansionOperator( + mfem::ParMesh &pmesh, hephaestus::FESpaces &fespaces, + hephaestus::GridFunctions &gridfunctions, hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients, hephaestus::Sources &sources, + hephaestus::InputParameters &solver_options) + : SteadyStateEquationSystemOperator(pmesh, fespaces, gridfunctions, + bc_map, coefficients, sources, + solver_options), + temp_var_name(solver_options.GetParam("TempVarName")), + displacement_var_name(solver_options.GetParam("DisplacementVarName")), + lame_coef_name(solver_options.GetParam("LameCoefName")), + shear_modulus_coef_name(solver_options.GetParam("ShearModulusCoefName")) + thermal_expansion_coef_name(solver_options.GetParam("ThermalExpansionCoefName")) + stress_free_temp_coef_name(solver_options.GetParam("StressFreeTemp")) {} + + +void ThermalExpansionOperator::SetGridFunctions() { + state_var_names.push_back(temp_var_name); + state_var_names.push_back(displacement_var_name); + + SteadyStateEquationSystemOperator::SetGridFunctions(); + + t_ = new mfem::ParGridFunction(local_test_vars.at(0)->ParFESpace()); + u_ = new mfem::ParGridFunction(local_test_vars.at(1)->ParFESpace()); +}; + +void ThermalExpansionOperator::Init(mfem::Vector &X) { + ::Init(X); + + lameCoef_ = _coefficients.scalars.Get(lame_coef_name); + shearModulusCoef_ = _coefficients.scalars.Get(shear_modulus_coef_name); + thermalExpansionCoef_ = _coefficients.scalars.Get(thermal_expansion_coef_name); + stressFreeTempCoef_ = _coefficients.scalars.Get(stress_free_temp_coef_name); + thermalConductivityCoef_ = _coefficients.scalars.Get(thermal_conductivity_coef_name); + +} + +void ThermalExpansionOperator::Solve(mfem::Vector &X) { + mfem::OperatorHandle A1; + mfem::Array2D hBlocks; + hBlocks.DeleteAll(); + hBlocks.SetSize(2,2); + hBlocks(0, 0) = new mfem::HypreParMatrix; + hBlocks(1, 1) = new mfem::HypreParMatrix; + hBlocks(1, 0) = new mfem::HypreParMatrix; + hBlocks(0, 1) = nullptr; + + mfem::Array offsets({0, t_->ParFESpace().TrueVSize(), + t_->ParFESpace().TrueVSize() + u_->ParFESpace().TrueVSize()}); + + mfem::BlockVector trueX(offsets); + mfem::BlockVector trueRHS(offsets); + + // Set up bilinear forms + aMixed_ = new mfem::ParMixedBilinearForm(t_->ParFESpace(), u_->ParFESpace()); + a1_ = new mfem::ParBilinearForm(t_->ParFESpace()); + a2_ = new mfem::ParBilinearForm(u_->ParFESpace()); + + if(thermalExpansionCoef_) { + aMixed_->AddDomainIntegrator(new mfem::MixedWeakDivIntegrator(lameCoef_)); + } + + // + a1_->AddDomainIntegrator(new mfem::DiffusionIntegrator(thermalConductivityCoef_)); + a2_->AddDomainIntegrator(new mfem::ElasticityIntegrator(lameCoef_, shearModulusCoef_)); + + _bc_map.applyEssentialBCs(std::string(temp_var_name), ess_temp_bdr_tdofs_, *t_, + pmesh_); + + _bc_map.applyEssentialBCs(std::string(displacement_var_name), ess_disp_bdr_tdofs_, *u_, + pmesh_); + + + _bc_map.applyIntegratedBCs(std::string(temp_var_name), *a1_, pmesh_); + _bc_map.applyIntegratedBCs(std::string(displacement_var_name), *a2_, pmesh_); + + + a1_->Assemble(); + a1_->Finalize(); + + a2_->Assemble(); + a2_->Finalize(); + + aMixed_->Assemble(); + aMixed_->Finalize(); + + // Set up linear forms + b1_ = new mfem::ParLinearForm(t_->ParFESpace()); + b2_ = new mfem::ParLinearForm(u_->ParFESpace()); + + b1_->Assemble(); + b2_->Assemble(); + + a1_->FormLinearSystem(ess_temp_bdr_tdofs, *t_, *b1_, *hBlocks(0, 0), trueX.GetBlock(0) trueRHS.GetBlock(0)); + a2_->FormLinearSystem(ess_disp_bdr_tdofs_, *u_, *b1_, *hBlocks(1, 1), trueX.GetBlock(1), trueRHS.GetBlock(1)); + aMixed_->FormRectangularLinearSystem(ess_temp_bdr_tdofs, ess_disp_bdr_tdofs_, t_, b2_, *hBlocks(1, 0), trueX.GetBlock(0), trueB.GetBlock(1)); + A1 = mfem::HypreParMatrixFromBlocks(hBlocks); + mfem::HypreBoomerAMG *amg = new mfem::HypreBoomerAMG(A1); + mfem::HyprePCG solver(MPI_COMM_WORLD); + solver.SetOperator(A1); + solver.Mult(trueRHS, trueX); + delete A1; + + a1_->RecoverFEMSolution(trueX.GetBlock(0), *b1_, *u_); + a2_->RecoverFEMSolution(trueX.GetBlock(1), *b2_, *t_); +} + + + +} //hephaestus diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp new file mode 100644 index 000000000..addb6a862 --- /dev/null +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp @@ -0,0 +1,73 @@ +#pragma once +#include "../common/pfem_extras.hpp" +#include "formulation.hpp" +#include "inputs.hpp" +#include "sources.hpp" + +namespace hephaestus { + +class ThermalExpansionFormulation : public SteadyStateFormulation { +public: + ThermalExpansionFormulation(); + + virtual void ConstructEquationSystem() override; + + virtual void ConstructOperator() override; + + virtual void RegisterGridFunctions() override; + + virtual void RegisterCoefficients() override; + +protected: + std::string temp_var_name, displacement_var_name, + stress_free_temp_coef_name, lame_param_coef_name, shear_modulus_coef_name, thermal_expansion_coef_name, thermal_conductivity_coef_name; +}; + + +// Do this later +// class ThermalExpansionEquationSystem : public TimeDependentEquationSystem { +// public: +// ThermalExpansionEquationSystem(const hephaestus::InputParameters ¶ms); + +// virtual void Init(hephaestus::GridFunctions &gridfunctions, +// const hephaestus::FESpaces &fespaces, +// hephaestus::BCMap &bc_map, +// hephaestus::Coefficients &coefficients) override; +// virtual void addKernels() override; + +// std::string temp_var_name, displacement_var_name, +// stress_free_temp_coef_name, lame_param_coef_name, shear_modulus_coef_name; +// }; + +class ThermalExpansionOperator : public SteadyStateEquationSystemOperator { +public: + ThermalExpansionOperator(mfem::ParMesh &pmesh, hephaestus::FESpaces &fespaces, + hephaestus::GridFunctions &gridfunctions, + hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients, + hephaestus::Sources &sources, + hephaestus::InputParameters &solver_options); + + ~ThermalExpansionOperator(){}; + + virtual void SetGridFunctions() override; + virtual void Init(mfem::Vector &X) override; + virtual void Solve(mfem::Vector &X) override; + + std::string temp_var_name, displacement_var_name, + stress_free_temp_coef_name, lame_coef_name, shear_modulus_coef_name, thermal_expansion_coef_name, thermal_conductivity_coef_name; + mfem::ParGridFunction *u_, *t_; + mfem::ParLinearForm *b1_, *b2_; + mfem::ParBilinearForm *a1_, *a2_; + mfem::ParMixedBilinearForm *aMixed_; + + mfem::Coefficient *thermalConductivityCoef_; + mfem::Coefficient *lameCoef_; // Lame's first parameter + mfem::Coefficient *shearModulusCoef_; // Shear modulus + mfem::Coefficient *thermalExpansionCoef_; // Thermal expansion coefficient + mfem::Coefficient *stressFreeTempCoef_; // Stress free temperature + + mfem::Array ess_temp_bdr_tdofs, ess_disp_bdr_tdofs_; +}; + +} // namespace hephaestus diff --git a/src/formulations/formulation.hpp b/src/formulations/formulation.hpp index 21f01bce6..04eed44ed 100644 --- a/src/formulations/formulation.hpp +++ b/src/formulations/formulation.hpp @@ -1,10 +1,4 @@ #pragma once -<<<<<<< HEAD #include "frequency_domain_em_formulation.hpp" #include "steady_state_em_formulation.hpp" #include "time_domain_em_formulation.hpp" -======= -#include "frequency_domain_formulation.hpp" -#include "time_domain_formulation.hpp" -#include "steady_state_formulation.hpp" ->>>>>>> d27c7c4 (Added SteadyStateFormulation include header to formulation.hpp.) diff --git a/src/integrators/MixedWeakDivIntegrator.cpp b/src/integrators/MixedWeakDivIntegrator.cpp new file mode 100644 index 000000000..3a3d995eb --- /dev/null +++ b/src/integrators/MixedWeakDivIntegrator.cpp @@ -0,0 +1,78 @@ +#include "integrators.hpp" + +void MixedWeakDivergenceIntegrator::AssembleElementMatrix2(const mfem::FiniteElement &trial_fe, + const mfem::FiniteElement &test_fe, + mfem::ElementTransformation &Trans, + mfem::DenseMatrix &elmat) +{ + // Get number of dofs/ basis functions + dim = trial_fe.GetDim(); + int trial_dof = trial_fe.GetDof(); + int test_dof = test_fe.GetDof(); + double w, coeff, lambda, mu, alpha; + Jadj.SetSize(dim); + + // vector to store values of basis functions + trial_shape.SetSize(trial_dof); + test_div_shape.SetSize(dim * test_dof); + + // Derivitive placeholder for getting div + test_d_shape.SetSize(test_dof, dim); + test_g_shape.SetSize(test_dof, dim); + + + elmat.SetSize(dim*test_dof, trial_dof); + elmat = 0.0; + pelmat.SetSize(dim*test_dof, trial_dof); + + mfem::Geometry::Type geom = Trans.GetGeometryType(); + + const mfem::IntegrationRule *ir = &GetIntRule(trial_fe, test_fe, Trans); + + for(int i = 0; i < ir->GetNPoints(); i++) + { + const mfem::IntegrationPoint &ip = ir->IntPoint(i); + Trans.SetIntPoint(&ip); + + trial_fe.CalcShape(ip, trial_shape); + test_fe.CalcDShape(ip, test_d_shape); + + w = ip.weight; + + if (a) + { + alpha = a -> Eval (Trans, ip); + } + + alpha *= -1; + + Mult(test_d_shape, Trans.AdjugateJacobian(), test_g_shape); + trial_shape *= w; + trial_shape *= coeff; + + test_g_shape.GradToDiv(test_div_shape); + AddMultVWt(test_div_shape, trial_shape, elmat); + } +} + +const mfem::IntegrationRule& MixedWeakDivergenceIntegrator::GetIntRule(const mfem::FiniteElement &trial_fe, + const mfem::FiniteElement &test_fe, + mfem::ElementTransformation &Trans) +{ + int order = trial_fe.GetOrder() + + Trans.OrderGrad(&test_fe) + + Trans.OrderJ(); + + return mfem::IntRules.Get(trial_fe.GetGeomType(), order); +} + +const mfem::IntegrationRule& MixedWeakDivergenceIntegrator::GetIntRule(const mfem::FiniteElement &trial_fe, + const mfem::FiniteElement &test_fe, + mfem::ElementTransformation &Trans) +{ + int order = trial_fe.GetOrder() + + Trans.OrderGrad(&test_fe) + + Trans.OrderJ(); + + return mfem::IntRules.Get(trial_fe.GetGeomType(), order); +} \ No newline at end of file diff --git a/src/integrators/MixedWeakDivIntegrator.hpp b/src/integrators/MixedWeakDivIntegrator.hpp new file mode 100644 index 000000000..023f1bb11 --- /dev/null +++ b/src/integrators/MixedWeakDivIntegrator.hpp @@ -0,0 +1,42 @@ +#pragma once +#include "mfem.hpp" + + +namespace mfem { + +class MixedWeakDivergenceIntegrator : public mfem::BilinearFormIntegrator +{ +protected: + mfem::Coefficient *a; + +private: + mfem::Vector trial_shape; + mfem::Vector test_div_shape; + mfem::DenseMatrix test_d_shape; + mfem::DenseMatrix pelmat; + mfem::DenseMatrix test_g_shape; + mfem::DenseMatrix Jadj; + + const mfem::DofToQuad *trial_maps, *test_maps; ///< Not owned + const mfem::GeometricFactors *geom; ///< Not owned + int dim; + +public: + + MixedWeakDivergenceIntegrator(mfem::Coefficient &a) : + a(&a), l(&l), m(&m), trial_maps(NULL), test_maps(NULL), geom(NULL) + {} + + ~MixedWeakDivergenceIntegrator() { } + + void AssembleElementMatrix2(const mfem::FiniteElement &trial_fe, + const mfem::FiniteElement &test_fe, + mfem::ElementTransformation &Trans, + mfem::DenseMatrix &elmat); + + const mfem::IntegrationRule& GetIntRule(const mfem::FiniteElement &trial_fe, + const mfem::FiniteElement &test_fe, + mfem::ElementTransformation &Trans); +}; + +} // namespace mfem \ No newline at end of file diff --git a/src/kernels/mixed_weak_divergence_kernel.cpp b/src/kernels/mixed_weak_divergence_kernel.cpp new file mode 100644 index 000000000..36b085e0f --- /dev/null +++ b/src/kernels/mixed_weak_divergence_kernel.cpp @@ -0,0 +1,22 @@ +#include "mixed_vector_gradient_kernel.hpp" + +namespace hephaestus { + +MixedWeakDivergenceKernel::MixedWeakDivergenceKernel( + const hephaestus::InputParameters ¶ms) + : Kernel(params), + coef_name(params.GetParam("CoefficientName")) {} + +void MixedWeakDivergenceKernel::Init(hephaestus::GridFunctions &gridfunctions, + const hephaestus::FESpaces &fespaces, + hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients) { + + coef = coefficients.scalars.Get(coef_name); +} + +void MixedWeakDivergenceKernel::Apply(mfem::ParMixedBilinearForm *mblf) { + mblf->AddDomainIntegrator(new mfem::MixedVectorGradientIntegrator(*coef)); +} + +} // namespace hephaestus diff --git a/src/kernels/mixed_weak_divergence_kernel.hpp b/src/kernels/mixed_weak_divergence_kernel.hpp new file mode 100644 index 000000000..e8fe85ddf --- /dev/null +++ b/src/kernels/mixed_weak_divergence_kernel.hpp @@ -0,0 +1,21 @@ +#pragma once +#include "integrators.hpp" + +namespace hephaestus { + +/* +(σ ∇ V, u') +*/ +class MixedWeakDivergenceKernel : public Kernel { +public: + MixedWeakDivergenceKernel(const hephaestus::InputParameters ¶ms); + virtual void Init(hephaestus::GridFunctions &gridfunctions, + const hephaestus::FESpaces &fespaces, + hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients) override; + virtual void Apply(mfem::ParMixedBilinearForm *mblf) override; + std::string coef_name; + mfem::Coefficient *coef; +}; + +}; // namespace hephaestus From f1e9fe14da75daaa10094c602f3e4370a77b4cbf Mon Sep 17 00:00:00 2001 From: Bill Ellis Date: Mon, 30 Oct 2023 10:51:39 +0000 Subject: [PATCH 05/41] Thermal Expansion formulation now building --- .../ThermalExpansionExample.cpp | 0 .../thermal_expansion_formulation.cpp | 72 ++++++++++--------- .../thermal_expansion_formulation.hpp | 5 +- .../steady_state_equation_system_operator.cpp | 4 +- src/integrators/CMakeLists.txt | 0 ....cpp => MixedWeakDivergenceIntegrator.cpp} | 23 +++--- ....hpp => MixedWeakDivergenceIntegrator.hpp} | 7 +- src/kernels/kernels.hpp | 1 + src/kernels/mixed_weak_divergence_kernel.cpp | 2 +- src/kernels/mixed_weak_divergence_kernel.hpp | 2 +- 10 files changed, 57 insertions(+), 59 deletions(-) create mode 100644 examples/ThermalExpansion/ThermalExpansionExample.cpp create mode 100644 src/integrators/CMakeLists.txt rename src/integrators/{MixedWeakDivIntegrator.cpp => MixedWeakDivergenceIntegrator.cpp} (71%) rename src/integrators/{MixedWeakDivIntegrator.hpp => MixedWeakDivergenceIntegrator.hpp} (88%) diff --git a/examples/ThermalExpansion/ThermalExpansionExample.cpp b/examples/ThermalExpansion/ThermalExpansionExample.cpp new file mode 100644 index 000000000..e69de29bb diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp index e1c026894..a6a1adedd 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp @@ -2,7 +2,7 @@ namespace hephaestus { -ThermalExpansionFormulation::ThermalExpansionFormulation() : TimeDomainFormulation() { +ThermalExpansionFormulation::ThermalExpansionFormulation() : SteadyStateFormulation() { temp_var_name = std::string("temp_var"); displacement_var_name = std::string("displacement_var"); @@ -56,8 +56,8 @@ void ThermalExpansionFormulation::ConstructOperator() { this->problem->gridfunctions, this->problem->bc_map, this->problem->coefficients, this->problem->sources, this->problem->solver_options); - this->problem->ss_operator->SetEquationSystem( - this->problem->ss_equation_system.get()); + // this->problem->ss_operator->SetEquationSystem( + // this->problem->ss_equation_system.get()); this->problem->ss_operator->SetGridFunctions(); }; @@ -81,7 +81,7 @@ void ThermalExpansionFormulation::RegisterGridFunctions() { MFEM_WARNING(displacement_var_name << " not found in gridfunctions: building " "gridfunction from defaults"); } - AddFESpace(std::string("_DisplacementFESpace"), std::string("H1_"), 3, mfem::ordering::byVdim); + AddFESpace(std::string("_DisplacementFESpace"), std::string("H1_"), 3, mfem::Ordering::byVDIM); AddGridFunction(displacement_var_name, std::string("_DisplacementFESpace")); }; // Register time derivatives @@ -101,8 +101,8 @@ ThermalExpansionOperator::ThermalExpansionOperator( temp_var_name(solver_options.GetParam("TempVarName")), displacement_var_name(solver_options.GetParam("DisplacementVarName")), lame_coef_name(solver_options.GetParam("LameCoefName")), - shear_modulus_coef_name(solver_options.GetParam("ShearModulusCoefName")) - thermal_expansion_coef_name(solver_options.GetParam("ThermalExpansionCoefName")) + shear_modulus_coef_name(solver_options.GetParam("ShearModulusCoefName")), + thermal_expansion_coef_name(solver_options.GetParam("ThermalExpansionCoefName")), stress_free_temp_coef_name(solver_options.GetParam("StressFreeTemp")) {} @@ -117,7 +117,7 @@ void ThermalExpansionOperator::SetGridFunctions() { }; void ThermalExpansionOperator::Init(mfem::Vector &X) { - ::Init(X); + SteadyStateEquationSystemOperator::Init(X); lameCoef_ = _coefficients.scalars.Get(lame_coef_name); shearModulusCoef_ = _coefficients.scalars.Get(shear_modulus_coef_name); @@ -128,17 +128,17 @@ void ThermalExpansionOperator::Init(mfem::Vector &X) { } void ThermalExpansionOperator::Solve(mfem::Vector &X) { - mfem::OperatorHandle A1; - mfem::Array2D hBlocks; - hBlocks.DeleteAll(); - hBlocks.SetSize(2,2); - hBlocks(0, 0) = new mfem::HypreParMatrix; - hBlocks(1, 1) = new mfem::HypreParMatrix; - hBlocks(1, 0) = new mfem::HypreParMatrix; - hBlocks(0, 1) = nullptr; - - mfem::Array offsets({0, t_->ParFESpace().TrueVSize(), - t_->ParFESpace().TrueVSize() + u_->ParFESpace().TrueVSize()}); + + mfem::Array2D OpBlocks; + OpBlocks.DeleteAll(); + OpBlocks.SetSize(2,2); + OpBlocks(0, 0) = new mfem::HypreParMatrix; + OpBlocks(1, 1) = new mfem::HypreParMatrix; + OpBlocks(1, 0) = new mfem::HypreParMatrix; + OpBlocks(0, 1) = nullptr; + + mfem::Array offsets({0, t_->ParFESpace()->TrueVSize(), + t_->ParFESpace()->TrueVSize() + u_->ParFESpace()->TrueVSize()}); mfem::BlockVector trueX(offsets); mfem::BlockVector trueRHS(offsets); @@ -147,14 +147,18 @@ void ThermalExpansionOperator::Solve(mfem::Vector &X) { aMixed_ = new mfem::ParMixedBilinearForm(t_->ParFESpace(), u_->ParFESpace()); a1_ = new mfem::ParBilinearForm(t_->ParFESpace()); a2_ = new mfem::ParBilinearForm(u_->ParFESpace()); + // Set up linear forms + b1_ = new mfem::ParLinearForm(t_->ParFESpace()); + b2_ = new mfem::ParLinearForm(u_->ParFESpace()); + if(thermalExpansionCoef_) { - aMixed_->AddDomainIntegrator(new mfem::MixedWeakDivIntegrator(lameCoef_)); + aMixed_->AddDomainIntegrator(new mfem::MixedWeakDivergenceIntegrator(*lameCoef_)); } // - a1_->AddDomainIntegrator(new mfem::DiffusionIntegrator(thermalConductivityCoef_)); - a2_->AddDomainIntegrator(new mfem::ElasticityIntegrator(lameCoef_, shearModulusCoef_)); + a1_->AddDomainIntegrator(new mfem::DiffusionIntegrator(*thermalConductivityCoef_)); + a2_->AddDomainIntegrator(new mfem::ElasticityIntegrator(*lameCoef_, *shearModulusCoef_)); _bc_map.applyEssentialBCs(std::string(temp_var_name), ess_temp_bdr_tdofs_, *t_, pmesh_); @@ -163,8 +167,8 @@ void ThermalExpansionOperator::Solve(mfem::Vector &X) { pmesh_); - _bc_map.applyIntegratedBCs(std::string(temp_var_name), *a1_, pmesh_); - _bc_map.applyIntegratedBCs(std::string(displacement_var_name), *a2_, pmesh_); + _bc_map.applyIntegratedBCs(std::string(temp_var_name), *b1_, pmesh_); + _bc_map.applyIntegratedBCs(std::string(displacement_var_name), *b2_, pmesh_); a1_->Assemble(); @@ -176,22 +180,22 @@ void ThermalExpansionOperator::Solve(mfem::Vector &X) { aMixed_->Assemble(); aMixed_->Finalize(); - // Set up linear forms - b1_ = new mfem::ParLinearForm(t_->ParFESpace()); - b2_ = new mfem::ParLinearForm(u_->ParFESpace()); - b1_->Assemble(); b2_->Assemble(); - a1_->FormLinearSystem(ess_temp_bdr_tdofs, *t_, *b1_, *hBlocks(0, 0), trueX.GetBlock(0) trueRHS.GetBlock(0)); - a2_->FormLinearSystem(ess_disp_bdr_tdofs_, *u_, *b1_, *hBlocks(1, 1), trueX.GetBlock(1), trueRHS.GetBlock(1)); - aMixed_->FormRectangularLinearSystem(ess_temp_bdr_tdofs, ess_disp_bdr_tdofs_, t_, b2_, *hBlocks(1, 0), trueX.GetBlock(0), trueB.GetBlock(1)); - A1 = mfem::HypreParMatrixFromBlocks(hBlocks); - mfem::HypreBoomerAMG *amg = new mfem::HypreBoomerAMG(A1); + a1_->FormLinearSystem(ess_temp_bdr_tdofs_, *t_, *b1_, *OpBlocks(0, 0), trueX.GetBlock(0), trueRHS.GetBlock(0)); + a2_->FormLinearSystem(ess_disp_bdr_tdofs_, *u_, *b1_, *OpBlocks(1, 1), trueX.GetBlock(1), trueRHS.GetBlock(1)); + aMixed_->FormRectangularLinearSystem(ess_temp_bdr_tdofs_, ess_disp_bdr_tdofs_, *t_, *b2_, *OpBlocks(1, 0), trueX.GetBlock(0), trueRHS.GetBlock(1)); + + mfem::HypreParMatrix *A1 = mfem::HypreParMatrixFromBlocks(OpBlocks); + mfem::HypreBoomerAMG *amg = new mfem::HypreBoomerAMG(*A1); mfem::HyprePCG solver(MPI_COMM_WORLD); - solver.SetOperator(A1); + solver.SetOperator(*A1); solver.Mult(trueRHS, trueX); - delete A1; + + delete(amg); + delete(A1); + OpBlocks.DeleteAll(); a1_->RecoverFEMSolution(trueX.GetBlock(0), *b1_, *u_); a2_->RecoverFEMSolution(trueX.GetBlock(1), *b2_, *t_); diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp index addb6a862..61a6d9013 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp @@ -3,6 +3,7 @@ #include "formulation.hpp" #include "inputs.hpp" #include "sources.hpp" +#include "MixedWeakDivergenceIntegrator.hpp" namespace hephaestus { @@ -10,7 +11,7 @@ class ThermalExpansionFormulation : public SteadyStateFormulation { public: ThermalExpansionFormulation(); - virtual void ConstructEquationSystem() override; + virtual void ConstructEquationSystem() override {}; virtual void ConstructOperator() override; @@ -67,7 +68,7 @@ class ThermalExpansionOperator : public SteadyStateEquationSystemOperator { mfem::Coefficient *thermalExpansionCoef_; // Thermal expansion coefficient mfem::Coefficient *stressFreeTempCoef_; // Stress free temperature - mfem::Array ess_temp_bdr_tdofs, ess_disp_bdr_tdofs_; + mfem::Array ess_temp_bdr_tdofs_, ess_disp_bdr_tdofs_; }; } // namespace hephaestus diff --git a/src/formulations/steady_state_equation_system_operator.cpp b/src/formulations/steady_state_equation_system_operator.cpp index f180b8c2d..702b630e1 100644 --- a/src/formulations/steady_state_equation_system_operator.cpp +++ b/src/formulations/steady_state_equation_system_operator.cpp @@ -4,10 +4,10 @@ namespace hephaestus { void SteadyStateEquationSystemOperator::SetGridFunctions() { local_test_vars = populateVectorFromNamedFieldsMap( - _gridfunctions, state_var_names) + _gridfunctions, state_var_names); // Set operator size and block structure - block_trueOffsets.SetSize(local_test_vars.size() + 1) + block_trueOffsets.SetSize(local_test_vars.size() + 1); block_trueOffsets[0] = 0; for (unsigned int ind = 0; ind < local_test_vars.size(); ++ind) { block_trueOffsets[ind + 1] = diff --git a/src/integrators/CMakeLists.txt b/src/integrators/CMakeLists.txt new file mode 100644 index 000000000..e69de29bb diff --git a/src/integrators/MixedWeakDivIntegrator.cpp b/src/integrators/MixedWeakDivergenceIntegrator.cpp similarity index 71% rename from src/integrators/MixedWeakDivIntegrator.cpp rename to src/integrators/MixedWeakDivergenceIntegrator.cpp index 3a3d995eb..e7980f7ba 100644 --- a/src/integrators/MixedWeakDivIntegrator.cpp +++ b/src/integrators/MixedWeakDivergenceIntegrator.cpp @@ -1,9 +1,11 @@ -#include "integrators.hpp" +#include "MixedWeakDivergenceIntegrator.hpp" + +namespace mfem{ void MixedWeakDivergenceIntegrator::AssembleElementMatrix2(const mfem::FiniteElement &trial_fe, - const mfem::FiniteElement &test_fe, - mfem::ElementTransformation &Trans, - mfem::DenseMatrix &elmat) + const mfem::FiniteElement &test_fe, + mfem::ElementTransformation &Trans, + mfem::DenseMatrix &elmat) { // Get number of dofs/ basis functions dim = trial_fe.GetDim(); @@ -55,7 +57,7 @@ void MixedWeakDivergenceIntegrator::AssembleElementMatrix2(const mfem::FiniteEle } } -const mfem::IntegrationRule& MixedWeakDivergenceIntegrator::GetIntRule(const mfem::FiniteElement &trial_fe, +const IntegrationRule& mfem::MixedWeakDivergenceIntegrator::GetIntRule(const mfem::FiniteElement &trial_fe, const mfem::FiniteElement &test_fe, mfem::ElementTransformation &Trans) { @@ -66,13 +68,4 @@ const mfem::IntegrationRule& MixedWeakDivergenceIntegrator::GetIntRule(const mfe return mfem::IntRules.Get(trial_fe.GetGeomType(), order); } -const mfem::IntegrationRule& MixedWeakDivergenceIntegrator::GetIntRule(const mfem::FiniteElement &trial_fe, - const mfem::FiniteElement &test_fe, - mfem::ElementTransformation &Trans) -{ - int order = trial_fe.GetOrder() - + Trans.OrderGrad(&test_fe) - + Trans.OrderJ(); - - return mfem::IntRules.Get(trial_fe.GetGeomType(), order); -} \ No newline at end of file +} //namespace mfem \ No newline at end of file diff --git a/src/integrators/MixedWeakDivIntegrator.hpp b/src/integrators/MixedWeakDivergenceIntegrator.hpp similarity index 88% rename from src/integrators/MixedWeakDivIntegrator.hpp rename to src/integrators/MixedWeakDivergenceIntegrator.hpp index 023f1bb11..9ba27ab89 100644 --- a/src/integrators/MixedWeakDivIntegrator.hpp +++ b/src/integrators/MixedWeakDivergenceIntegrator.hpp @@ -1,7 +1,6 @@ #pragma once #include "mfem.hpp" - namespace mfem { class MixedWeakDivergenceIntegrator : public mfem::BilinearFormIntegrator @@ -24,10 +23,10 @@ class MixedWeakDivergenceIntegrator : public mfem::BilinearFormIntegrator public: MixedWeakDivergenceIntegrator(mfem::Coefficient &a) : - a(&a), l(&l), m(&m), trial_maps(NULL), test_maps(NULL), geom(NULL) - {} + a(&a), trial_maps(NULL), test_maps(NULL), geom(NULL) + {;} - ~MixedWeakDivergenceIntegrator() { } + ~MixedWeakDivergenceIntegrator() {;} void AssembleElementMatrix2(const mfem::FiniteElement &trial_fe, const mfem::FiniteElement &test_fe, diff --git a/src/kernels/kernels.hpp b/src/kernels/kernels.hpp index 61d683dce..0e8794766 100644 --- a/src/kernels/kernels.hpp +++ b/src/kernels/kernels.hpp @@ -6,3 +6,4 @@ #include "vector_fe_weak_divergence_kernel.hpp" #include "weak_curl_curl_kernel.hpp" #include "weak_curl_kernel.hpp" +#include "mixed_weak_divergence_kernel.hpp" diff --git a/src/kernels/mixed_weak_divergence_kernel.cpp b/src/kernels/mixed_weak_divergence_kernel.cpp index 36b085e0f..813b79a1e 100644 --- a/src/kernels/mixed_weak_divergence_kernel.cpp +++ b/src/kernels/mixed_weak_divergence_kernel.cpp @@ -1,4 +1,4 @@ -#include "mixed_vector_gradient_kernel.hpp" +#include "mixed_weak_divergence_kernel.hpp" namespace hephaestus { diff --git a/src/kernels/mixed_weak_divergence_kernel.hpp b/src/kernels/mixed_weak_divergence_kernel.hpp index e8fe85ddf..87c66861c 100644 --- a/src/kernels/mixed_weak_divergence_kernel.hpp +++ b/src/kernels/mixed_weak_divergence_kernel.hpp @@ -1,5 +1,5 @@ #pragma once -#include "integrators.hpp" +#include "kernel_base.hpp" namespace hephaestus { From 86aa0cd1011416ddc398c75f856295a09ed793e2 Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 30 Oct 2023 15:08:01 +0000 Subject: [PATCH 06/41] Added thermal_expansion_formulation include to factory.hpp --- src/factory/factory.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/factory/factory.hpp b/src/factory/factory.hpp index 5cab10a0e..153f0ba26 100644 --- a/src/factory/factory.hpp +++ b/src/factory/factory.hpp @@ -7,6 +7,8 @@ #include "e_formulation.hpp" #include "eb_dual_formulation.hpp" #include "h_formulation.hpp" +#include "hj_dual_formulation.hpp" +#include "thermal_expansion_formulation.hpp" #include "inputs.hpp" #include "magnetostatic_formulation.hpp" From 4713415ca10c2fee270afeedf29e98fa11c0ae95 Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 30 Oct 2023 15:09:17 +0000 Subject: [PATCH 07/41] Added thermalExpansion example to examples --- examples/ThermalExpansion/CMakeLists.txt | 23 +++++ .../ThermalExpansionExample.cpp | 98 +++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 examples/ThermalExpansion/CMakeLists.txt diff --git a/examples/ThermalExpansion/CMakeLists.txt b/examples/ThermalExpansion/CMakeLists.txt new file mode 100644 index 000000000..1c612f572 --- /dev/null +++ b/examples/ThermalExpansion/CMakeLists.txt @@ -0,0 +1,23 @@ +file(GLOB_RECURSE example_src "*.cpp") + +file(GLOB_RECURSE test_src_files "${PROJECT_SOURCE_DIR}/src/*.h" "${PROJECT_SOURCE_DIR}/src/*.hpp" "${PROJECT_SOURCE_DIR}/src/*.cpp") + +set (${PROJECT_NAME}_INCLUDE_DIRS "") +foreach (_srcFile ${test_src_files}) + get_filename_component(_dir ${_srcFile} PATH) + list (APPEND ${PROJECT_NAME}_INCLUDE_DIRS ${_dir}) +endforeach() +list (REMOVE_DUPLICATES ${PROJECT_NAME}_INCLUDE_DIRS) + + +add_executable(thermalexpansion ${example_src}) +add_compile_options(thermalexpansion ${BUILD_TYPE_COMPILER_FLAGS}) +target_include_directories(thermalexpansion PUBLIC ${MFEM_COMMON_INCLUDES} ${MFEM_INCLUDE_DIRS}) +target_include_directories(thermalexpansion PUBLIC ${${PROJECT_NAME}_INCLUDE_DIRS}) +target_include_directories(thermalexpansion PUBLIC ${PROJECT_SOURCE_DIR}/data/) + +set_property(TARGET thermalexpansion PROPERTY CXX_STANDARD 17) + +target_link_libraries(thermalexpansion ${GTEST_LIBRARY} ${GTEST_MAIN_LIBRARY} pthread) +target_link_libraries(thermalexpansion ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${PROJECT_NAME}.so) +target_link_libraries(thermalexpansion ${MFEM_LIBRARIES} ${MFEM_COMMON_LIBRARY} -lrt) diff --git a/examples/ThermalExpansion/ThermalExpansionExample.cpp b/examples/ThermalExpansion/ThermalExpansionExample.cpp index e69de29bb..da3b6def7 100644 --- a/examples/ThermalExpansion/ThermalExpansionExample.cpp +++ b/examples/ThermalExpansion/ThermalExpansionExample.cpp @@ -0,0 +1,98 @@ +#include "hephaestus.hpp" + +const char *DATA_DIR = "../../data/"; + +hephaestus::BCMap defineBCs(){ + + hephaestus::BCMap boundaries; + + boundaries.Register("temperature", new hephaestus::EssentialBC("thermal_boundary_one", {1}, ), ); +} + + +hephaestus::Coefficients defineCoefficients(){ + + hephaestus::Coefficients coefficients; + + coefficients.scalars.Register("thermal_expansion_coef", + new mfem::ConstantCoefficient(0.02), + true); + + coefficients.scalars.Register("thermal_conductivity", + new mfem::ConstantCoefficient(300), + true); + + coefficients.scalars.Register("lame_param", + new mfem::ConstantCoefficient(0.02), + true); + + coefficients.scalars.Register("shear_modulus", + new mfem::ConstantCoefficient(0.02), + true); + + coefficients.scalars.Register("stress_free_temp", + new mfem::ConstantCoefficient(0.02), + true); + + return coefficients; +} + +hephaestus::Outputs defineOutputs() { + std::map data_collections; + data_collections["ParaViewDataCollection"] = + new mfem::ParaViewDataCollection("ThermalExpansionExample"); + hephaestus::Outputs outputs(data_collections); + return outputs; +} + +int main(int argc, char *argv[]) { + mfem::OptionsParser args(argc, argv); + args.AddOption(&DATA_DIR, "-dataDir", "--data_directory", + "Directory storing input data for tests."); + args.Parse(); + MPI_Init(&argc, &argv); + + // Create Formulation + hephaestus::SteadyStateProblemBuilder *problem_builder = new hephaestus::ThermalExpansionFormulation(); + // Set Mesh + mfem::Mesh mesh((std::string(DATA_DIR) + std::string("./simple_cube.g")).c_str(), 1, + 1); + std::shared_ptr pmesh = + std::make_shared(mfem::ParMesh(MPI_COMM_WORLD, mesh)); + problem_builder->SetMesh(pmesh); + problem_builder->AddFESpace(std::string("H1"), std::string("H1_3D_P1")); + problem_builder->AddFESpace(std::string("H1_3"), std::string("H1_3D_P1"), 3, mfem::Ordering::byVDIM); + + problem_builder->AddGridFunction(std::string("temperature"), + std::string("H1")); + problem_builder->AddGridFunction(std::string("displacement"), + std::string("H1_3")); + + hephaestus::Coefficients coefficients = defineCoefficients(); + problem_builder->SetCoefficients(coefficients); + + hephaestus::Outputs outputs = defineOutputs(); + problem_builder->SetOutputs(outputs); + + + hephaestus::InputParameters solver_options; + solver_options.SetParam("Tolerance", float(1.0e-5)); + solver_options.SetParam("MaxIter", (unsigned int)1000); + solver_options.SetParam("PrintLevel", 0); + problem_builder->SetSolverOptions(solver_options); + + hephaestus::ProblemBuildSequencer sequencer(problem_builder); + sequencer.ConstructOperatorProblem(); + std::unique_ptr problem = + problem_builder->ReturnProblem(); + hephaestus::InputParameters exec_params; + exec_params.SetParam("Problem", problem.get()); + hephaestus::SteadyStateExecutioner *executioner = + new hephaestus::SteadyStateExecutioner(exec_params); + + mfem::out << "Created executioner"; + executioner->Init(); + executioner->Execute(); + + MPI_Finalize(); +} From d232e991e377cb05c37e193884d65c8ad575a2bd Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 30 Oct 2023 15:09:45 +0000 Subject: [PATCH 08/41] Added thermalExpansion example to examples CMakeLists --- examples/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 1f8dda0c6..8750063c5 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -3,4 +3,4 @@ add_subdirectory(team7) add_subdirectory(complex_team7) add_subdirectory(closed_coil) add_subdirectory(open_coil) -add_subdirectory(magnetostatic) \ No newline at end of file +add_subdirectory(magnetostatic) From ec3e1ff32284a03978b1986a20728f749cd098a0 Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 30 Oct 2023 15:12:55 +0000 Subject: [PATCH 09/41] Updated thermalExpansion formulation --- .../thermal_expansion_formulation.cpp | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp index a6a1adedd..9ef0f37da 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp @@ -4,13 +4,13 @@ namespace hephaestus { ThermalExpansionFormulation::ThermalExpansionFormulation() : SteadyStateFormulation() { - temp_var_name = std::string("temp_var"); - displacement_var_name = std::string("displacement_var"); - stress_free_temp_coef_name = std::string("stress_free_temp"); + temp_var_name = std::string("temperature"); + displacement_var_name = std::string("displacement"); lame_param_coef_name = std::string("lame_param"); shear_modulus_coef_name = std::string("shear_modulus"); - thermal_expansion_coef_name = std::string("thermal_expansion"); - thermal_expansion_coef_name = std::string("thermal_conductivity"); + thermal_expansion_coef_name = std::string("thermal_expansion_coef"); + thermal_conductivity_coef_name = std::string("thermal_conductivity"); + stress_free_temp_coef_name = std::string("stress_free_temp"); } void ThermalExpansionFormulation::RegisterCoefficients() { @@ -50,7 +50,19 @@ void ThermalExpansionFormulation::RegisterCoefficients() { // std::make_unique(weak_form_params); // } + void ThermalExpansionFormulation::ConstructOperator() { + hephaestus::InputParameters &solver_options = + + this->GetProblem()->solver_options; + solver_options.SetParam("TempVarName", temp_var_name); + solver_options.SetParam("DisplacementVarName", displacement_var_name); + solver_options.SetParam("LameCoefName", lame_param_coef_name); + solver_options.SetParam("ShearModulusCoefName", shear_modulus_coef_name); + solver_options.SetParam("ThermalExpansionCoefName", thermal_expansion_coef_name); + solver_options.SetParam("ThermalConductivityCoefName", thermal_conductivity_coef_name); + solver_options.SetParam("StressFreeTempCoefName", stress_free_temp_coef_name); + this->problem->ss_operator = std::make_unique( *(this->problem->pmesh), this->problem->fespaces, this->problem->gridfunctions, this->problem->bc_map, @@ -103,7 +115,8 @@ ThermalExpansionOperator::ThermalExpansionOperator( lame_coef_name(solver_options.GetParam("LameCoefName")), shear_modulus_coef_name(solver_options.GetParam("ShearModulusCoefName")), thermal_expansion_coef_name(solver_options.GetParam("ThermalExpansionCoefName")), - stress_free_temp_coef_name(solver_options.GetParam("StressFreeTemp")) {} + thermal_conductivity_coef_name(solver_options.GetParam("ThermalConductivityCoefName")), + stress_free_temp_coef_name(solver_options.GetParam("StressFreeTempCoefName")) {} void ThermalExpansionOperator::SetGridFunctions() { From 59004e29c0c641f558fccf93bafd3139e7e656ad Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 30 Oct 2023 23:11:19 +0000 Subject: [PATCH 10/41] Added in constant value dirichlet bc's --- .../Essential/dirichlet_bc.cpp | 22 ++++++++ .../Essential/dirichlet_bc.hpp | 22 ++++++++ .../steady_state_equation_system_operator.cpp | 50 ----------------- .../steady_state_equation_system_operator.hpp | 55 ------------------- 4 files changed, 44 insertions(+), 105 deletions(-) create mode 100644 src/boundary_conditions/Essential/dirichlet_bc.cpp create mode 100644 src/boundary_conditions/Essential/dirichlet_bc.hpp delete mode 100644 src/formulations/steady_state_equation_system_operator.cpp delete mode 100644 src/formulations/steady_state_equation_system_operator.hpp diff --git a/src/boundary_conditions/Essential/dirichlet_bc.cpp b/src/boundary_conditions/Essential/dirichlet_bc.cpp new file mode 100644 index 000000000..03263e5fd --- /dev/null +++ b/src/boundary_conditions/Essential/dirichlet_bc.cpp @@ -0,0 +1,22 @@ +#include "dirichlet_bc.hpp" + +namespace hephaestus { + +DirichletBC::DirichletBC(const std::string &name_, + mfem::Array bdr_attributes_) + : EssentialBC(name_, bdr_attributes_) {} + +DirichletBC::DirichletBC(const std::string &name_, + mfem::Array bdr_attributes_, + mfem::FunctionCoefficient *coeff_, + mfem::FunctionCoefficient *coeff_im_) + : EssentialBC(name_, bdr_attributes_), coeff(coeff_), coeff_im(coeff_im_) {} + +void DirichletBC::applyBC(mfem::GridFunction &gridfunc, + mfem::Mesh *mesh_) { + mfem::Array ess_bdrs(mesh_->bdr_attributes.Max()); + ess_bdrs = this->getMarkers(*mesh_); + gridfunc.ProjectBdrCoefficient(*(this->coeff), ess_bdrs); +} + +} // namespace hephaestus diff --git a/src/boundary_conditions/Essential/dirichlet_bc.hpp b/src/boundary_conditions/Essential/dirichlet_bc.hpp new file mode 100644 index 000000000..0f5a88795 --- /dev/null +++ b/src/boundary_conditions/Essential/dirichlet_bc.hpp @@ -0,0 +1,22 @@ +#pragma once +#include "essential_bc_base.hpp" + +namespace hephaestus{ + +class DirichletBC : public EssentialBC{ + + DirichletBC(const std::string &name_, + mfem::Array bdr_attributes_); + + DirichletBC(const std::string &name_, + mfem::Array bdr_attributes_, + mfem::ConstantCoefficient *coeff_, + mfem::ConstantCoefficient *coeff_im_ = nullptr); + + virtual void applyBC(mfem::GridFunction &gridfunc, + mfem::Mesh *mesh_) override; + + mfem::ConstantCoefficient *coeff; + mfem::ConstantCoefficient *coeff_im; +}; +} // namespace hephaestus \ No newline at end of file diff --git a/src/formulations/steady_state_equation_system_operator.cpp b/src/formulations/steady_state_equation_system_operator.cpp deleted file mode 100644 index 702b630e1..000000000 --- a/src/formulations/steady_state_equation_system_operator.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "steady_state_equation_system_operator.hpp" - -namespace hephaestus { - -void SteadyStateEquationSystemOperator::SetGridFunctions() { - local_test_vars = populateVectorFromNamedFieldsMap( - _gridfunctions, state_var_names); - - // Set operator size and block structure - block_trueOffsets.SetSize(local_test_vars.size() + 1); - block_trueOffsets[0] = 0; - for (unsigned int ind = 0; ind < local_test_vars.size(); ++ind) { - block_trueOffsets[ind + 1] = - local_test_vars.at(ind)->ParFESpace()->TrueVSize(); - } - block_trueOffsets.PartialSum(); - - true_offsets.SetSize(local_test_vars.size() + 1); - true_offsets[0] = 0; - for (unsigned int ind = 0; ind < local_test_vars.size(); ++ind) { - true_offsets[ind + 1] = local_test_vars.at(ind)->ParFESpace()->GetVSize(); - } - true_offsets.PartialSum(); - - this->height = true_offsets[local_test_vars.size()]; - this->width = true_offsets[local_test_vars.size()]; - trueX.Update(block_trueOffsets); - trueRhs.Update(block_trueOffsets); - - // Populate vector of active auxiliary gridfunctions - active_aux_var_names.resize(0); - for (auto &aux_var_name : aux_var_names) { - if (_gridfunctions.Has(aux_var_name)) { - active_aux_var_names.push_back(aux_var_name); - } - } -} - -void SteadyStateEquationSystemOperator::Init(mfem::Vector &X) { - // Define material property coefficients - for (unsigned int ind = 0; ind < local_test_vars.size(); ++ind) { - local_test_vars.at(ind)->MakeRef(local_test_vars.at(ind)->ParFESpace(), - const_cast(X), - true_offsets[ind]); - } -} - -void SteadyStateEquationSystemOperator::Solve(mfem::Vector &X) {} - -} \ No newline at end of file diff --git a/src/formulations/steady_state_equation_system_operator.hpp b/src/formulations/steady_state_equation_system_operator.hpp deleted file mode 100644 index 70735530e..000000000 --- a/src/formulations/steady_state_equation_system_operator.hpp +++ /dev/null @@ -1,55 +0,0 @@ -#pragma once -#include "../common/pfem_extras.hpp" -#include "auxsolvers.hpp" -#include "equation_system.hpp" -#include "hephaestus_solvers.hpp" -#include "inputs.hpp" -#include "sources.hpp" - -namespace hephaestus { -class SteadyStateEquationSystemOperator : public mfem::Operator { -public: - SteadyStateEquationSystemOperator( - mfem::ParMesh &pmesh, hephaestus::FESpaces &fespaces, - hephaestus::GridFunctions &gridfunctions, hephaestus::BCMap &bc_map, - hephaestus::Coefficients &coefficients, hephaestus::Sources &sources, - hephaestus::InputParameters &solver_options) - : myid_(0), num_procs_(1), pmesh_(&pmesh), _fespaces(fespaces), - _gridfunctions(gridfunctions), _bc_map(bc_map), _sources(sources), - _coefficients(coefficients), _solver_options(solver_options){}; - - ~SteadyStateEquationSystemOperator(){}; - - virtual void SetGridFunctions(); - virtual void Init(mfem::Vector &X); - virtual void Solve(mfem::Vector &X); - void Mult(const mfem::Vector &x, mfem::Vector &y) const override{}; - - mfem::Array true_offsets, block_trueOffsets; - // Vector of names of state gridfunctions used in formulation, ordered by - // appearance in block vector during solve. - std::vector state_var_names; - // Vector of names of recognised auxiliary gridfunctions that can be - // calculated from formulation, - std::vector aux_var_names; - // Vector of names of active auxiliary gridfunctions that are being calculated - // in formulation, - std::vector active_aux_var_names; - - std::vector local_trial_vars, local_test_vars; - - int myid_; - int num_procs_; - mfem::ParMesh *pmesh_; - hephaestus::FESpaces &_fespaces; - hephaestus::GridFunctions &_gridfunctions; - hephaestus::BCMap &_bc_map; - hephaestus::Sources &_sources; - hephaestus::Coefficients &_coefficients; - hephaestus::InputParameters &_solver_options; - - mfem::OperatorHandle blockA; - mfem::BlockVector trueX, trueRhs; -}; - -} // namespace hephaestus \ No newline at end of file From de31e4d97ebf451a71ebee8f977cee16c5911ada Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 30 Oct 2023 23:12:29 +0000 Subject: [PATCH 11/41] Changed thermal expansion formulations to match new syntax after rebase --- .../thermal_expansion_formulation.cpp | 14 +++++++------- .../thermal_expansion_formulation.hpp | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp index 9ef0f37da..a8043cc20 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp @@ -63,14 +63,14 @@ void ThermalExpansionFormulation::ConstructOperator() { solver_options.SetParam("ThermalConductivityCoefName", thermal_conductivity_coef_name); solver_options.SetParam("StressFreeTempCoefName", stress_free_temp_coef_name); - this->problem->ss_operator = std::make_unique( + this->problem->eq_sys_operator = std::make_unique( *(this->problem->pmesh), this->problem->fespaces, this->problem->gridfunctions, this->problem->bc_map, this->problem->coefficients, this->problem->sources, this->problem->solver_options); - // this->problem->ss_operator->SetEquationSystem( - // this->problem->ss_equation_system.get()); - this->problem->ss_operator->SetGridFunctions(); + // this->problem->eq_sys_operator->SetEquationSystem( + // this->problem->eq_sys.get()); + this->problem->eq_sys_operator->SetGridFunctions(); }; void ThermalExpansionFormulation::RegisterGridFunctions() { @@ -107,7 +107,7 @@ ThermalExpansionOperator::ThermalExpansionOperator( hephaestus::GridFunctions &gridfunctions, hephaestus::BCMap &bc_map, hephaestus::Coefficients &coefficients, hephaestus::Sources &sources, hephaestus::InputParameters &solver_options) - : SteadyStateEquationSystemOperator(pmesh, fespaces, gridfunctions, + : EquationSystemOperator(pmesh, fespaces, gridfunctions, bc_map, coefficients, sources, solver_options), temp_var_name(solver_options.GetParam("TempVarName")), @@ -123,14 +123,14 @@ void ThermalExpansionOperator::SetGridFunctions() { state_var_names.push_back(temp_var_name); state_var_names.push_back(displacement_var_name); - SteadyStateEquationSystemOperator::SetGridFunctions(); + EquationSystemOperator::SetGridFunctions(); t_ = new mfem::ParGridFunction(local_test_vars.at(0)->ParFESpace()); u_ = new mfem::ParGridFunction(local_test_vars.at(1)->ParFESpace()); }; void ThermalExpansionOperator::Init(mfem::Vector &X) { - SteadyStateEquationSystemOperator::Init(X); + EquationSystemOperator::Init(X); lameCoef_ = _coefficients.scalars.Get(lame_coef_name); shearModulusCoef_ = _coefficients.scalars.Get(shear_modulus_coef_name); diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp index 61a6d9013..f5fc45713 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp @@ -11,7 +11,7 @@ class ThermalExpansionFormulation : public SteadyStateFormulation { public: ThermalExpansionFormulation(); - virtual void ConstructEquationSystem() override {}; + // virtual void ConstructEquationSystem() override {}; virtual void ConstructOperator() override; @@ -40,7 +40,7 @@ class ThermalExpansionFormulation : public SteadyStateFormulation { // stress_free_temp_coef_name, lame_param_coef_name, shear_modulus_coef_name; // }; -class ThermalExpansionOperator : public SteadyStateEquationSystemOperator { +class ThermalExpansionOperator : public EquationSystemOperator { public: ThermalExpansionOperator(mfem::ParMesh &pmesh, hephaestus::FESpaces &fespaces, hephaestus::GridFunctions &gridfunctions, From 8d20dc3cb035da1b3eba3f5bc4579a39eb4d1a15 Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 30 Oct 2023 23:13:12 +0000 Subject: [PATCH 12/41] Added steady_state_formulation include to formulation.hpp --- src/formulations/formulation.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/formulations/formulation.hpp b/src/formulations/formulation.hpp index 04eed44ed..4f667d10b 100644 --- a/src/formulations/formulation.hpp +++ b/src/formulations/formulation.hpp @@ -2,3 +2,4 @@ #include "frequency_domain_em_formulation.hpp" #include "steady_state_em_formulation.hpp" #include "time_domain_em_formulation.hpp" +#include "steady_state_formulation.hpp" From 448d913e1b69ce43cd75be8f8fb746bf9bec2a90 Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 30 Oct 2023 23:13:51 +0000 Subject: [PATCH 13/41] thermal_expansion_formulation include to factory.hpp --- src/factory/factory.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/factory/factory.hpp b/src/factory/factory.hpp index 153f0ba26..ad83e532f 100644 --- a/src/factory/factory.hpp +++ b/src/factory/factory.hpp @@ -7,7 +7,6 @@ #include "e_formulation.hpp" #include "eb_dual_formulation.hpp" #include "h_formulation.hpp" -#include "hj_dual_formulation.hpp" #include "thermal_expansion_formulation.hpp" #include "inputs.hpp" #include "magnetostatic_formulation.hpp" From 8a708e55d4822bee361048e44f32a24fd79f2d94 Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 30 Oct 2023 23:14:12 +0000 Subject: [PATCH 14/41] Started added hephaestus boundary conditions to ThermalExpansionExample --- .../ThermalExpansionExample.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/examples/ThermalExpansion/ThermalExpansionExample.cpp b/examples/ThermalExpansion/ThermalExpansionExample.cpp index da3b6def7..181df12e6 100644 --- a/examples/ThermalExpansion/ThermalExpansionExample.cpp +++ b/examples/ThermalExpansion/ThermalExpansionExample.cpp @@ -4,9 +4,7 @@ const char *DATA_DIR = "../../data/"; hephaestus::BCMap defineBCs(){ - hephaestus::BCMap boundaries; - - boundaries.Register("temperature", new hephaestus::EssentialBC("thermal_boundary_one", {1}, ), ); + } @@ -74,6 +72,15 @@ int main(int argc, char *argv[]) { hephaestus::Outputs outputs = defineOutputs(); problem_builder->SetOutputs(outputs); + hephaestus::BCMap boundaries; + boundaries.Register("temperature", new hephaestus::DirichletBC("thermal_boundary_one", {1}, ), ); + boundaries.Register("temperature", new hephaestus::DirichletBC("thermal_boundary_two", {2}, ), ); + + boundaries.Register("temperature", new hephaestus::DirichletBC("thermal_boundary_one", {1}, ), ); + + problem_builder->SetBoundaryConditions(boundaries); + + hephaestus::InputParameters solver_options; solver_options.SetParam("Tolerance", float(1.0e-5)); @@ -87,8 +94,8 @@ int main(int argc, char *argv[]) { problem_builder->ReturnProblem(); hephaestus::InputParameters exec_params; exec_params.SetParam("Problem", problem.get()); - hephaestus::SteadyStateExecutioner *executioner = - new hephaestus::SteadyStateExecutioner(exec_params); + hephaestus::SteadyExecutioner *executioner = + new hephaestus::SteadyExecutioner(exec_params); mfem::out << "Created executioner"; executioner->Init(); From 04735b78808ed29bfcf7ae6193d80feec1deaba6 Mon Sep 17 00:00:00 2001 From: Bill Ellis Date: Tue, 31 Oct 2023 13:06:43 +0000 Subject: [PATCH 15/41] Updated boundary conditions in ThermalExpansionExample --- .../ThermalExpansionExample.cpp | 43 +++++++++++++------ 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/examples/ThermalExpansion/ThermalExpansionExample.cpp b/examples/ThermalExpansion/ThermalExpansionExample.cpp index 181df12e6..b92a7813e 100644 --- a/examples/ThermalExpansion/ThermalExpansionExample.cpp +++ b/examples/ThermalExpansion/ThermalExpansionExample.cpp @@ -2,12 +2,6 @@ const char *DATA_DIR = "../../data/"; -hephaestus::BCMap defineBCs(){ - - -} - - hephaestus::Coefficients defineCoefficients(){ hephaestus::Coefficients coefficients; @@ -30,7 +24,8 @@ hephaestus::Coefficients defineCoefficients(){ coefficients.scalars.Register("stress_free_temp", new mfem::ConstantCoefficient(0.02), - true); + true); + return coefficients; } @@ -43,6 +38,32 @@ hephaestus::Outputs defineOutputs() { return outputs; } + +hephaestus::BCMap defineBoundaries(mfem::ParMesh *pmesh) { + + hephaestus::BCMap boundaries; + + mfem::ConstantCoefficient *cold = new mfem::ConstantCoefficient(300.00); + mfem::ConstantCoefficient *hot = new mfem::ConstantCoefficient(500.00); + mfem::ConstantCoefficient *zero = new mfem::ConstantCoefficient(0.000); + mfem::Array therm_bound_one_arr(pmesh->bdr_attributes.Max()); + mfem::Array therm_bound_two_arr(pmesh->bdr_attributes.Max()); + mfem::Array fixed_disp_arr(pmesh->bdr_attributes.Max()); + + therm_bound_one_arr = 0; + therm_bound_two_arr = 0; + fixed_disp_arr = 0; + + therm_bound_one_arr[0] = 1; + therm_bound_two_arr[1] = 1; + fixed_disp_arr[0] = 1; + + boundaries.Register("thermal_boundary_one", new hephaestus::DirichletBC("thermal_boundary_one", therm_bound_one_arr, cold), true); + boundaries.Register("thermal_boundary_two", new hephaestus::DirichletBC("thermal_boundary_two", therm_bound_two_arr, hot), true); + boundaries.Register("fixed_displacement", new hephaestus::DirichletBC("fixed_displacement", fixed_disp_arr, zero), true); +} + + int main(int argc, char *argv[]) { mfem::OptionsParser args(argc, argv); args.AddOption(&DATA_DIR, "-dataDir", "--data_directory", @@ -72,16 +93,10 @@ int main(int argc, char *argv[]) { hephaestus::Outputs outputs = defineOutputs(); problem_builder->SetOutputs(outputs); - hephaestus::BCMap boundaries; - boundaries.Register("temperature", new hephaestus::DirichletBC("thermal_boundary_one", {1}, ), ); - boundaries.Register("temperature", new hephaestus::DirichletBC("thermal_boundary_two", {2}, ), ); - - boundaries.Register("temperature", new hephaestus::DirichletBC("thermal_boundary_one", {1}, ), ); + hephaestus::BCMap boundaries = defineBoundaries(pmesh.get()); problem_builder->SetBoundaryConditions(boundaries); - - hephaestus::InputParameters solver_options; solver_options.SetParam("Tolerance", float(1.0e-5)); solver_options.SetParam("MaxIter", (unsigned int)1000); From cd29d620478e424f74385f0e5f4889a5042e3ce6 Mon Sep 17 00:00:00 2001 From: Bill Ellis Date: Tue, 31 Oct 2023 13:07:36 +0000 Subject: [PATCH 16/41] Updated essential_bcs hpp to include dirichlet conditions --- src/boundary_conditions/Essential/dirichlet_bc.cpp | 4 ++-- src/boundary_conditions/Essential/dirichlet_bc.hpp | 2 +- src/boundary_conditions/Essential/essential_bcs.hpp | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/boundary_conditions/Essential/dirichlet_bc.cpp b/src/boundary_conditions/Essential/dirichlet_bc.cpp index 03263e5fd..207b971e1 100644 --- a/src/boundary_conditions/Essential/dirichlet_bc.cpp +++ b/src/boundary_conditions/Essential/dirichlet_bc.cpp @@ -8,8 +8,8 @@ DirichletBC::DirichletBC(const std::string &name_, DirichletBC::DirichletBC(const std::string &name_, mfem::Array bdr_attributes_, - mfem::FunctionCoefficient *coeff_, - mfem::FunctionCoefficient *coeff_im_) + mfem::ConstantCoefficient *coeff_, + mfem::ConstantCoefficient *coeff_im_) : EssentialBC(name_, bdr_attributes_), coeff(coeff_), coeff_im(coeff_im_) {} void DirichletBC::applyBC(mfem::GridFunction &gridfunc, diff --git a/src/boundary_conditions/Essential/dirichlet_bc.hpp b/src/boundary_conditions/Essential/dirichlet_bc.hpp index 0f5a88795..dc48f77fa 100644 --- a/src/boundary_conditions/Essential/dirichlet_bc.hpp +++ b/src/boundary_conditions/Essential/dirichlet_bc.hpp @@ -4,7 +4,7 @@ namespace hephaestus{ class DirichletBC : public EssentialBC{ - +public: DirichletBC(const std::string &name_, mfem::Array bdr_attributes_); diff --git a/src/boundary_conditions/Essential/essential_bcs.hpp b/src/boundary_conditions/Essential/essential_bcs.hpp index 7b2f406d0..245899c32 100644 --- a/src/boundary_conditions/Essential/essential_bcs.hpp +++ b/src/boundary_conditions/Essential/essential_bcs.hpp @@ -1,3 +1,4 @@ #pragma once #include "function_dirichlet_bc.hpp" #include "vector_dirichlet_bc.hpp" +#include "dirichlet_bc.hpp" From 7ccf5cbacb0a14da6eb6d4ae6c1d71a9d962b6c1 Mon Sep 17 00:00:00 2001 From: billellis Date: Wed, 1 Nov 2023 11:36:28 +0000 Subject: [PATCH 17/41] Added comments to describe inner product of MixedWeakDivergenceIntegrator --- src/integrators/MixedWeakDivergenceIntegrator.cpp | 3 ++- src/integrators/MixedWeakDivergenceIntegrator.hpp | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/integrators/MixedWeakDivergenceIntegrator.cpp b/src/integrators/MixedWeakDivergenceIntegrator.cpp index e7980f7ba..64d370e79 100644 --- a/src/integrators/MixedWeakDivergenceIntegrator.cpp +++ b/src/integrators/MixedWeakDivergenceIntegrator.cpp @@ -1,7 +1,8 @@ #include "MixedWeakDivergenceIntegrator.hpp" -namespace mfem{ +namespace mfem { + void MixedWeakDivergenceIntegrator::AssembleElementMatrix2(const mfem::FiniteElement &trial_fe, const mfem::FiniteElement &test_fe, mfem::ElementTransformation &Trans, diff --git a/src/integrators/MixedWeakDivergenceIntegrator.hpp b/src/integrators/MixedWeakDivergenceIntegrator.hpp index 9ba27ab89..65b20da04 100644 --- a/src/integrators/MixedWeakDivergenceIntegrator.hpp +++ b/src/integrators/MixedWeakDivergenceIntegrator.hpp @@ -1,6 +1,13 @@ #pragma once #include "mfem.hpp" +// MFEM mixed integrator to calculate the bilinear form, +// (u, (∇ . v)) + +// For when your test function is a vector value represented by multiple copies of a scalar field i.e. H1^3, +// and your trial function is a scalar in H1 + + namespace mfem { class MixedWeakDivergenceIntegrator : public mfem::BilinearFormIntegrator From f283f810c29a35d057313da3cbf0e6b7e3d85df9 Mon Sep 17 00:00:00 2001 From: billellis Date: Wed, 1 Nov 2023 11:37:23 +0000 Subject: [PATCH 18/41] Added integrators.hpp to get all integrator includes in one place, and added DomainH1Div linear form integrator to integrators --- src/integrators/DomainLFH1DivIntegrator.cpp | 55 +++++++++++++++++++++ src/integrators/DomainLFH1DivIntegrator.hpp | 43 ++++++++++++++++ src/integrators/integrators.hpp | 3 ++ 3 files changed, 101 insertions(+) create mode 100644 src/integrators/DomainLFH1DivIntegrator.cpp create mode 100644 src/integrators/DomainLFH1DivIntegrator.hpp create mode 100644 src/integrators/integrators.hpp diff --git a/src/integrators/DomainLFH1DivIntegrator.cpp b/src/integrators/DomainLFH1DivIntegrator.cpp new file mode 100644 index 000000000..aedcab492 --- /dev/null +++ b/src/integrators/DomainLFH1DivIntegrator.cpp @@ -0,0 +1,55 @@ +#include "DomainLFH1DivIntegrator.hpp" + + +namespace mfem { +void DomainLFH1DivIntegrator ::AssembleRHSElementVect( + const mfem::FiniteElement &el, mfem::ElementTransformation &Tr, mfem::Vector &elvect) +{ + const int dim = el.GetDim(); + const int dof = el.GetDof(); + double w, coeff; + const int sdim = Tr.GetSpaceDim(); + + dshape.SetSize(dof, dim); + gshape.SetSize(dof, dim); + divShape.SetSize(dof * dim); + + dshape = 0.0; + gshape = 0.0; + divShape = 0.0; + + elvect.SetSize(dof * dim); + elvect = 0.0; + + const mfem::IntegrationRule *ir = IntRule; + if (ir == NULL) + { + int intorder = 2 * el.GetOrder(); + ir = &mfem::IntRules.Get(el.GetGeomType(), intorder); + } + + for (int q = 0; q < ir->GetNPoints(); q++) + { + const mfem::IntegrationPoint &ip = ir->IntPoint(q); + + Tr.SetIntPoint(&ip); + el.CalcDShape(ip, dshape); + + w = ip.weight; + + coeff = Q->Eval(Tr, ip); + + Mult(dshape, Tr.AdjugateJacobian(), gshape); + + gshape.GradToDiv(divShape); + add(elvect, w * coeff, divShape, elvect); + } +} +} //namespace mfem + +// void DomainLFH1DivIntegrator ::AssembleDeltaElementVect(const mfem::FiniteElement &fe, +// mfem::ElementTransformation &Trans, +// mfem::Vector &elvect) +// { +// MFEM_ABORT("Not implemented!"); +// } \ No newline at end of file diff --git a/src/integrators/DomainLFH1DivIntegrator.hpp b/src/integrators/DomainLFH1DivIntegrator.hpp new file mode 100644 index 000000000..5933456d5 --- /dev/null +++ b/src/integrators/DomainLFH1DivIntegrator.hpp @@ -0,0 +1,43 @@ +#pragma once +#include "mfem.hpp" + +// MFEM integrator to calculate the Rhs term, when your test function is a vector value +// represented by multiple copies of a scalar field i.e. H1^3 +// (f, (∇ . v)) + + + +namespace mfem{ +class DomainLFH1DivIntegrator : public mfem::LinearFormIntegrator +{ +protected: + mfem::Coefficient *Q; + +private: + mfem::Vector shape, divShape; + mfem::DenseMatrix dshape, gshape; + +public: + /// Constructs the domain integrator (Q, grad v) + DomainLFH1DivIntegrator (mfem::Coefficient &q) + : Q(&q) + {} + + ~DomainLFH1DivIntegrator () {}; + + // virtual bool SupportsDevice() override { return true; } + + /** Given a particular Finite Element and a transformation (Tr) + computes the element right hand side element vector, elvect. */ + virtual void AssembleRHSElementVect(const mfem::FiniteElement &el, + mfem::ElementTransformation &Tr, + mfem::Vector &elvect) override; + + // virtual void AssembleDeltaElementVect(const mfem::FiniteElement &fe, + // mfem::ElementTransformation &Trans, + // mfem::Vector &elvect) override; + + // using mfem::LinearFormIntegrator::AssembleRHSElementVect; + +}; +} //namespace mfem \ No newline at end of file diff --git a/src/integrators/integrators.hpp b/src/integrators/integrators.hpp new file mode 100644 index 000000000..704ab7e48 --- /dev/null +++ b/src/integrators/integrators.hpp @@ -0,0 +1,3 @@ +#pragma once +#include "MixedWeakDivergenceIntegrator.hpp" +#include "DomainLFH1DivIntegrator.hpp" \ No newline at end of file From 110d331b0a50a6d03596a85abcd98e8244542c58 Mon Sep 17 00:00:00 2001 From: billellis Date: Wed, 1 Nov 2023 12:14:39 +0000 Subject: [PATCH 19/41] Fixed coefficients in ThermalExpansionFormulation --- .../thermal_expansion_formulation.cpp | 63 ++++++++++--------- .../thermal_expansion_formulation.hpp | 13 ++-- 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp index a8043cc20..9b1f30f6c 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp @@ -137,11 +137,10 @@ void ThermalExpansionOperator::Init(mfem::Vector &X) { thermalExpansionCoef_ = _coefficients.scalars.Get(thermal_expansion_coef_name); stressFreeTempCoef_ = _coefficients.scalars.Get(stress_free_temp_coef_name); thermalConductivityCoef_ = _coefficients.scalars.Get(thermal_conductivity_coef_name); - } -void ThermalExpansionOperator::Solve(mfem::Vector &X) { - +void ThermalExpansionOperator::Solve(mfem::Vector &X) { + mfem::Array2D OpBlocks; OpBlocks.DeleteAll(); OpBlocks.SetSize(2,2); @@ -150,39 +149,40 @@ void ThermalExpansionOperator::Solve(mfem::Vector &X) { OpBlocks(1, 0) = new mfem::HypreParMatrix; OpBlocks(0, 1) = nullptr; + mfem::Array offsets({0, t_->ParFESpace()->TrueVSize(), t_->ParFESpace()->TrueVSize() + u_->ParFESpace()->TrueVSize()}); - mfem::BlockVector trueX(offsets); - mfem::BlockVector trueRHS(offsets); + // Apply dirichlet BC's to temperature and displacement grid functions + _bc_map.applyEssentialBCs(temp_var_name, ess_temp_tdofs_, *t_, + pmesh_); + + _bc_map.applyEssentialBCs(displacement_var_name, ess_disp_tdofs_, *u_, + pmesh_); // Set up bilinear forms aMixed_ = new mfem::ParMixedBilinearForm(t_->ParFESpace(), u_->ParFESpace()); a1_ = new mfem::ParBilinearForm(t_->ParFESpace()); a2_ = new mfem::ParBilinearForm(u_->ParFESpace()); - // Set up linear forms + // Set up linear forms b1_ = new mfem::ParLinearForm(t_->ParFESpace()); b2_ = new mfem::ParLinearForm(u_->ParFESpace()); - if(thermalExpansionCoef_) { - aMixed_->AddDomainIntegrator(new mfem::MixedWeakDivergenceIntegrator(*lameCoef_)); - } - - // + // Manipulate existing coefficients to get terms needed for thermal expansion. + // Bilinear Form Coef: - α * (3λ + 2μ) + // Linear Form Coef: T_{stress free} * α * (3λ + 2μ) + mfem::SumCoefficient materialTerm(*lameCoef_, *shearModulusCoef_, 3, 2); + mfem::SumCoefficient thexpStressFreeTemp(*thermalExpansionCoef_, *stressFreeTempCoef_); + mfem::ProductCoefficient bilinearFormCoefPositive(*thermalExpansionCoef_, materialTerm); + bilinearFormCoef_ = new mfem::ProductCoefficient(-1, bilinearFormCoefPositive); + linearFormCoef_ = new mfem::ProductCoefficient(*stressFreeTempCoef_, materialTerm); + a1_->AddDomainIntegrator(new mfem::DiffusionIntegrator(*thermalConductivityCoef_)); a2_->AddDomainIntegrator(new mfem::ElasticityIntegrator(*lameCoef_, *shearModulusCoef_)); - - _bc_map.applyEssentialBCs(std::string(temp_var_name), ess_temp_bdr_tdofs_, *t_, - pmesh_); - - _bc_map.applyEssentialBCs(std::string(displacement_var_name), ess_disp_bdr_tdofs_, *u_, - pmesh_); - - - _bc_map.applyIntegratedBCs(std::string(temp_var_name), *b1_, pmesh_); - _bc_map.applyIntegratedBCs(std::string(displacement_var_name), *b2_, pmesh_); + aMixed_->AddDomainIntegrator(new mfem::MixedWeakDivergenceIntegrator(*bilinearFormCoef_)); + b2_->AddDomainIntegrator(new mfem::DomainLFH1DivIntegrator(*linearFormCoef_)); a1_->Assemble(); a1_->Finalize(); @@ -195,23 +195,28 @@ void ThermalExpansionOperator::Solve(mfem::Vector &X) { b1_->Assemble(); b2_->Assemble(); - - a1_->FormLinearSystem(ess_temp_bdr_tdofs_, *t_, *b1_, *OpBlocks(0, 0), trueX.GetBlock(0), trueRHS.GetBlock(0)); - a2_->FormLinearSystem(ess_disp_bdr_tdofs_, *u_, *b1_, *OpBlocks(1, 1), trueX.GetBlock(1), trueRHS.GetBlock(1)); - aMixed_->FormRectangularLinearSystem(ess_temp_bdr_tdofs_, ess_disp_bdr_tdofs_, *t_, *b2_, *OpBlocks(1, 0), trueX.GetBlock(0), trueRHS.GetBlock(1)); + + a1_->FormLinearSystem(ess_temp_tdofs_, *t_, *b1_, *OpBlocks(0, 0), trueX.GetBlock(0), trueRhs.GetBlock(0)); + a2_->FormLinearSystem(ess_disp_tdofs_, *u_, *b2_, *OpBlocks(1, 1), trueX.GetBlock(1), trueRhs.GetBlock(1)); + aMixed_->FormRectangularLinearSystem(ess_temp_tdofs_, ess_disp_tdofs_, *t_, *b2_, *OpBlocks(1, 0), trueX.GetBlock(0), trueRhs.GetBlock(1)); mfem::HypreParMatrix *A1 = mfem::HypreParMatrixFromBlocks(OpBlocks); mfem::HypreBoomerAMG *amg = new mfem::HypreBoomerAMG(*A1); mfem::HyprePCG solver(MPI_COMM_WORLD); solver.SetOperator(*A1); - solver.Mult(trueRHS, trueX); + solver.SetPreconditioner(*amg); + solver.SetPrintLevel(2); + solver.Mult(trueRhs, trueX); delete(amg); - delete(A1); + // delete(A1); OpBlocks.DeleteAll(); - a1_->RecoverFEMSolution(trueX.GetBlock(0), *b1_, *u_); - a2_->RecoverFEMSolution(trueX.GetBlock(1), *b2_, *t_); + a1_->RecoverFEMSolution(trueX.GetBlock(0), *b1_, *t_); + a2_->RecoverFEMSolution(trueX.GetBlock(1), *b2_, *u_); + + *_gridfunctions.Get(state_var_names.at(0)) = *t_; + *_gridfunctions.Get(state_var_names.at(1)) = *u_; } diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp index f5fc45713..eeb20b389 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp @@ -3,7 +3,7 @@ #include "formulation.hpp" #include "inputs.hpp" #include "sources.hpp" -#include "MixedWeakDivergenceIntegrator.hpp" +#include "integrators.hpp" namespace hephaestus { @@ -55,20 +55,25 @@ class ThermalExpansionOperator : public EquationSystemOperator { virtual void Init(mfem::Vector &X) override; virtual void Solve(mfem::Vector &X) override; + // Method for manipulating existing coefficients to get the terms needed for the thermal expansion solve + void MakeCoefficients(); + std::string temp_var_name, displacement_var_name, stress_free_temp_coef_name, lame_coef_name, shear_modulus_coef_name, thermal_expansion_coef_name, thermal_conductivity_coef_name; mfem::ParGridFunction *u_, *t_; mfem::ParLinearForm *b1_, *b2_; mfem::ParBilinearForm *a1_, *a2_; - mfem::ParMixedBilinearForm *aMixed_; + mfem::ParMixedBilinearForm *aMixed_; // mfem::Coefficient *thermalConductivityCoef_; mfem::Coefficient *lameCoef_; // Lame's first parameter mfem::Coefficient *shearModulusCoef_; // Shear modulus mfem::Coefficient *thermalExpansionCoef_; // Thermal expansion coefficient mfem::Coefficient *stressFreeTempCoef_; // Stress free temperature + mfem::Coefficient *bilinearFormCoef_; // + mfem::Coefficient *linearFormCoef_; // - mfem::Array ess_temp_bdr_tdofs_, ess_disp_bdr_tdofs_; -}; + mfem::Array ess_temp_tdofs_, ess_disp_tdofs_; +}; // } // namespace hephaestus From 66f0c362af09874887cb4cb0c344b7656bd146d2 Mon Sep 17 00:00:00 2001 From: billellis Date: Wed, 1 Nov 2023 12:15:52 +0000 Subject: [PATCH 20/41] Added simple_cube mesh to data to be used in ThermalExpansionExample --- data/simple_cube.g | Bin 0 -> 9004 bytes .../ThermalExpansionExample.cpp | 37 ++++++++---------- 2 files changed, 17 insertions(+), 20 deletions(-) create mode 100644 data/simple_cube.g diff --git a/data/simple_cube.g b/data/simple_cube.g new file mode 100644 index 0000000000000000000000000000000000000000..07ca3fec898eac795469b4f752bbec04be043539 GIT binary patch literal 9004 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 therm_bound_one_arr(pmesh->bdr_attributes.Max()); - mfem::Array therm_bound_two_arr(pmesh->bdr_attributes.Max()); - mfem::Array fixed_disp_arr(pmesh->bdr_attributes.Max()); - - therm_bound_one_arr = 0; - therm_bound_two_arr = 0; - fixed_disp_arr = 0; - - therm_bound_one_arr[0] = 1; - therm_bound_two_arr[1] = 1; - fixed_disp_arr[0] = 1; - - boundaries.Register("thermal_boundary_one", new hephaestus::DirichletBC("thermal_boundary_one", therm_bound_one_arr, cold), true); - boundaries.Register("thermal_boundary_two", new hephaestus::DirichletBC("thermal_boundary_two", therm_bound_two_arr, hot), true); - boundaries.Register("fixed_displacement", new hephaestus::DirichletBC("fixed_displacement", fixed_disp_arr, zero), true); + // mfem::VectorConstantCoefficient *zero = new mfem::VectorConstantCoefficient(mfem::Vector({0, 0, 0})); + mfem::Array therm_bound_one_arr(1); + mfem::Array therm_bound_two_arr(1); + mfem::Array fixed_disp_arr(1); + + therm_bound_one_arr = 1; + therm_bound_two_arr = 2; + fixed_disp_arr = 1; + + boundaries.Register("thermal_boundary_one", new hephaestus::DirichletBC("temperature", therm_bound_one_arr, cold), true); + boundaries.Register("thermal_boundary_two", new hephaestus::DirichletBC("temperature", therm_bound_two_arr, hot), true); + boundaries.Register("fixed_displacement", new hephaestus::VectorDirichletBC("displacement", fixed_disp_arr, new mfem::VectorConstantCoefficient(mfem::Vector({0, 0, 0}))), true); + + return boundaries; } @@ -93,8 +91,7 @@ int main(int argc, char *argv[]) { hephaestus::Outputs outputs = defineOutputs(); problem_builder->SetOutputs(outputs); - hephaestus::BCMap boundaries = defineBoundaries(pmesh.get()); - + hephaestus::BCMap boundaries = defineBoundaries(); problem_builder->SetBoundaryConditions(boundaries); hephaestus::InputParameters solver_options; From acef823b5962cc2c9b91ec438e001e942cdafeaf Mon Sep 17 00:00:00 2001 From: billellis Date: Wed, 1 Nov 2023 12:18:52 +0000 Subject: [PATCH 21/41] Renamed thermal expansion example folder and main file to fit with other examples --- examples/{ThermalExpansion => thermal_expansion}/CMakeLists.txt | 0 .../ThermalExpansionExample.cpp => thermal_expansion/Main.cpp} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename examples/{ThermalExpansion => thermal_expansion}/CMakeLists.txt (100%) rename examples/{ThermalExpansion/ThermalExpansionExample.cpp => thermal_expansion/Main.cpp} (100%) diff --git a/examples/ThermalExpansion/CMakeLists.txt b/examples/thermal_expansion/CMakeLists.txt similarity index 100% rename from examples/ThermalExpansion/CMakeLists.txt rename to examples/thermal_expansion/CMakeLists.txt diff --git a/examples/ThermalExpansion/ThermalExpansionExample.cpp b/examples/thermal_expansion/Main.cpp similarity index 100% rename from examples/ThermalExpansion/ThermalExpansionExample.cpp rename to examples/thermal_expansion/Main.cpp From f286eda6106eed60622ba6198f657a50faaad3ca Mon Sep 17 00:00:00 2001 From: billellis Date: Wed, 8 Nov 2023 15:49:16 +0000 Subject: [PATCH 22/41] Rebased on master --- .../Cycle000000/data.pvtu | 21 +++++++++++ .../Cycle000000/proc000000.vtu | 35 +++++++++++++++++++ .../Cycle000001/data.pvtu | 21 +++++++++++ .../Cycle000001/proc000000.vtu | 35 +++++++++++++++++++ .../ThermalExpansionExample.pvd | 7 ++++ 5 files changed, 119 insertions(+) create mode 100644 examples/ThermalExpansionExample/Cycle000000/data.pvtu create mode 100644 examples/ThermalExpansionExample/Cycle000000/proc000000.vtu create mode 100644 examples/ThermalExpansionExample/Cycle000001/data.pvtu create mode 100644 examples/ThermalExpansionExample/Cycle000001/proc000000.vtu create mode 100644 examples/ThermalExpansionExample/ThermalExpansionExample.pvd diff --git a/examples/ThermalExpansionExample/Cycle000000/data.pvtu b/examples/ThermalExpansionExample/Cycle000000/data.pvtu new file mode 100644 index 000000000..9fff32d89 --- /dev/null +++ b/examples/ThermalExpansionExample/Cycle000000/data.pvtu @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/ThermalExpansionExample/Cycle000000/proc000000.vtu b/examples/ThermalExpansionExample/Cycle000000/proc000000.vtu new file mode 100644 index 000000000..885eeb0a9 --- /dev/null +++ b/examples/ThermalExpansionExample/Cycle000000/proc000000.vtu @@ -0,0 +1,35 @@ + + + + + +4DEAAA==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 + + + + +UAgAAA==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 + + +FAIAAA==BAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAAAAAEAAAQBAAAIAQAADAEAABABAAAUAQAAGAEAABwBAAAgAQAAJAEAACgBAAAsAQAAMAEAADQBAAA4AQAAPAEAAEABAABEAQAASAEAAEwBAABQAQAAVAEAAFgBAABcAQAAYAEAAGQBAABoAQAAbAEAAHABAAB0AQAAeAEAAHwBAACAAQAAhAEAAIgBAACMAQAAkAEAAJQBAACYAQAAnAEAAKABAACkAQAAqAEAAKwBAACwAQAAtAEAALgBAAC8AQAAwAEAAMQBAADIAQAAzAEAANABAADUAQAA2AEAANwBAADgAQAA5AEAAOgBAADsAQAA8AEAAPQBAAD4AQAA/AEAAAACAAAEAgAACAIAAAwCAAAQAgAAFAIAAA== + + +hQAAAA==CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg== + + + + +FAIAAA==AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAA== + + + + +4DEAAA==AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + +oBAAAA==oHS/pZx/AABQnEPlBFYAAFCcQ+UEVgAAoHS/pZx/AAAAAAAAAAAAAAAAAAAAAAAAUJxD5QRWAACgdL+lnH8AAFCcQ+UEVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCcQ+UEVgAAAAAAAAAAAAAAAAAAAAAAAFCcQ+UEVgAAAAAAAAAAAABQnEPlBFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKB0v6WcfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUJxD5QRWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCcQ+UEVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoHS/pZx/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoHS/pZx/AAAAAAAAAAAAAFCcQ+UEVgAAUJxD5QRWAACgdL+lnH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoHS/pZx/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoHS/pZx/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgdL+lnH8AAFCcQ+UEVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCcQ+UEVgAAoHS/pZx/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQnEPlBFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgdL+lnH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKB0v6WcfwAAUJxD5QRWAACgdL+lnH8AAAAAAAAAAAAAAAAAAAAAAABQnEPlBFYAAAAAAAAAAAAAAAAAAAAAAACgdL+lnH8AAAAAAAAAAAAAAAAAAAAAAACgdL+lnH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUJxD5QRWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQnEPlBFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + + + diff --git a/examples/ThermalExpansionExample/Cycle000001/data.pvtu b/examples/ThermalExpansionExample/Cycle000001/data.pvtu new file mode 100644 index 000000000..9fff32d89 --- /dev/null +++ b/examples/ThermalExpansionExample/Cycle000001/data.pvtu @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/ThermalExpansionExample/Cycle000001/proc000000.vtu b/examples/ThermalExpansionExample/Cycle000001/proc000000.vtu new file mode 100644 index 000000000..60f96afbb --- /dev/null +++ b/examples/ThermalExpansionExample/Cycle000001/proc000000.vtu @@ -0,0 +1,35 @@ + + + + + +4DEAAA==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 + + + + +UAgAAA==AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAH8AAACAAAAAgQAAAIIAAACDAAAAhAAAAIUAAACGAAAAhwAAAIgAAACJAAAAigAAAIsAAACMAAAAjQAAAI4AAACPAAAAkAAAAJEAAACSAAAAkwAAAJQAAACVAAAAlgAAAJcAAACYAAAAmQAAAJoAAACbAAAAnAAAAJ0AAACeAAAAnwAAAKAAAAChAAAAogAAAKMAAACkAAAApQAAAKYAAACnAAAAqAAAAKkAAACqAAAAqwAAAKwAAACtAAAArgAAAK8AAACwAAAAsQAAALIAAACzAAAAtAAAALUAAAC2AAAAtwAAALgAAAC5AAAAugAAALsAAAC8AAAAvQAAAL4AAAC/AAAAwAAAAMEAAADCAAAAwwAAAMQAAADFAAAAxgAAAMcAAADIAAAAyQAAAMoAAADLAAAAzAAAAM0AAADOAAAAzwAAANAAAADRAAAA0gAAANMAAADUAAAA1QAAANYAAADXAAAA2AAAANkAAADaAAAA2wAAANwAAADdAAAA3gAAAN8AAADgAAAA4QAAAOIAAADjAAAA5AAAAOUAAADmAAAA5wAAAOgAAADpAAAA6gAAAOsAAADsAAAA7QAAAO4AAADvAAAA8AAAAPEAAADyAAAA8wAAAPQAAAD1AAAA9gAAAPcAAAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEAAAYBAAAHAQAACAEAAAkBAAAKAQAACwEAAAwBAAANAQAADgEAAA8BAAAQAQAAEQEAABIBAAATAQAAFAEAABUBAAAWAQAAFwEAABgBAAAZAQAAGgEAABsBAAAcAQAAHQEAAB4BAAAfAQAAIAEAACEBAAAiAQAAIwEAACQBAAAlAQAAJgEAACcBAAAoAQAAKQEAACoBAAArAQAALAEAAC0BAAAuAQAALwEAADABAAAxAQAAMgEAADMBAAA0AQAANQEAADYBAAA3AQAAOAEAADkBAAA6AQAAOwEAADwBAAA9AQAAPgEAAD8BAABAAQAAQQEAAEIBAABDAQAARAEAAEUBAABGAQAARwEAAEgBAABJAQAASgEAAEsBAABMAQAATQEAAE4BAABPAQAAUAEAAFEBAABSAQAAUwEAAFQBAABVAQAAVgEAAFcBAABYAQAAWQEAAFoBAABbAQAAXAEAAF0BAABeAQAAXwEAAGABAABhAQAAYgEAAGMBAABkAQAAZQEAAGYBAABnAQAAaAEAAGkBAABqAQAAawEAAGwBAABtAQAAbgEAAG8BAABwAQAAcQEAAHIBAABzAQAAdAEAAHUBAAB2AQAAdwEAAHgBAAB5AQAAegEAAHsBAAB8AQAAfQEAAH4BAAB/AQAAgAEAAIEBAACCAQAAgwEAAIQBAACFAQAAhgEAAIcBAACIAQAAiQEAAIoBAACLAQAAjAEAAI0BAACOAQAAjwEAAJABAACRAQAAkgEAAJMBAACUAQAAlQEAAJYBAACXAQAAmAEAAJkBAACaAQAAmwEAAJwBAACdAQAAngEAAJ8BAACgAQAAoQEAAKIBAACjAQAApAEAAKUBAACmAQAApwEAAKgBAACpAQAAqgEAAKsBAACsAQAArQEAAK4BAACvAQAAsAEAALEBAACyAQAAswEAALQBAAC1AQAAtgEAALcBAAC4AQAAuQEAALoBAAC7AQAAvAEAAL0BAAC+AQAAvwEAAMABAADBAQAAwgEAAMMBAADEAQAAxQEAAMYBAADHAQAAyAEAAMkBAADKAQAAywEAAMwBAADNAQAAzgEAAM8BAADQAQAA0QEAANIBAADTAQAA1AEAANUBAADWAQAA1wEAANgBAADZAQAA2gEAANsBAADcAQAA3QEAAN4BAADfAQAA4AEAAOEBAADiAQAA4wEAAOQBAADlAQAA5gEAAOcBAADoAQAA6QEAAOoBAADrAQAA7AEAAO0BAADuAQAA7wEAAPABAADxAQAA8gEAAPMBAAD0AQAA9QEAAPYBAAD3AQAA+AEAAPkBAAD6AQAA+wEAAPwBAAD9AQAA/gEAAP8BAAAAAgAAAQIAAAICAAADAgAABAIAAAUCAAAGAgAABwIAAAgCAAAJAgAACgIAAAsCAAAMAgAADQIAAA4CAAAPAgAAEAIAABECAAASAgAAEwIAAA== + + +FAIAAA==BAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAAAAAEAAAQBAAAIAQAADAEAABABAAAUAQAAGAEAABwBAAAgAQAAJAEAACgBAAAsAQAAMAEAADQBAAA4AQAAPAEAAEABAABEAQAASAEAAEwBAABQAQAAVAEAAFgBAABcAQAAYAEAAGQBAABoAQAAbAEAAHABAAB0AQAAeAEAAHwBAACAAQAAhAEAAIgBAACMAQAAkAEAAJQBAACYAQAAnAEAAKABAACkAQAAqAEAAKwBAACwAQAAtAEAALgBAAC8AQAAwAEAAMQBAADIAQAAzAEAANABAADUAQAA2AEAANwBAADgAQAA5AEAAOgBAADsAQAA8AEAAPQBAAD4AQAA/AEAAAACAAAEAgAACAIAAAwCAAAQAgAAFAIAAA== + + +hQAAAA==CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg== + + + + +FAIAAA==AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAA== + + + + +4DEAAA==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 + + +oBAAAA==AAAAAADAckAAAAAAAMByQAAAAAAAwHJAw86wjYx/dkAOUeATqVR3QAAAAAAAwHJAAAAAAADAckAAAAAAAMByQAAAAAAAwHJAAAAAAADAckATovpuict2QAAAAAAAwHJAAAAAAADAckAAAAAAAMByQPysOV0zvnZAAAAAAADAckDTlTiFoIJ2QAAAAAAAwHJAAAAAAADAckAAAAAAAMByQAAAAAAAwHJAAAAAAADAckAAAAAAAMByQJ5X2zg0vnZAAAAAAADAckAAAAAAAMByQNOVOIWggnZAAAAAAADAckAAAAAAAMByQAAAAAAAwHJAAAAAAADAckBi7Oqrs1R2QAAAAAAAwHJAAAAAAADAckATovpuict2QAAAAAAAwHJAAAAAAADAckDabzQoslR2QAAAAAAAwHJAAAAAAADAckAAAAAAAMByQAAAAAAAwHJAS5PWPIt/dkAAAAAAAMByQAAAAAAAwHJAE6L6bonLdkAAAAAAAMByQAAAAAAAwHJAAAAAAADAckAAAAAAAMByQCWRbTWfgnZAAAAAAADAckAAAAAAAEB/QAAAAAAAQH9AOwW2Kzk6e0AAAAAAAEB/QAAAAAAAwHJA05U4haCCdkCeV9s4NL52QAAAAAAAwHJAAAAAAADAckAAAAAAAMByQAAAAAAAwHJA2m80KLJUdkAU9gmDt4V7QAAAAAAAQH9AAAAAAABAf0AAAAAAAEB/QAAAAAAAQH9AAAAAAABAf0AU9gmDt4V7QAAAAAAAQH9AAAAAAABAf0AAAAAAAEB/QJVP9SsQV3tAAAAAAABAf0AAAAAAAEB/QKFVxVqgMXtAAAAAAABAf0AAAAAAAEB/QAAAAAAAQH9AAAAAAABAf0CkbOBfNzp7QAAAAAAAQH9A301eOBFXe0AAAAAAAEB/QAAAAAAAQH9AAAAAAABAf0AAAAAAAEB/QAAAAAAAQH9Acy389Qk/e0AAAAAAAEB/QAAAAAAAQH9AAAAAAABAf0DNPxcXCz97QAAAAAAAQH9AAAAAAABAf0AAAAAAAEB/QN9NXjgRV3tAAAAAAABAf0AyUAv6//94QAAAAAAAQH9A301eOBFXe0BzLfz1CT97QF3nPUD9/3hAAAAAAABAf0CVT/UrEFd7QKRs4F83OntAAAAAAABAf0AAAAAAAEB/QKFVxVqgMXtAAAAAAABAf0ChVcVaoDF7QAAAAAAAQH9AAAAAAABAf0AAAAAAAEB/QAAAAAAAQH9AAAAAAABAf0AbwyTKtoV7QAAAAAAAQH9ApGzgXzc6e0CZ64euN0d4QF3nPUD9/3hAJZFtNZ+CdkAlkW01n4J2QNpvNCiyVHZAAAAAAADAckAAAAAAAMByQBOi+m6Jy3ZAAAAAAADAckD8rDldM752QAAAAAAAwHJAAAAAAABAf0A7BbYrOTp7QBvDJMq2hXtAAAAAAABAf0ChVcVaoDF7QAAAAAAAQH9ApGzgXzc6e0AAAAAAAEB/QCWRbTWfgnZAoVXFWqAxe0AbwyTKtoV7QKRs4F83OntAoVXFWqAxe0A7BbYrOTp7QBvDJMq2hXtAAAAAAABAf0CVlnm4AAB5QAAAAAAAwHJA05U4haCCdkD8rDldM752QBvDJMq2hXtAE6L6bonLdkAlkW01n4J2QPysOV0zvnZA/Kw5XTO+dkA7BbYrOTp7QNOVOIWggnZAlZZ5uAAAeUA7BbYrOTp7QPysOV0zvnZAG8MkyraFe0CVlnm4AAB5QEuT1jyLf3ZAYuzqq7NUdkAAAAAAAMByQAAAAAAAwHJAAAAAAADAckAOUeATqVR3QGLs6quzVHZAAAAAAADAckAyUAv6//94QHL5LBmScHlAS5PWPIt/dkBzLfz1CT97QAAAAAAAQH9AlU/1KxBXe0CkbOBfNzp7QAAAAAAAQH9AAAAAAABAf0By+SwZknB5QAAAAAAAQH9Acy389Qk/e0DabzQoslR2QCWRbTWfgnZAmeuHrjdHeEAAAAAAAMByQAAAAAAAwHJAmeuHrjdHeEAAAAAAAMByQNpvNCiyVHZA2m80KLJUdkAAAAAAAMByQEuT1jyLf3ZAAAAAAADAckAAAAAAAMByQF3nPUD9/3hA2m80KLJUdkAlkW01n4J2QEuT1jyLf3ZAlU/1KxBXe0CZ64euN0d4QNpvNCiyVHZAlU/1KxBXe0CkbOBfNzp7QJnrh643R3hAXec9QP3/eEAlkW01n4J2QKFVxVqgMXtApGzgXzc6e0CZ64euN0d4QJmCdhsBAHlAAAAAAABAf0AU9gmDt4V7QM0/FxcLP3tAAAAAAABAf0AAAAAAAEB/QAAAAAAAQH9AoVXFWqAxe0CeV9s4NL52QM0/FxcLP3tAw86wjYx/dkCZgnYbAQB5QAAAAAAAwHJAAAAAAADAckDDzrCNjH92QJ5X2zg0vnZAAAAAAABAf0DfTV44EVd7QHMt/PUJP3tAAAAAAABAf0AAAAAAAEB/QN9NXjgRV3tAzT8XFws/e0AAAAAAAEB/QN9NXjgRV3tAAAAAAABAf0DNPxcXCz97QNnUEl19k3pAlU/1KxBXe0BLk9Y8i392QHL5LBmScHlAcy389Qk/e0AAAAAAAMByQHL5LBmScHlAS5PWPIt/dkBi7Oqrs1R2QAAAAAAAwHJAMlAL+v//eEBi7Oqrs1R2QEuT1jyLf3ZAw86wjYx/dkDfTV44EVd7QA5R4BOpVHdAYuzqq7NUdkDfTV44EVd7QHMt/PUJP3tAcvksGZJweUAyUAv6//94QJWWebgAAHlAAAAAAABAf0AbwyTKtoV7QDsFtis5OntAE6L6bonLdkA7BbYrOTp7QPysOV0zvnZAG8MkyraFe0AAAAAAAMByQNOVOIWggnZA/Kw5XTO+dkAAAAAAAMByQN9NXjgRV3tAw86wjYx/dkAOUeATqVR3QM0/FxcLP3tAAAAAAABAf0AU9gmDt4V7QM0/FxcLP3tAAAAAAABAf0AAAAAAAEB/QBT2CYO3hXtAOwW2Kzk6e0AAAAAAAEB/QA5R4BOpVHdAnlfbODS+dkDDzrCNjH92QAAAAAAAwHJAoVXFWqAxe0DfTV44EVd7QAAAAAAAQH9AAAAAAABAf0CZgnYbAQB5QAAAAAAAwHJAw86wjYx/dkCeV9s4NL52QBOi+m6Jy3ZAnlfbODS+dkAAAAAAAMByQNOVOIWggnZAzT8XFws/e0CeV9s4NL52QBT2CYO3hXtAmYJ2GwEAeUCeV9s4NL52QM0/FxcLP3tADlHgE6lUd0DDzrCNjH92QA5R4BOpVHdA301eOBFXe0By+SwZknB5QGLs6quzVHZAcvksGZJweUAAAAAAAEB/QHMt/PUJP3tA301eOBFXe0AAAAAAAMByQJnrh643R3hA2m80KLJUdkBLk9Y8i392QMPOsI2Mf3ZAAAAAAADAckAAAAAAAMByQA5R4BOpVHdA05U4haCCdkAAAAAAAMByQBOi+m6Jy3ZAAAAAAADAckAAAAAAAMByQA5R4BOpVHdAYuzqq7NUdkDDzrCNjH92QNOVOIWggnZA2dQSXX2TekCeV9s4NL52QBT2CYO3hXtAFPYJg7eFe0AAAAAAAEB/QNnUEl19k3pAAAAAAABAf0D8rDldM752QNOVOIWggnZAE6L6bonLdkAAAAAAAMByQJ5X2zg0vnZAzT8XFws/e0AU9gmDt4V7QNnUEl19k3pAFPYJg7eFe0DNPxcXCz97QAAAAAAAQH9A2dQSXX2TekCkbOBfNzp7QKFVxVqgMXtAlU/1KxBXe0CZ64euN0d4QAAAAAAAQH9AFPYJg7eFe0DZ1BJdfZN6QDsFtis5OntAE6L6bonLdkA7BbYrOTp7QNnUEl19k3pA05U4haCCdkAAAAAAAMByQBOi+m6Jy3ZA/Kw5XTO+dkAlkW01n4J2QAAAAAAAwHJAE6L6bonLdkAlkW01n4J2QAAAAAAAwHJAAAAAAADAckATovpuict2QA5R4BOpVHdAAAAAAADAckA7BbYrOTp7QBOi+m6Jy3ZA/Kw5XTO+dkDTlTiFoIJ2QJ5X2zg0vnZAE6L6bonLdkAAAAAAAMByQA5R4BOpVHdAmeuHrjdHeEAAAAAAAMByQHL5LBmScHlAS5PWPIt/dkATovpuict2QHL5LBmScHlADlHgE6lUd0ChVcVaoDF7QJ5X2zg0vnZAE6L6bonLdkDZ1BJdfZN6QNOVOIWggnZAoVXFWqAxe0AOUeATqVR3QBOi+m6Jy3ZA2dQSXX2TekAAAAAAAEB/QKFVxVqgMXtAG8MkyraFe0AAAAAAAEB/QKFVxVqgMXtAOwW2Kzk6e0ATovpuict2QBvDJMq2hXtAAAAAAABAf0ChVcVaoDF7QJVP9SsQV3tAAAAAAABAf0AAAAAAAEB/QKFVxVqgMXtApGzgXzc6e0AbwyTKtoV7QNnUEl19k3pA05U4haCCdkA7BbYrOTp7QBT2CYO3hXtAJZFtNZ+CdkChVcVaoDF7QBOi+m6Jy3ZAG8MkyraFe0AAAAAAAEB/QKFVxVqgMXtAcvksGZJweUCVT/UrEFd7QKFVxVqgMXtAJZFtNZ+CdkATovpuict2QJnrh643R3hA301eOBFXe0ChVcVaoDF7QA5R4BOpVHdAcvksGZJweUDZ1BJdfZN6QN9NXjgRV3tADlHgE6lUd0DNPxcXCz97QF3nPUD9/3hAmeuHrjdHeECVT/UrEFd7QNpvNCiyVHZAoVXFWqAxe0CkbOBfNzp7QJVP9SsQV3tAAAAAAABAf0DabzQoslR2QCWRbTWfgnZAXec9QP3/eECZ64euN0d4QHL5LBmScHlAAAAAAABAf0CVT/UrEFd7QHMt/PUJP3tAE6L6bonLdkAlkW01n4J2QAAAAAAAwHJAmeuHrjdHeEAAAAAAAMByQJnrh643R3hAE6L6bonLdkAAAAAAAMByQHL5LBmScHlAAAAAAADAckATovpuict2QA5R4BOpVHdAS5PWPIt/dkCVT/UrEFd7QHL5LBmScHlAmeuHrjdHeEBLk9Y8i392QGLs6quzVHZAcvksGZJweUAyUAv6//94QAAAAAAAwHJAcvksGZJweUBi7Oqrs1R2QA5R4BOpVHdAlU/1KxBXe0ChVcVaoDF7QHL5LBmScHlAmeuHrjdHeEAAAAAAAMByQJnrh643R3hAcvksGZJweUATovpuict2QBOi+m6Jy3ZAcvksGZJweUChVcVaoDF7QJnrh643R3hAcvksGZJweUBi7Oqrs1R2QN9NXjgRV3tAMlAL+v//eEChVcVaoDF7QAAAAAAAQH9AcvksGZJweUAAAAAAAEB/QKFVxVqgMXtA301eOBFXe0AAAAAAAEB/QHL5LBmScHlAzT8XFws/e0CeV9s4NL52QA5R4BOpVHdA2dQSXX2TekChVcVaoDF7QN9NXjgRV3tADlHgE6lUd0DZ1BJdfZN6QBOi+m6Jy3ZAnlfbODS+dkDZ1BJdfZN6QA5R4BOpVHdA301eOBFXe0ChVcVaoDF7QAAAAAAAQH9A2dQSXX2TekChVcVaoDF7QAAAAAAAQH9A2dQSXX2TekAAAAAAAEB/QDsFtis5OntAoVXFWqAxe0ATovpuict2QNnUEl19k3pAoVXFWqAxe0A7BbYrOTp7QAAAAAAAQH9A2dQSXX2TekA= + + + + + diff --git a/examples/ThermalExpansionExample/ThermalExpansionExample.pvd b/examples/ThermalExpansionExample/ThermalExpansionExample.pvd new file mode 100644 index 000000000..c757f35d1 --- /dev/null +++ b/examples/ThermalExpansionExample/ThermalExpansionExample.pvd @@ -0,0 +1,7 @@ + + + + + + + From 1a67edb0da81c721a957896c9867b2f2f35c0b2f Mon Sep 17 00:00:00 2001 From: billellis Date: Wed, 8 Nov 2023 15:53:51 +0000 Subject: [PATCH 23/41] Revert "Renamed thermal expansion example folder and main file to fit with other examples" This reverts commit 72e52189ce150de6dd94f81011f384dc084c0262. --- examples/{thermal_expansion => ThermalExpansion}/CMakeLists.txt | 0 .../Main.cpp => ThermalExpansion/ThermalExpansionExample.cpp} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename examples/{thermal_expansion => ThermalExpansion}/CMakeLists.txt (100%) rename examples/{thermal_expansion/Main.cpp => ThermalExpansion/ThermalExpansionExample.cpp} (100%) diff --git a/examples/thermal_expansion/CMakeLists.txt b/examples/ThermalExpansion/CMakeLists.txt similarity index 100% rename from examples/thermal_expansion/CMakeLists.txt rename to examples/ThermalExpansion/CMakeLists.txt diff --git a/examples/thermal_expansion/Main.cpp b/examples/ThermalExpansion/ThermalExpansionExample.cpp similarity index 100% rename from examples/thermal_expansion/Main.cpp rename to examples/ThermalExpansion/ThermalExpansionExample.cpp From 84c7429bc17f9fc2fa0da7c60277fe8562362690 Mon Sep 17 00:00:00 2001 From: billellis Date: Wed, 8 Nov 2023 15:55:10 +0000 Subject: [PATCH 24/41] Deleted wrongly added Paraview files --- .../Cycle000000/data.pvtu | 21 ----------- .../Cycle000000/proc000000.vtu | 35 ------------------- .../Cycle000001/data.pvtu | 21 ----------- .../Cycle000001/proc000000.vtu | 35 ------------------- .../ThermalExpansionExample.pvd | 7 ---- 5 files changed, 119 deletions(-) delete mode 100644 examples/ThermalExpansionExample/Cycle000000/data.pvtu delete mode 100644 examples/ThermalExpansionExample/Cycle000000/proc000000.vtu delete mode 100644 examples/ThermalExpansionExample/Cycle000001/data.pvtu delete mode 100644 examples/ThermalExpansionExample/Cycle000001/proc000000.vtu delete mode 100644 examples/ThermalExpansionExample/ThermalExpansionExample.pvd diff --git a/examples/ThermalExpansionExample/Cycle000000/data.pvtu b/examples/ThermalExpansionExample/Cycle000000/data.pvtu deleted file mode 100644 index 9fff32d89..000000000 --- a/examples/ThermalExpansionExample/Cycle000000/data.pvtu +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/ThermalExpansionExample/Cycle000000/proc000000.vtu b/examples/ThermalExpansionExample/Cycle000000/proc000000.vtu deleted file mode 100644 index 885eeb0a9..000000000 --- a/examples/ThermalExpansionExample/Cycle000000/proc000000.vtu +++ /dev/null @@ -1,35 +0,0 @@ - - - - - -4DEAAA==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 - - - - -UAgAAA==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 - - -FAIAAA==BAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAAAAAEAAAQBAAAIAQAADAEAABABAAAUAQAAGAEAABwBAAAgAQAAJAEAACgBAAAsAQAAMAEAADQBAAA4AQAAPAEAAEABAABEAQAASAEAAEwBAABQAQAAVAEAAFgBAABcAQAAYAEAAGQBAABoAQAAbAEAAHABAAB0AQAAeAEAAHwBAACAAQAAhAEAAIgBAACMAQAAkAEAAJQBAACYAQAAnAEAAKABAACkAQAAqAEAAKwBAACwAQAAtAEAALgBAAC8AQAAwAEAAMQBAADIAQAAzAEAANABAADUAQAA2AEAANwBAADgAQAA5AEAAOgBAADsAQAA8AEAAPQBAAD4AQAA/AEAAAACAAAEAgAACAIAAAwCAAAQAgAAFAIAAA== - - -hQAAAA==CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg== - - - - -FAIAAA==AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAA== - - - - -4DEAAA==AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - - -oBAAAA==oHS/pZx/AABQnEPlBFYAAFCcQ+UEVgAAoHS/pZx/AAAAAAAAAAAAAAAAAAAAAAAAUJxD5QRWAACgdL+lnH8AAFCcQ+UEVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCcQ+UEVgAAAAAAAAAAAAAAAAAAAAAAAFCcQ+UEVgAAAAAAAAAAAABQnEPlBFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKB0v6WcfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUJxD5QRWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCcQ+UEVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoHS/pZx/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoHS/pZx/AAAAAAAAAAAAAFCcQ+UEVgAAUJxD5QRWAACgdL+lnH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoHS/pZx/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoHS/pZx/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgdL+lnH8AAFCcQ+UEVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCcQ+UEVgAAoHS/pZx/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQnEPlBFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgdL+lnH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKB0v6WcfwAAUJxD5QRWAACgdL+lnH8AAAAAAAAAAAAAAAAAAAAAAABQnEPlBFYAAAAAAAAAAAAAAAAAAAAAAACgdL+lnH8AAAAAAAAAAAAAAAAAAAAAAACgdL+lnH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUJxD5QRWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQnEPlBFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - - - - - diff --git a/examples/ThermalExpansionExample/Cycle000001/data.pvtu b/examples/ThermalExpansionExample/Cycle000001/data.pvtu deleted file mode 100644 index 9fff32d89..000000000 --- a/examples/ThermalExpansionExample/Cycle000001/data.pvtu +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/ThermalExpansionExample/Cycle000001/proc000000.vtu b/examples/ThermalExpansionExample/Cycle000001/proc000000.vtu deleted file mode 100644 index 60f96afbb..000000000 --- a/examples/ThermalExpansionExample/Cycle000001/proc000000.vtu +++ /dev/null @@ -1,35 +0,0 @@ - - - - - -4DEAAA==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 - - - - -UAgAAA==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 - - -FAIAAA==BAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAAAAAEAAAQBAAAIAQAADAEAABABAAAUAQAAGAEAABwBAAAgAQAAJAEAACgBAAAsAQAAMAEAADQBAAA4AQAAPAEAAEABAABEAQAASAEAAEwBAABQAQAAVAEAAFgBAABcAQAAYAEAAGQBAABoAQAAbAEAAHABAAB0AQAAeAEAAHwBAACAAQAAhAEAAIgBAACMAQAAkAEAAJQBAACYAQAAnAEAAKABAACkAQAAqAEAAKwBAACwAQAAtAEAALgBAAC8AQAAwAEAAMQBAADIAQAAzAEAANABAADUAQAA2AEAANwBAADgAQAA5AEAAOgBAADsAQAA8AEAAPQBAAD4AQAA/AEAAAACAAAEAgAACAIAAAwCAAAQAgAAFAIAAA== - - -hQAAAA==CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg== - - - - -FAIAAA==AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAA== - - - - -4DEAAA==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 - - -oBAAAA==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 - - - - - diff --git a/examples/ThermalExpansionExample/ThermalExpansionExample.pvd b/examples/ThermalExpansionExample/ThermalExpansionExample.pvd deleted file mode 100644 index c757f35d1..000000000 --- a/examples/ThermalExpansionExample/ThermalExpansionExample.pvd +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - From 07556e10b6e0a3257d98104cdc4dcc2c079931de Mon Sep 17 00:00:00 2001 From: billellis Date: Wed, 29 Nov 2023 15:04:19 +0000 Subject: [PATCH 25/41] Added ConstructEquationSystem method to SteadyStateProblemBuilder --- src/problem_builders/steady_state_problem_builder.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/problem_builders/steady_state_problem_builder.cpp b/src/problem_builders/steady_state_problem_builder.cpp index c74d91558..71f5c7713 100644 --- a/src/problem_builders/steady_state_problem_builder.cpp +++ b/src/problem_builders/steady_state_problem_builder.cpp @@ -25,4 +25,10 @@ void SteadyStateProblemBuilder::ConstructState() { this->problem->eq_sys_operator->Init( *(this->problem->F)); // Set up initial conditions } + +void SteadyStateProblemBuilder::ConstructEquationSystem() { + hephaestus::InputParameters params; + this->problem->eq_sys = + std::make_unique(params); +} } // namespace hephaestus From 50a86bfcb13a98a371f28c5e4e1d4f777e6409d5 Mon Sep 17 00:00:00 2001 From: billellis Date: Wed, 29 Nov 2023 15:05:28 +0000 Subject: [PATCH 26/41] Implemented necessary hephaestus kernels for thermal expansion solve --- src/kernels/domain_divergence_lf_kernel.cpp | 21 +++++++++++++++++ src/kernels/domain_divergence_lf_kernel.hpp | 25 +++++++++++++++++++++ src/kernels/kernels.hpp | 3 +++ src/kernels/linear_elasticity_kernel.cpp | 25 +++++++++++++++++++++ src/kernels/linear_elasticity_kernel.hpp | 24 ++++++++++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 src/kernels/domain_divergence_lf_kernel.cpp create mode 100644 src/kernels/domain_divergence_lf_kernel.hpp create mode 100644 src/kernels/linear_elasticity_kernel.cpp create mode 100644 src/kernels/linear_elasticity_kernel.hpp diff --git a/src/kernels/domain_divergence_lf_kernel.cpp b/src/kernels/domain_divergence_lf_kernel.cpp new file mode 100644 index 000000000..11c9b041b --- /dev/null +++ b/src/kernels/domain_divergence_lf_kernel.cpp @@ -0,0 +1,21 @@ +#include "domain_divergence_lf_kernel.hpp" + +namespace hephaestus { + +DomainDivergenceLFKernel::DomainDivergenceLFKernel(const hephaestus::InputParameters ¶ms) + : Kernel(params), + coef_name(params.GetParam("CoefficientName")) {} + +void DomainDivergenceLFKernel::Init(hephaestus::GridFunctions &gridfunctions, + const hephaestus::FESpaces &fespaces, + hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients) { + + coef = coefficients.scalars.Get(coef_name); +} + +void DomainDivergenceLFKernel::Apply(mfem::ParLinearForm *lf) { + lf->AddDomainIntegrator(new mfem::DomainLFH1DivIntegrator(*coef)); +} + +} // namespace hephaestus diff --git a/src/kernels/domain_divergence_lf_kernel.hpp b/src/kernels/domain_divergence_lf_kernel.hpp new file mode 100644 index 000000000..cdb49ed7a --- /dev/null +++ b/src/kernels/domain_divergence_lf_kernel.hpp @@ -0,0 +1,25 @@ +#pragma once +#include "kernel_base.hpp" +#include "DomainLFH1DivIntegrator.hpp" + +namespace hephaestus { + +/* +(∇∙v, f) +*/ +class DomainDivergenceLFKernel : public Kernel { +public: + DomainDivergenceLFKernel(const hephaestus::InputParameters ¶ms); + ~DomainDivergenceLFKernel(); + virtual void Init(hephaestus::GridFunctions &gridfunctions, + const hephaestus::FESpaces &fespaces, + hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients) override; + virtual void Apply(mfem::ParLinearForm *lf) override; + + std::string coef_name; + mfem::Coefficient *coef; + +}; + +}; // namespace hephaestus diff --git a/src/kernels/kernels.hpp b/src/kernels/kernels.hpp index 0e8794766..7f129bf7e 100644 --- a/src/kernels/kernels.hpp +++ b/src/kernels/kernels.hpp @@ -7,3 +7,6 @@ #include "weak_curl_curl_kernel.hpp" #include "weak_curl_kernel.hpp" #include "mixed_weak_divergence_kernel.hpp" +#include "mixed_weak_divergence_kernel.hpp" +#include "domain_divergence_lf_kernel.hpp" +#include "linear_elasticity_kernel.hpp" diff --git a/src/kernels/linear_elasticity_kernel.cpp b/src/kernels/linear_elasticity_kernel.cpp new file mode 100644 index 000000000..ec0189aa1 --- /dev/null +++ b/src/kernels/linear_elasticity_kernel.cpp @@ -0,0 +1,25 @@ +#include "linear_elasticity_kernel.hpp" + +namespace hephaestus { + +LinearElasticityKernel::LinearElasticityKernel( + const hephaestus::InputParameters ¶ms) + : Kernel(params), + lame_paramter_name(params.GetParam("LameParameterCoefName")), + shear_modulus_name(params.GetParam("ShearModulusCoefName")) + {} + +void LinearElasticityKernel::Init(hephaestus::GridFunctions &gridfunctions, + const hephaestus::FESpaces &fespaces, + hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients) { + + lame_parameter = coefficients.scalars.Get(lame_paramter_name); + shear_modulus = coefficients.scalars.Get(shear_modulus_name); +} + +void LinearElasticityKernel::Apply(mfem::ParBilinearForm *blf) { + blf->AddDomainIntegrator(new mfem::ElasticityIntegrator(*lame_parameter, *shear_modulus)); +} + +} // namespace hephaestus diff --git a/src/kernels/linear_elasticity_kernel.hpp b/src/kernels/linear_elasticity_kernel.hpp new file mode 100644 index 000000000..a087f7876 --- /dev/null +++ b/src/kernels/linear_elasticity_kernel.hpp @@ -0,0 +1,24 @@ +#pragma once +#include "kernel_base.hpp" + +namespace hephaestus { + +/* +Implements the provided mfem linear elasticity integrator into a hephaestus kernel. +a(u,v) = (λ div(u), div(v)) + (2 μ e(u), e(v)), +where e(v) = (1/2) (grad(v) + grad(v)^T). +*/ +class LinearElasticityKernel : public Kernel { +public: + LinearElasticityKernel(const hephaestus::InputParameters ¶ms); + virtual void Init(hephaestus::GridFunctions &gridfunctions, + const hephaestus::FESpaces &fespaces, + hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients) override; + virtual void Apply(mfem::ParBilinearForm *blf) override; + std::string lame_paramter_name, shear_modulus_name; + mfem::Coefficient *lame_parameter, *shear_modulus; + +}; + +}; // namespace hephaestus From e097f10a041212834adb444f1193108610b3d937 Mon Sep 17 00:00:00 2001 From: billellis Date: Wed, 29 Nov 2023 15:06:05 +0000 Subject: [PATCH 27/41] Implemented ThermalExpansionEquationSystem in ThermalExpansion formulation --- .../thermal_expansion_formulation.cpp | 94 +++++++++++++++---- .../thermal_expansion_formulation.hpp | 31 +++--- 2 files changed, 96 insertions(+), 29 deletions(-) diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp index 9b1f30f6c..52159a156 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp @@ -11,31 +11,53 @@ ThermalExpansionFormulation::ThermalExpansionFormulation() : SteadyStateFormulat thermal_expansion_coef_name = std::string("thermal_expansion_coef"); thermal_conductivity_coef_name = std::string("thermal_conductivity"); stress_free_temp_coef_name = std::string("stress_free_temp"); + thermal_expansion_bilin_coef_name = std::string("thermal_expansion_bilin_coef"); + thermal_expansion_lin_coef_name = std::string("thermal_expansion_lin_coef"); + } void ThermalExpansionFormulation::RegisterCoefficients() { + hephaestus::Coefficients &coefficients = this->GetProblem()->coefficients; + if (!coefficients.scalars.Has(lame_param_coef_name)) { + MFEM_ABORT(lame_param_coef_name + " coefficient not found."); + } - if (!coefficients.scalars.Has(lame_param_coef_name)) { - MFEM_ABORT(lame_param_coef_name + " coefficient not found."); - } + if (!coefficients.scalars.Has(shear_modulus_coef_name)) { + MFEM_ABORT(shear_modulus_coef_name + " coefficient not found."); + } - if (!coefficients.scalars.Has(shear_modulus_coef_name)) { - MFEM_ABORT(shear_modulus_coef_name + " coefficient not found."); - } + if (!coefficients.scalars.Has(stress_free_temp_coef_name)) { + MFEM_ABORT(stress_free_temp_coef_name + " coefficient not found."); + } - if (!coefficients.scalars.Has(stress_free_temp_coef_name)) { - MFEM_ABORT(stress_free_temp_coef_name + " coefficient not found."); - } + if (!coefficients.scalars.Has(thermal_expansion_coef_name)) { + MFEM_ABORT(thermal_expansion_coef_name + " coefficient not found."); + } - if (!coefficients.scalars.Has(thermal_expansion_coef_name)) { - MFEM_ABORT(thermal_expansion_coef_name + " coefficient not found."); - } + if (!coefficients.scalars.Has(thermal_conductivity_coef_name)) { + MFEM_ABORT(thermal_conductivity_coef_name + " coefficient not found."); + } - if (!coefficients.scalars.Has(thermal_conductivity_coef_name)) { - MFEM_ABORT(thermal_conductivity_coef_name + " coefficient not found."); - } + mfem::SumCoefficient materialTerm(*(coefficients.scalars.Get(lame_param_coef_name)), + *(coefficients.scalars.Get(shear_modulus_coef_name)), 3, 2); + + mfem::SumCoefficient thexpStressFreeTemp(*(coefficients.scalars.Get(thermal_expansion_coef_name)), + *(coefficients.scalars.Get(stress_free_temp_coef_name))); + + mfem::ProductCoefficient bilinearFormCoefPositive(*(coefficients.scalars.Get(thermal_expansion_coef_name)), + materialTerm); + + if (!coefficients.scalars.Has(thermal_expansion_bilin_coef_name)) { + coefficients.scalars.Register(thermal_expansion_bilin_coef_name, + new mfem::ProductCoefficient(-1, bilinearFormCoefPositive), true); + } + + if (!coefficients.scalars.Has(thermal_expansion_lin_coef_name)) { + coefficients.scalars.Register(thermal_expansion_lin_coef_name, + new mfem::ProductCoefficient(*(coefficients.scalars.Get(stress_free_temp_coef_name)), materialTerm), true); + } } // void ThermalExpansionFormulation::ConstructEquationSystem() { @@ -69,7 +91,9 @@ void ThermalExpansionFormulation::ConstructOperator() { this->problem->coefficients, this->problem->sources, this->problem->solver_options); // this->problem->eq_sys_operator->SetEquationSystem( - // this->problem->eq_sys.get()); + // this-> + + ->eq_sys.get()); this->problem->eq_sys_operator->SetGridFunctions(); }; @@ -219,6 +243,44 @@ void ThermalExpansionOperator::Solve(mfem::Vector &X) { *_gridfunctions.Get(state_var_names.at(1)) = *u_; } +// Set up equation system +ThermalExpansionEquationSystem::ThermalExpansionEquationSystem( + const hephaestus::InputParameters ¶ms) + : EquationSystem(params), + temp_var_name(params.GetParam("TempVarName")), + displacement_var_name(params.GetParam("DisplacementVarName")), + stress_free_temp_coef_name(params.GetParam("StressFreeTempCoefName")), + thermal_conductivity_coef_name(params.GetParam("ThermalConductivityCoefName")), + lame_param_coef_name(params.GetParam("LameParamCoefName")), + shear_modulus_coef_name(params.GetParam("ShearModulusCoefName")) {} + +void ThermalExpansionEquationSystem::Init(hephaestus::GridFunctions &gridfunctions, + const hephaestus::FESpaces &fespaces, + hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients) { + + EquationSystem::Init(gridfunctions, fespaces, bc_map, coefficients); +} + +void ThermalExpansionEquationSystem::addKernels() { + hephaestus::InputParameters mixedWeakDivergenceParams; + mixedWeakDivergenceParams.SetParam("CoefficientName", thermal_expansion_bilin_coef_name); + addKernel(temp_var_name, displacement_var_name, + new hephaestus::MixedWeakDivergenceKernel(mixedWeakDivergenceParams)); + + hephaestus::InputParameters diffusionIntegratorParams; + diffusionIntegratorParams.SetParam("CoefficientName", thermal_conductivity_coef_name); + addKernel(temp_var_name, new hephaestus::DiffusionKernel(diffusionIntegratorParams)); + + hephaestus::InputParameters domainDivergenceLFParams; + domainDivergenceLFParams.SetParam("CoefficientName", thermal_expansion_lin_coef_name); + addKernel(temp_var_name, new hephaestus::DomainDivergenceLFKernel(domainDivergenceLFParams)); + + hephaestus::InputParameters elasticityIntegratorParams; + elasticityIntegratorParams.SetParam("LameParameterCoefName", lame_param_coef_name); + elasticityIntegratorParams.SetParam("ShearModulusCoefName", shear_modulus_coef_name); + addKernel(displacement_var_name, new hephaestus::LinearElasticityKernel(elasticityIntegratorParams)); +} } //hephaestus diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp index eeb20b389..d2f610a2c 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp @@ -1,6 +1,7 @@ #pragma once #include "../common/pfem_extras.hpp" #include "formulation.hpp" +#include "kernels.hpp" #include "inputs.hpp" #include "sources.hpp" #include "integrators.hpp" @@ -21,24 +22,26 @@ class ThermalExpansionFormulation : public SteadyStateFormulation { protected: std::string temp_var_name, displacement_var_name, - stress_free_temp_coef_name, lame_param_coef_name, shear_modulus_coef_name, thermal_expansion_coef_name, thermal_conductivity_coef_name; + stress_free_temp_coef_name, lame_param_coef_name, shear_modulus_coef_name, thermal_expansion_coef_name, thermal_conductivity_coef_name, + thermal_expansion_bilin_coef_name, thermal_expansion_lin_coef_name; }; // Do this later -// class ThermalExpansionEquationSystem : public TimeDependentEquationSystem { -// public: -// ThermalExpansionEquationSystem(const hephaestus::InputParameters ¶ms); +class ThermalExpansionEquationSystem : public EquationSystem { +public: + ThermalExpansionEquationSystem(const hephaestus::InputParameters ¶ms); -// virtual void Init(hephaestus::GridFunctions &gridfunctions, -// const hephaestus::FESpaces &fespaces, -// hephaestus::BCMap &bc_map, -// hephaestus::Coefficients &coefficients) override; -// virtual void addKernels() override; + virtual void Init(hephaestus::GridFunctions &gridfunctions, + const hephaestus::FESpaces &fespaces, + hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients) override; + virtual void addKernels() override; -// std::string temp_var_name, displacement_var_name, -// stress_free_temp_coef_name, lame_param_coef_name, shear_modulus_coef_name; -// }; + std::string temp_var_name, displacement_var_name, + stress_free_temp_coef_name, lame_param_coef_name, shear_modulus_coef_name, + thermal_conductivity_coef_name, thermal_expansion_bilin_coef_name, thermal_expansion_lin_coef_name; +}; class ThermalExpansionOperator : public EquationSystemOperator { public: @@ -59,7 +62,9 @@ class ThermalExpansionOperator : public EquationSystemOperator { void MakeCoefficients(); std::string temp_var_name, displacement_var_name, - stress_free_temp_coef_name, lame_coef_name, shear_modulus_coef_name, thermal_expansion_coef_name, thermal_conductivity_coef_name; + stress_free_temp_coef_name, lame_coef_name, shear_modulus_coef_name, + thermal_expansion_coef_name, thermal_conductivity_coef_name, + thermal_expansion_bilin_coef_name, thermal_expansion_lin_coef_name; mfem::ParGridFunction *u_, *t_; mfem::ParLinearForm *b1_, *b2_; mfem::ParBilinearForm *a1_, *a2_; From f62909154aeb56110c02fa793711d3cc96c9b638 Mon Sep 17 00:00:00 2001 From: billellis Date: Thu, 30 Nov 2023 16:23:14 +0000 Subject: [PATCH 28/41] Updated InitializeKernels method in steady_state_problem_builder to use equation_system Init method --- .../steady_state_problem_builder.cpp | 25 +++++++++++++------ .../steady_state_problem_builder.hpp | 6 ++--- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/problem_builders/steady_state_problem_builder.cpp b/src/problem_builders/steady_state_problem_builder.cpp index 71f5c7713..98382e06b 100644 --- a/src/problem_builders/steady_state_problem_builder.cpp +++ b/src/problem_builders/steady_state_problem_builder.cpp @@ -2,13 +2,6 @@ namespace hephaestus { -void SteadyStateProblemBuilder::InitializeKernels() { - this->problem->preprocessors.Init(this->problem->gridfunctions, - this->problem->coefficients); - this->problem->sources.Init(this->problem->gridfunctions, - this->problem->fespaces, this->problem->bc_map, - this->problem->coefficients); -} void SteadyStateProblemBuilder::ConstructOperator() { this->problem->eq_sys_operator = std::make_unique( @@ -19,6 +12,17 @@ void SteadyStateProblemBuilder::ConstructOperator() { this->problem->eq_sys_operator->SetGridFunctions(); } +void SteadyStateProblemBuilder::InitializeKernels() { + this->problem->eq_sys->Init( + this->problem->gridfunctions, this->problem->fespaces, + this->problem->bc_map, this->problem->coefficients); + this->problem->preprocessors.Init(this->problem->gridfunctions, + this->problem->coefficients); + this->problem->sources.Init(this->problem->gridfunctions, + this->problem->fespaces, this->problem->bc_map, + this->problem->coefficients); +} + void SteadyStateProblemBuilder::ConstructState() { this->problem->F = new mfem::BlockVector( this->problem->eq_sys_operator->true_offsets); // Vector of dofs @@ -31,4 +35,11 @@ void SteadyStateProblemBuilder::ConstructEquationSystem() { this->problem->eq_sys = std::make_unique(params); } + +void SteadyStateProblemBuilder::RegisterGridFunctions() { + std::vector gridfunction_names; + for (auto const &[name, gf] : this->problem->gridfunctions) { + gridfunction_names.push_back(name); + } +} } // namespace hephaestus diff --git a/src/problem_builders/steady_state_problem_builder.hpp b/src/problem_builders/steady_state_problem_builder.hpp index d2dccefde..a0d559a6c 100644 --- a/src/problem_builders/steady_state_problem_builder.hpp +++ b/src/problem_builders/steady_state_problem_builder.hpp @@ -38,15 +38,15 @@ class SteadyStateProblemBuilder : public hephaestus::ProblemBuilder { virtual void RegisterFESpaces() override{}; - virtual void RegisterGridFunctions() override{}; + virtual void RegisterGridFunctions() override; virtual void RegisterAuxSolvers() override{}; virtual void RegisterCoefficients() override{}; - virtual void InitializeKernels() override; + virtual void ConstructEquationSystem() override; - virtual void ConstructEquationSystem() override{}; + virtual void InitializeKernels() override; virtual void ConstructOperator() override; From 5f44da1422679902a3bfc6711a2b3ddc91e4a257 Mon Sep 17 00:00:00 2001 From: billellis Date: Thu, 30 Nov 2023 16:24:23 +0000 Subject: [PATCH 29/41] Added SetEquationSystem method to equation_system_operator.cpp --- src/formulations/equation_system_operator.cpp | 8 ++++++++ src/formulations/equation_system_operator.hpp | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/formulations/equation_system_operator.cpp b/src/formulations/equation_system_operator.cpp index 9f5e2ed4f..8a4fb0264 100644 --- a/src/formulations/equation_system_operator.cpp +++ b/src/formulations/equation_system_operator.cpp @@ -3,6 +3,7 @@ namespace hephaestus { void EquationSystemOperator::SetGridFunctions() { + state_var_names = _equation_system->var_names; local_test_vars = populateVectorFromNamedFieldsMap( _gridfunctions, state_var_names); @@ -36,6 +37,12 @@ void EquationSystemOperator::SetGridFunctions() { } }; +void EquationSystemOperator::SetEquationSystem( + hephaestus::EquationSystem *equation_system) { + _equation_system = equation_system; + +} + void EquationSystemOperator::Init(mfem::Vector &X) { // Define material property coefficients for (unsigned int ind = 0; ind < local_test_vars.size(); ++ind) { @@ -43,6 +50,7 @@ void EquationSystemOperator::Init(mfem::Vector &X) { const_cast(X), true_offsets[ind]); } + _equation_system->buildEquationSystem(_bc_map, _sources); } void EquationSystemOperator::Solve(mfem::Vector &X) {} diff --git a/src/formulations/equation_system_operator.hpp b/src/formulations/equation_system_operator.hpp index ef64a2075..553b46b23 100644 --- a/src/formulations/equation_system_operator.hpp +++ b/src/formulations/equation_system_operator.hpp @@ -20,8 +20,9 @@ class EquationSystemOperator : public mfem::Operator { _coefficients(coefficients), _solver_options(solver_options){}; ~EquationSystemOperator(){}; - + virtual void SetGridFunctions(); + virtual void SetEquationSystem(hephaestus::EquationSystem *equation_system); virtual void Init(mfem::Vector &X); virtual void Solve(mfem::Vector &X); void Mult(const mfem::Vector &x, mfem::Vector &y) const override{}; @@ -39,6 +40,8 @@ class EquationSystemOperator : public mfem::Operator { std::vector local_test_vars; + hephaestus::EquationSystem *_equation_system; + int myid_; int num_procs_; mfem::ParMesh *pmesh_; From c060325fdd51484c89ee5b0494f82a37932dafce Mon Sep 17 00:00:00 2001 From: billellis Date: Thu, 30 Nov 2023 16:24:54 +0000 Subject: [PATCH 30/41] Implemented hephaestus equation system functionality into thermal expansion example. Currently only works with one variable however --- .../thermal_expansion_formulation.cpp | 246 ++++++++++-------- .../thermal_expansion_formulation.hpp | 8 +- 2 files changed, 149 insertions(+), 105 deletions(-) diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp index 52159a156..ae51ee01b 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp @@ -13,7 +13,6 @@ ThermalExpansionFormulation::ThermalExpansionFormulation() : SteadyStateFormulat stress_free_temp_coef_name = std::string("stress_free_temp"); thermal_expansion_bilin_coef_name = std::string("thermal_expansion_bilin_coef"); thermal_expansion_lin_coef_name = std::string("thermal_expansion_lin_coef"); - } void ThermalExpansionFormulation::RegisterCoefficients() { @@ -60,17 +59,20 @@ void ThermalExpansionFormulation::RegisterCoefficients() { } } -// void ThermalExpansionFormulation::ConstructEquationSystem() { -// hephaestus::InputParameters weak_form_params; -// weak_form_params.SetParam("TempVarName", temp_var_name); -// weak_form_params.SetParam("DisplacementVarName", displacement_var_name); -// weak_form_params.SetParam("StressFreeTempVarName", stress_free_temp_coef_name); -// weak_form_params.SetParam("LameParamCoefName", lame_param_coef_name); -// weak_form_params.SetParam("ShearModulusCoefName", shear_modulus_coef_name); -// weak_form_params.SetParam("ThermalExpansionCoefName", thermal_expansion_coef_name); -// this->GetProblem()->ss_equation_system = -// std::make_unique(weak_form_params); -// } +void ThermalExpansionFormulation::ConstructEquationSystem() { + hephaestus::InputParameters weak_form_params; + weak_form_params.SetParam("TempVarName", temp_var_name); + weak_form_params.SetParam("DisplacementVarName", displacement_var_name); + weak_form_params.SetParam("StressFreeTempCoefName", stress_free_temp_coef_name); + weak_form_params.SetParam("LameParamCoefName", lame_param_coef_name); + weak_form_params.SetParam("ShearModulusCoefName", shear_modulus_coef_name); + weak_form_params.SetParam("ThermalExpansionCoefName", thermal_expansion_coef_name); + weak_form_params.SetParam("ThermalConductivityCoefName", thermal_conductivity_coef_name); + weak_form_params.SetParam("ThermalExpansionBilinCoefName", thermal_expansion_bilin_coef_name); + weak_form_params.SetParam("ThermalExpansionLinCoefName", thermal_expansion_lin_coef_name); + this->GetProblem()->eq_sys = + std::make_unique(weak_form_params); +} void ThermalExpansionFormulation::ConstructOperator() { @@ -90,10 +92,8 @@ void ThermalExpansionFormulation::ConstructOperator() { this->problem->gridfunctions, this->problem->bc_map, this->problem->coefficients, this->problem->sources, this->problem->solver_options); - // this->problem->eq_sys_operator->SetEquationSystem( - // this-> - - ->eq_sys.get()); + this->problem->eq_sys_operator->SetEquationSystem( + this->problem->eq_sys.get()); this->problem->eq_sys_operator->SetGridFunctions(); }; @@ -126,6 +126,15 @@ void ThermalExpansionFormulation::RegisterGridFunctions() { +/** + * OPERATOR + * + * + * + * + * + * +*/ ThermalExpansionOperator::ThermalExpansionOperator( mfem::ParMesh &pmesh, hephaestus::FESpaces &fespaces, hephaestus::GridFunctions &gridfunctions, hephaestus::BCMap &bc_map, @@ -143,19 +152,20 @@ ThermalExpansionOperator::ThermalExpansionOperator( stress_free_temp_coef_name(solver_options.GetParam("StressFreeTempCoefName")) {} -void ThermalExpansionOperator::SetGridFunctions() { - state_var_names.push_back(temp_var_name); - state_var_names.push_back(displacement_var_name); + +// This method no longer needs to be overridden now that eq is being used +// void ThermalExpansionOperator::SetGridFunctions() { +// state_var_names.push_back(temp_var_name); +// state_var_names.push_back(displacement_var_name); - EquationSystemOperator::SetGridFunctions(); +// EquationSystemOperator::SetGridFunctions(); - t_ = new mfem::ParGridFunction(local_test_vars.at(0)->ParFESpace()); - u_ = new mfem::ParGridFunction(local_test_vars.at(1)->ParFESpace()); -}; +// t_ = new mfem::ParGridFunction(local_test_vars.at(0)->ParFESpace()); +// u_ = new mfem::ParGridFunction(local_test_vars.at(1)->ParFESpace()); +// }; void ThermalExpansionOperator::Init(mfem::Vector &X) { EquationSystemOperator::Init(X); - lameCoef_ = _coefficients.scalars.Get(lame_coef_name); shearModulusCoef_ = _coefficients.scalars.Get(shear_modulus_coef_name); thermalExpansionCoef_ = _coefficients.scalars.Get(thermal_expansion_coef_name); @@ -165,85 +175,112 @@ void ThermalExpansionOperator::Init(mfem::Vector &X) { void ThermalExpansionOperator::Solve(mfem::Vector &X) { - mfem::Array2D OpBlocks; - OpBlocks.DeleteAll(); - OpBlocks.SetSize(2,2); - OpBlocks(0, 0) = new mfem::HypreParMatrix; - OpBlocks(1, 1) = new mfem::HypreParMatrix; - OpBlocks(1, 0) = new mfem::HypreParMatrix; - OpBlocks(0, 1) = nullptr; + _equation_system->FormLinearSystem(blockA, trueX, trueRhs); + + preconditioner = new mfem::HypreBoomerAMG(*blockA.As()); + solver = new mfem::HyprePCG(MPI_COMM_WORLD); + solver->SetOperator(*blockA.As()); + solver->SetPreconditioner(*preconditioner); + solver->Mult(trueRhs, trueX); + _equation_system->RecoverFEMSolution(trueX, _gridfunctions); + +// solver.SetOperator(*A1); +// solver.SetPreconditioner(*amg); +// solver.SetPrintLevel(2); +// solver.Mult(trueRhs, trueX); +} + +// void ThermalExpansionOperator::Solve(mfem::Vector &X) { + +// mfem::Array2D OpBlocks; +// OpBlocks.DeleteAll(); +// OpBlocks.SetSize(2,2); +// OpBlocks(0, 0) = new mfem::HypreParMatrix; +// OpBlocks(1, 1) = new mfem::HypreParMatrix; +// OpBlocks(1, 0) = new mfem::HypreParMatrix; +// OpBlocks(0, 1) = nullptr; - mfem::Array offsets({0, t_->ParFESpace()->TrueVSize(), - t_->ParFESpace()->TrueVSize() + u_->ParFESpace()->TrueVSize()}); +// mfem::Array offsets({0, t_->ParFESpace()->TrueVSize(), +// t_->ParFESpace()->TrueVSize() + u_->ParFESpace()->TrueVSize()}); - // Apply dirichlet BC's to temperature and displacement grid functions - _bc_map.applyEssentialBCs(temp_var_name, ess_temp_tdofs_, *t_, - pmesh_); +// // Apply dirichlet BC's to temperature and displacement grid functions +// _bc_map.applyEssentialBCs(temp_var_name, ess_temp_tdofs_, *t_, +// pmesh_); - _bc_map.applyEssentialBCs(displacement_var_name, ess_disp_tdofs_, *u_, - pmesh_); - - // Set up bilinear forms - aMixed_ = new mfem::ParMixedBilinearForm(t_->ParFESpace(), u_->ParFESpace()); - a1_ = new mfem::ParBilinearForm(t_->ParFESpace()); - a2_ = new mfem::ParBilinearForm(u_->ParFESpace()); - // Set up linear forms - b1_ = new mfem::ParLinearForm(t_->ParFESpace()); - b2_ = new mfem::ParLinearForm(u_->ParFESpace()); - - - // Manipulate existing coefficients to get terms needed for thermal expansion. - // Bilinear Form Coef: - α * (3λ + 2μ) - // Linear Form Coef: T_{stress free} * α * (3λ + 2μ) - mfem::SumCoefficient materialTerm(*lameCoef_, *shearModulusCoef_, 3, 2); - mfem::SumCoefficient thexpStressFreeTemp(*thermalExpansionCoef_, *stressFreeTempCoef_); - mfem::ProductCoefficient bilinearFormCoefPositive(*thermalExpansionCoef_, materialTerm); - bilinearFormCoef_ = new mfem::ProductCoefficient(-1, bilinearFormCoefPositive); - linearFormCoef_ = new mfem::ProductCoefficient(*stressFreeTempCoef_, materialTerm); +// _bc_map.applyEssentialBCs(displacement_var_name, ess_disp_tdofs_, *u_, +// pmesh_); + +// // Set up bilinear forms +// aMixed_ = new mfem::ParMixedBilinearForm(t_->ParFESpace(), u_->ParFESpace()); +// a1_ = new mfem::ParBilinearForm(t_->ParFESpace()); +// a2_ = new mfem::ParBilinearForm(u_->ParFESpace()); +// // Set up linear forms +// b1_ = new mfem::ParLinearForm(t_->ParFESpace()); +// b2_ = new mfem::ParLinearForm(u_->ParFESpace()); + + +// // Manipulate existing coefficients to get terms needed for thermal expansion. +// // Bilinear Form Coef: - α * (3λ + 2μ) +// // Linear Form Coef: T_{stress free} * α * (3λ + 2μ) +// mfem::SumCoefficient materialTerm(*lameCoef_, *shearModulusCoef_, 3, 2); +// mfem::SumCoefficient thexpStressFreeTemp(*thermalExpansionCoef_, *stressFreeTempCoef_); +// mfem::ProductCoefficient bilinearFormCoefPositive(*thermalExpansionCoef_, materialTerm); +// bilinearFormCoef_ = new mfem::ProductCoefficient(-1, bilinearFormCoefPositive); +// linearFormCoef_ = new mfem::ProductCoefficient(*stressFreeTempCoef_, materialTerm); - a1_->AddDomainIntegrator(new mfem::DiffusionIntegrator(*thermalConductivityCoef_)); - a2_->AddDomainIntegrator(new mfem::ElasticityIntegrator(*lameCoef_, *shearModulusCoef_)); - aMixed_->AddDomainIntegrator(new mfem::MixedWeakDivergenceIntegrator(*bilinearFormCoef_)); +// a1_->AddDomainIntegrator(new mfem::DiffusionIntegrator(*thermalConductivityCoef_)); +// a2_->AddDomainIntegrator(new mfem::ElasticityIntegrator(*lameCoef_, *shearModulusCoef_)); +// aMixed_->AddDomainIntegrator(new mfem::MixedWeakDivergenceIntegrator(*bilinearFormCoef_)); - b2_->AddDomainIntegrator(new mfem::DomainLFH1DivIntegrator(*linearFormCoef_)); +// b2_->AddDomainIntegrator(new mfem::DomainLFH1DivIntegrator(*linearFormCoef_)); - a1_->Assemble(); - a1_->Finalize(); +// a1_->Assemble(); +// a1_->Finalize(); - a2_->Assemble(); - a2_->Finalize(); +// a2_->Assemble(); +// a2_->Finalize(); - aMixed_->Assemble(); - aMixed_->Finalize(); +// aMixed_->Assemble(); +// aMixed_->Finalize(); - b1_->Assemble(); - b2_->Assemble(); +// b1_->Assemble(); +// b2_->Assemble(); - a1_->FormLinearSystem(ess_temp_tdofs_, *t_, *b1_, *OpBlocks(0, 0), trueX.GetBlock(0), trueRhs.GetBlock(0)); - a2_->FormLinearSystem(ess_disp_tdofs_, *u_, *b2_, *OpBlocks(1, 1), trueX.GetBlock(1), trueRhs.GetBlock(1)); - aMixed_->FormRectangularLinearSystem(ess_temp_tdofs_, ess_disp_tdofs_, *t_, *b2_, *OpBlocks(1, 0), trueX.GetBlock(0), trueRhs.GetBlock(1)); - - mfem::HypreParMatrix *A1 = mfem::HypreParMatrixFromBlocks(OpBlocks); - mfem::HypreBoomerAMG *amg = new mfem::HypreBoomerAMG(*A1); - mfem::HyprePCG solver(MPI_COMM_WORLD); - solver.SetOperator(*A1); - solver.SetPreconditioner(*amg); - solver.SetPrintLevel(2); - solver.Mult(trueRhs, trueX); - - delete(amg); - // delete(A1); - OpBlocks.DeleteAll(); - - a1_->RecoverFEMSolution(trueX.GetBlock(0), *b1_, *t_); - a2_->RecoverFEMSolution(trueX.GetBlock(1), *b2_, *u_); +// a1_->FormLinearSystem(ess_temp_tdofs_, *t_, *b1_, *OpBlocks(0, 0), trueX.GetBlock(0), trueRhs.GetBlock(0)); +// a2_->FormLinearSystem(ess_disp_tdofs_, *u_, *b2_, *OpBlocks(1, 1), trueX.GetBlock(1), trueRhs.GetBlock(1)); +// aMixed_->FormRectangularLinearSystem(ess_temp_tdofs_, ess_disp_tdofs_, *t_, *b2_, *OpBlocks(1, 0), trueX.GetBlock(0), trueRhs.GetBlock(1)); + +// mfem::HypreParMatrix *A1 = mfem::HypreParMatrixFromBlocks(OpBlocks); +// mfem::HypreBoomerAMG *amg = new mfem::HypreBoomerAMG(*A1); +// mfem::HyprePCG solver(MPI_COMM_WORLD); +// solver.SetOperator(*A1); +// solver.SetPreconditioner(*amg); +// solver.SetPrintLevel(2); +// solver.Mult(trueRhs, trueX); + +// delete(amg); +// // delete(A1); +// OpBlocks.DeleteAll(); + +// a1_->RecoverFEMSolution(trueX.GetBlock(0), *b1_, *t_); +// a2_->RecoverFEMSolution(trueX.GetBlock(1), *b2_, *u_); - *_gridfunctions.Get(state_var_names.at(0)) = *t_; - *_gridfunctions.Get(state_var_names.at(1)) = *u_; -} +// *_gridfunctions.Get(state_var_names.at(0)) = *t_; +// *_gridfunctions.Get(state_var_names.at(1)) = *u_; +// } + + -// Set up equation system +/** + * EQUATION SYSTEM + * + * + * + * + * + * +*/ ThermalExpansionEquationSystem::ThermalExpansionEquationSystem( const hephaestus::InputParameters ¶ms) : EquationSystem(params), @@ -252,7 +289,9 @@ ThermalExpansionEquationSystem::ThermalExpansionEquationSystem( stress_free_temp_coef_name(params.GetParam("StressFreeTempCoefName")), thermal_conductivity_coef_name(params.GetParam("ThermalConductivityCoefName")), lame_param_coef_name(params.GetParam("LameParamCoefName")), - shear_modulus_coef_name(params.GetParam("ShearModulusCoefName")) {} + shear_modulus_coef_name(params.GetParam("ShearModulusCoefName")), + thermal_expansion_bilin_coef_name(params.GetParam("ThermalExpansionBilinCoefName")), + thermal_expansion_lin_coef_name(params.GetParam("ThermalExpansionLinCoefName")) {} void ThermalExpansionEquationSystem::Init(hephaestus::GridFunctions &gridfunctions, const hephaestus::FESpaces &fespaces, @@ -263,24 +302,27 @@ void ThermalExpansionEquationSystem::Init(hephaestus::GridFunctions &gridfunctio } void ThermalExpansionEquationSystem::addKernels() { + // Add missing variable names + addVariableNameIfMissing(temp_var_name); + // addVariableNameIfMissing(displacement_var_name); - hephaestus::InputParameters mixedWeakDivergenceParams; - mixedWeakDivergenceParams.SetParam("CoefficientName", thermal_expansion_bilin_coef_name); - addKernel(temp_var_name, displacement_var_name, - new hephaestus::MixedWeakDivergenceKernel(mixedWeakDivergenceParams)); + // hephaestus::InputParameters mixedWeakDivergenceParams; + // mixedWeakDivergenceParams.SetParam("CoefficientName", thermal_expansion_bilin_coef_name); + // addKernel(temp_var_name, displacement_var_name, + // new hephaestus::MixedWeakDivergenceKernel(mixedWeakDivergenceParams)); hephaestus::InputParameters diffusionIntegratorParams; diffusionIntegratorParams.SetParam("CoefficientName", thermal_conductivity_coef_name); addKernel(temp_var_name, new hephaestus::DiffusionKernel(diffusionIntegratorParams)); - hephaestus::InputParameters domainDivergenceLFParams; - domainDivergenceLFParams.SetParam("CoefficientName", thermal_expansion_lin_coef_name); - addKernel(temp_var_name, new hephaestus::DomainDivergenceLFKernel(domainDivergenceLFParams)); + // hephaestus::InputParameters domainDivergenceLFParams; + // domainDivergenceLFParams.SetParam("CoefficientName", thermal_expansion_lin_coef_name); + // addKernel(temp_var_name, new hephaestus::DomainDivergenceLFKernel(domainDivergenceLFParams)); - hephaestus::InputParameters elasticityIntegratorParams; - elasticityIntegratorParams.SetParam("LameParameterCoefName", lame_param_coef_name); - elasticityIntegratorParams.SetParam("ShearModulusCoefName", shear_modulus_coef_name); - addKernel(displacement_var_name, new hephaestus::LinearElasticityKernel(elasticityIntegratorParams)); + // hephaestus::InputParameters elasticityIntegratorParams; + // elasticityIntegratorParams.SetParam("LameParameterCoefName", lame_param_coef_name); + // elasticityIntegratorParams.SetParam("ShearModulusCoefName", shear_modulus_coef_name); + // addKernel(displacement_var_name, new hephaestus::LinearElasticityKernel(elasticityIntegratorParams)); } } //hephaestus diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp index d2f610a2c..42673c165 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp @@ -12,7 +12,7 @@ class ThermalExpansionFormulation : public SteadyStateFormulation { public: ThermalExpansionFormulation(); - // virtual void ConstructEquationSystem() override {}; + virtual void ConstructEquationSystem() override; virtual void ConstructOperator() override; @@ -27,7 +27,7 @@ class ThermalExpansionFormulation : public SteadyStateFormulation { }; -// Do this later +// Equation System class ThermalExpansionEquationSystem : public EquationSystem { public: ThermalExpansionEquationSystem(const hephaestus::InputParameters ¶ms); @@ -54,7 +54,7 @@ class ThermalExpansionOperator : public EquationSystemOperator { ~ThermalExpansionOperator(){}; - virtual void SetGridFunctions() override; + // virtual void SetGridFunctions() override; virtual void Init(mfem::Vector &X) override; virtual void Solve(mfem::Vector &X) override; @@ -69,6 +69,8 @@ class ThermalExpansionOperator : public EquationSystemOperator { mfem::ParLinearForm *b1_, *b2_; mfem::ParBilinearForm *a1_, *a2_; mfem::ParMixedBilinearForm *aMixed_; // + mfem::HypreBoomerAMG *preconditioner; + mfem::HyprePCG *solver; mfem::Coefficient *thermalConductivityCoef_; mfem::Coefficient *lameCoef_; // Lame's first parameter From 195312d80eb94d32819aff2d0ca5b6dd6d3bbc9c Mon Sep 17 00:00:00 2001 From: billellis Date: Thu, 30 Nov 2023 16:25:26 +0000 Subject: [PATCH 31/41] updated thermal expansion example to use hephaestus equation_system functionality --- examples/ThermalExpansion/ThermalExpansionExample.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/ThermalExpansion/ThermalExpansionExample.cpp b/examples/ThermalExpansion/ThermalExpansionExample.cpp index 86c5b0cb2..cc4631ba2 100644 --- a/examples/ThermalExpansion/ThermalExpansionExample.cpp +++ b/examples/ThermalExpansion/ThermalExpansionExample.cpp @@ -23,7 +23,7 @@ hephaestus::Coefficients defineCoefficients(){ true); coefficients.scalars.Register("stress_free_temp", - new mfem::ConstantCoefficient(0.02), + new mfem::ConstantCoefficient(0.0), true); @@ -42,7 +42,6 @@ hephaestus::Outputs defineOutputs() { hephaestus::BCMap defineBoundaries() { hephaestus::BCMap boundaries; -; mfem::ConstantCoefficient *cold = new mfem::ConstantCoefficient(300.00); mfem::ConstantCoefficient *hot = new mfem::ConstantCoefficient(500.00); // mfem::VectorConstantCoefficient *zero = new mfem::VectorConstantCoefficient(mfem::Vector({0, 0, 0})); @@ -56,7 +55,7 @@ hephaestus::BCMap defineBoundaries() { boundaries.Register("thermal_boundary_one", new hephaestus::DirichletBC("temperature", therm_bound_one_arr, cold), true); boundaries.Register("thermal_boundary_two", new hephaestus::DirichletBC("temperature", therm_bound_two_arr, hot), true); - boundaries.Register("fixed_displacement", new hephaestus::VectorDirichletBC("displacement", fixed_disp_arr, new mfem::VectorConstantCoefficient(mfem::Vector({0, 0, 0}))), true); + boundaries.Register("fixed_displacement", new hephaestus::VectorDirichletBC("displacement", fixed_disp_arr, new mfem::VectorConstantCoefficient(mfem::Vector({0, 0, 0})), nullptr, hephaestus::VectorDirichletBC::APPLY_TYPE::STANDARD), true); return boundaries; } @@ -101,7 +100,7 @@ int main(int argc, char *argv[]) { problem_builder->SetSolverOptions(solver_options); hephaestus::ProblemBuildSequencer sequencer(problem_builder); - sequencer.ConstructOperatorProblem(); + sequencer.ConstructEquationSystemProblem(); std::unique_ptr problem = problem_builder->ReturnProblem(); hephaestus::InputParameters exec_params; From baaf0fcb8a3be7694b0058cc696aa6c0cea94c33 Mon Sep 17 00:00:00 2001 From: billellis Date: Thu, 30 Nov 2023 16:26:49 +0000 Subject: [PATCH 32/41] Made APPLY_TYPE enum public in vector dirichlet bc, so that it is accessible in the examples --- src/boundary_conditions/Essential/vector_dirichlet_bc.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/boundary_conditions/Essential/vector_dirichlet_bc.hpp b/src/boundary_conditions/Essential/vector_dirichlet_bc.hpp index bcd3ecd0d..196dca574 100644 --- a/src/boundary_conditions/Essential/vector_dirichlet_bc.hpp +++ b/src/boundary_conditions/Essential/vector_dirichlet_bc.hpp @@ -5,7 +5,7 @@ namespace hephaestus { class VectorDirichletBC : public EssentialBC { -protected: +public: enum APPLY_TYPE { STANDARD, From 1e092a78e36646a84ff2120b9ab3d6c5dc5532ef Mon Sep 17 00:00:00 2001 From: billellis Date: Thu, 30 Nov 2023 17:24:19 +0000 Subject: [PATCH 33/41] Fixed spelling mistake in linear elasticity kernel --- src/kernels/linear_elasticity_kernel.cpp | 4 ++-- src/kernels/linear_elasticity_kernel.hpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/kernels/linear_elasticity_kernel.cpp b/src/kernels/linear_elasticity_kernel.cpp index ec0189aa1..eab170134 100644 --- a/src/kernels/linear_elasticity_kernel.cpp +++ b/src/kernels/linear_elasticity_kernel.cpp @@ -5,7 +5,7 @@ namespace hephaestus { LinearElasticityKernel::LinearElasticityKernel( const hephaestus::InputParameters ¶ms) : Kernel(params), - lame_paramter_name(params.GetParam("LameParameterCoefName")), + lame_parameter_name(params.GetParam("LameParameterCoefName")), shear_modulus_name(params.GetParam("ShearModulusCoefName")) {} @@ -14,7 +14,7 @@ void LinearElasticityKernel::Init(hephaestus::GridFunctions &gridfunctions, hephaestus::BCMap &bc_map, hephaestus::Coefficients &coefficients) { - lame_parameter = coefficients.scalars.Get(lame_paramter_name); + lame_parameter = coefficients.scalars.Get(lame_parameter_name); shear_modulus = coefficients.scalars.Get(shear_modulus_name); } diff --git a/src/kernels/linear_elasticity_kernel.hpp b/src/kernels/linear_elasticity_kernel.hpp index a087f7876..ff1aaa519 100644 --- a/src/kernels/linear_elasticity_kernel.hpp +++ b/src/kernels/linear_elasticity_kernel.hpp @@ -16,7 +16,7 @@ class LinearElasticityKernel : public Kernel { hephaestus::BCMap &bc_map, hephaestus::Coefficients &coefficients) override; virtual void Apply(mfem::ParBilinearForm *blf) override; - std::string lame_paramter_name, shear_modulus_name; + std::string lame_parameter_name, shear_modulus_name; mfem::Coefficient *lame_parameter, *shear_modulus; }; From 5c906452f7f5bac86ca02c46ca176b9d33570026 Mon Sep 17 00:00:00 2001 From: billellis Date: Thu, 30 Nov 2023 17:25:07 +0000 Subject: [PATCH 34/41] Removed old commented out code --- .../thermal_expansion_formulation.cpp | 113 ++---------------- 1 file changed, 13 insertions(+), 100 deletions(-) diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp index ae51ee01b..9ecd8aa72 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp @@ -119,7 +119,7 @@ void ThermalExpansionFormulation::RegisterGridFunctions() { } AddFESpace(std::string("_DisplacementFESpace"), std::string("H1_"), 3, mfem::Ordering::byVDIM); AddGridFunction(displacement_var_name, std::string("_DisplacementFESpace")); - }; + }; // Register time derivatives SteadyStateProblemBuilder::RegisterGridFunctions(); }; @@ -183,95 +183,8 @@ void ThermalExpansionOperator::Solve(mfem::Vector &X) { solver->SetPreconditioner(*preconditioner); solver->Mult(trueRhs, trueX); _equation_system->RecoverFEMSolution(trueX, _gridfunctions); - -// solver.SetOperator(*A1); -// solver.SetPreconditioner(*amg); -// solver.SetPrintLevel(2); -// solver.Mult(trueRhs, trueX); } -// void ThermalExpansionOperator::Solve(mfem::Vector &X) { - -// mfem::Array2D OpBlocks; -// OpBlocks.DeleteAll(); -// OpBlocks.SetSize(2,2); -// OpBlocks(0, 0) = new mfem::HypreParMatrix; -// OpBlocks(1, 1) = new mfem::HypreParMatrix; -// OpBlocks(1, 0) = new mfem::HypreParMatrix; -// OpBlocks(0, 1) = nullptr; - - -// mfem::Array offsets({0, t_->ParFESpace()->TrueVSize(), -// t_->ParFESpace()->TrueVSize() + u_->ParFESpace()->TrueVSize()}); - -// // Apply dirichlet BC's to temperature and displacement grid functions -// _bc_map.applyEssentialBCs(temp_var_name, ess_temp_tdofs_, *t_, -// pmesh_); - -// _bc_map.applyEssentialBCs(displacement_var_name, ess_disp_tdofs_, *u_, -// pmesh_); - -// // Set up bilinear forms -// aMixed_ = new mfem::ParMixedBilinearForm(t_->ParFESpace(), u_->ParFESpace()); -// a1_ = new mfem::ParBilinearForm(t_->ParFESpace()); -// a2_ = new mfem::ParBilinearForm(u_->ParFESpace()); -// // Set up linear forms -// b1_ = new mfem::ParLinearForm(t_->ParFESpace()); -// b2_ = new mfem::ParLinearForm(u_->ParFESpace()); - - -// // Manipulate existing coefficients to get terms needed for thermal expansion. -// // Bilinear Form Coef: - α * (3λ + 2μ) -// // Linear Form Coef: T_{stress free} * α * (3λ + 2μ) -// mfem::SumCoefficient materialTerm(*lameCoef_, *shearModulusCoef_, 3, 2); -// mfem::SumCoefficient thexpStressFreeTemp(*thermalExpansionCoef_, *stressFreeTempCoef_); -// mfem::ProductCoefficient bilinearFormCoefPositive(*thermalExpansionCoef_, materialTerm); -// bilinearFormCoef_ = new mfem::ProductCoefficient(-1, bilinearFormCoefPositive); -// linearFormCoef_ = new mfem::ProductCoefficient(*stressFreeTempCoef_, materialTerm); - -// a1_->AddDomainIntegrator(new mfem::DiffusionIntegrator(*thermalConductivityCoef_)); -// a2_->AddDomainIntegrator(new mfem::ElasticityIntegrator(*lameCoef_, *shearModulusCoef_)); -// aMixed_->AddDomainIntegrator(new mfem::MixedWeakDivergenceIntegrator(*bilinearFormCoef_)); - -// b2_->AddDomainIntegrator(new mfem::DomainLFH1DivIntegrator(*linearFormCoef_)); - -// a1_->Assemble(); -// a1_->Finalize(); - -// a2_->Assemble(); -// a2_->Finalize(); - -// aMixed_->Assemble(); -// aMixed_->Finalize(); - -// b1_->Assemble(); -// b2_->Assemble(); - -// a1_->FormLinearSystem(ess_temp_tdofs_, *t_, *b1_, *OpBlocks(0, 0), trueX.GetBlock(0), trueRhs.GetBlock(0)); -// a2_->FormLinearSystem(ess_disp_tdofs_, *u_, *b2_, *OpBlocks(1, 1), trueX.GetBlock(1), trueRhs.GetBlock(1)); -// aMixed_->FormRectangularLinearSystem(ess_temp_tdofs_, ess_disp_tdofs_, *t_, *b2_, *OpBlocks(1, 0), trueX.GetBlock(0), trueRhs.GetBlock(1)); - -// mfem::HypreParMatrix *A1 = mfem::HypreParMatrixFromBlocks(OpBlocks); -// mfem::HypreBoomerAMG *amg = new mfem::HypreBoomerAMG(*A1); -// mfem::HyprePCG solver(MPI_COMM_WORLD); -// solver.SetOperator(*A1); -// solver.SetPreconditioner(*amg); -// solver.SetPrintLevel(2); -// solver.Mult(trueRhs, trueX); - -// delete(amg); -// // delete(A1); -// OpBlocks.DeleteAll(); - -// a1_->RecoverFEMSolution(trueX.GetBlock(0), *b1_, *t_); -// a2_->RecoverFEMSolution(trueX.GetBlock(1), *b2_, *u_); - -// *_gridfunctions.Get(state_var_names.at(0)) = *t_; -// *_gridfunctions.Get(state_var_names.at(1)) = *u_; -// } - - - /** * EQUATION SYSTEM * @@ -304,25 +217,25 @@ void ThermalExpansionEquationSystem::Init(hephaestus::GridFunctions &gridfunctio void ThermalExpansionEquationSystem::addKernels() { // Add missing variable names addVariableNameIfMissing(temp_var_name); - // addVariableNameIfMissing(displacement_var_name); + addVariableNameIfMissing(displacement_var_name); - // hephaestus::InputParameters mixedWeakDivergenceParams; - // mixedWeakDivergenceParams.SetParam("CoefficientName", thermal_expansion_bilin_coef_name); - // addKernel(temp_var_name, displacement_var_name, - // new hephaestus::MixedWeakDivergenceKernel(mixedWeakDivergenceParams)); + hephaestus::InputParameters mixedWeakDivergenceParams; + mixedWeakDivergenceParams.SetParam("CoefficientName", thermal_expansion_bilin_coef_name); + addKernel(temp_var_name, displacement_var_name, + new hephaestus::MixedWeakDivergenceKernel(mixedWeakDivergenceParams)); hephaestus::InputParameters diffusionIntegratorParams; diffusionIntegratorParams.SetParam("CoefficientName", thermal_conductivity_coef_name); addKernel(temp_var_name, new hephaestus::DiffusionKernel(diffusionIntegratorParams)); - // hephaestus::InputParameters domainDivergenceLFParams; - // domainDivergenceLFParams.SetParam("CoefficientName", thermal_expansion_lin_coef_name); - // addKernel(temp_var_name, new hephaestus::DomainDivergenceLFKernel(domainDivergenceLFParams)); + hephaestus::InputParameters domainDivergenceLFParams; + domainDivergenceLFParams.SetParam("CoefficientName", thermal_expansion_lin_coef_name); + addKernel(temp_var_name, new hephaestus::DomainDivergenceLFKernel(domainDivergenceLFParams)); - // hephaestus::InputParameters elasticityIntegratorParams; - // elasticityIntegratorParams.SetParam("LameParameterCoefName", lame_param_coef_name); - // elasticityIntegratorParams.SetParam("ShearModulusCoefName", shear_modulus_coef_name); - // addKernel(displacement_var_name, new hephaestus::LinearElasticityKernel(elasticityIntegratorParams)); + hephaestus::InputParameters elasticityIntegratorParams; + elasticityIntegratorParams.SetParam("LameParameterCoefName", lame_param_coef_name); + elasticityIntegratorParams.SetParam("ShearModulusCoefName", shear_modulus_coef_name); + addKernel(displacement_var_name, new hephaestus::LinearElasticityKernel(elasticityIntegratorParams)); } } //hephaestus From 44462841cf142ce839bc2a49993606b7315a2c00 Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 4 Dec 2023 15:48:03 +0000 Subject: [PATCH 35/41] Corrected coefficient setup --- .../thermal_expansion_formulation.cpp | 76 +++++++++++-------- .../thermal_expansion_formulation.hpp | 22 +----- 2 files changed, 46 insertions(+), 52 deletions(-) diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp index 9ecd8aa72..a505ad05b 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.cpp @@ -13,10 +13,11 @@ ThermalExpansionFormulation::ThermalExpansionFormulation() : SteadyStateFormulat stress_free_temp_coef_name = std::string("stress_free_temp"); thermal_expansion_bilin_coef_name = std::string("thermal_expansion_bilin_coef"); thermal_expansion_lin_coef_name = std::string("thermal_expansion_lin_coef"); + zero_coef_name = std::string("zero"); } void ThermalExpansionFormulation::RegisterCoefficients() { - + std::cout << "REGISTER" << std::endl; hephaestus::Coefficients &coefficients = this->GetProblem()->coefficients; if (!coefficients.scalars.Has(lame_param_coef_name)) { @@ -39,23 +40,35 @@ void ThermalExpansionFormulation::RegisterCoefficients() { MFEM_ABORT(thermal_conductivity_coef_name + " coefficient not found."); } - mfem::SumCoefficient materialTerm(*(coefficients.scalars.Get(lame_param_coef_name)), - *(coefficients.scalars.Get(shear_modulus_coef_name)), 3, 2); + if (!coefficients.scalars.Has(zero_coef_name)) { + MFEM_ABORT(zero_coef_name + " coefficient not found."); + } - mfem::SumCoefficient thexpStressFreeTemp(*(coefficients.scalars.Get(thermal_expansion_coef_name)), - *(coefficients.scalars.Get(stress_free_temp_coef_name))); + if (!coefficients.scalars.Has("materialTerm")) { + mfem::SumCoefficient* materialTerm = new mfem::SumCoefficient(*(coefficients.scalars.Get(lame_param_coef_name)), *(coefficients.scalars.Get(shear_modulus_coef_name)), 3, 2); + coefficients.scalars.Register("materialTerm", materialTerm, true); + } - mfem::ProductCoefficient bilinearFormCoefPositive(*(coefficients.scalars.Get(thermal_expansion_coef_name)), - materialTerm); + if (!coefficients.scalars.Has("thexpStressFreeTemp")) { + mfem::SumCoefficient* thexpStressFreeTemp = new mfem::SumCoefficient(*(coefficients.scalars.Get(thermal_expansion_coef_name)), *(coefficients.scalars.Get(stress_free_temp_coef_name))); + coefficients.scalars.Register("thexpStressFreeTemp", thexpStressFreeTemp, true); + } + if (!coefficients.scalars.Has("bilinearFormCoefPositive")) { + mfem::ProductCoefficient *bilinearFormCoefPositive = new mfem::ProductCoefficient(*(coefficients.scalars.Get(thermal_expansion_coef_name)), + *(coefficients.scalars.Get("materialTerm"))); + coefficients.scalars.Register("bilinearFormCoefPositive", bilinearFormCoefPositive, true); + } + if (!coefficients.scalars.Has(thermal_expansion_bilin_coef_name)) { coefficients.scalars.Register(thermal_expansion_bilin_coef_name, - new mfem::ProductCoefficient(-1, bilinearFormCoefPositive), true); + new mfem::ProductCoefficient(-1.0, *(coefficients.scalars.Get("bilinearFormCoefPositive"))), true); } if (!coefficients.scalars.Has(thermal_expansion_lin_coef_name)) { coefficients.scalars.Register(thermal_expansion_lin_coef_name, - new mfem::ProductCoefficient(*(coefficients.scalars.Get(stress_free_temp_coef_name)), materialTerm), true); + new mfem::ProductCoefficient(*(coefficients.scalars.Get("thexpStressFreeTemp")), + *(coefficients.scalars.Get("materialTerm"))), true); } } @@ -70,6 +83,7 @@ void ThermalExpansionFormulation::ConstructEquationSystem() { weak_form_params.SetParam("ThermalConductivityCoefName", thermal_conductivity_coef_name); weak_form_params.SetParam("ThermalExpansionBilinCoefName", thermal_expansion_bilin_coef_name); weak_form_params.SetParam("ThermalExpansionLinCoefName", thermal_expansion_lin_coef_name); + weak_form_params.SetParam("ZeroCoefName", zero_coef_name); this->GetProblem()->eq_sys = std::make_unique(weak_form_params); } @@ -86,6 +100,7 @@ void ThermalExpansionFormulation::ConstructOperator() { solver_options.SetParam("ThermalExpansionCoefName", thermal_expansion_coef_name); solver_options.SetParam("ThermalConductivityCoefName", thermal_conductivity_coef_name); solver_options.SetParam("StressFreeTempCoefName", stress_free_temp_coef_name); + solver_options.SetParam("ZeroCoefName", zero_coef_name); this->problem->eq_sys_operator = std::make_unique( *(this->problem->pmesh), this->problem->fespaces, @@ -142,14 +157,8 @@ ThermalExpansionOperator::ThermalExpansionOperator( hephaestus::InputParameters &solver_options) : EquationSystemOperator(pmesh, fespaces, gridfunctions, bc_map, coefficients, sources, - solver_options), - temp_var_name(solver_options.GetParam("TempVarName")), - displacement_var_name(solver_options.GetParam("DisplacementVarName")), - lame_coef_name(solver_options.GetParam("LameCoefName")), - shear_modulus_coef_name(solver_options.GetParam("ShearModulusCoefName")), - thermal_expansion_coef_name(solver_options.GetParam("ThermalExpansionCoefName")), - thermal_conductivity_coef_name(solver_options.GetParam("ThermalConductivityCoefName")), - stress_free_temp_coef_name(solver_options.GetParam("StressFreeTempCoefName")) {} + solver_options) + {} @@ -166,11 +175,6 @@ ThermalExpansionOperator::ThermalExpansionOperator( void ThermalExpansionOperator::Init(mfem::Vector &X) { EquationSystemOperator::Init(X); - lameCoef_ = _coefficients.scalars.Get(lame_coef_name); - shearModulusCoef_ = _coefficients.scalars.Get(shear_modulus_coef_name); - thermalExpansionCoef_ = _coefficients.scalars.Get(thermal_expansion_coef_name); - stressFreeTempCoef_ = _coefficients.scalars.Get(stress_free_temp_coef_name); - thermalConductivityCoef_ = _coefficients.scalars.Get(thermal_conductivity_coef_name); } void ThermalExpansionOperator::Solve(mfem::Vector &X) { @@ -178,9 +182,11 @@ void ThermalExpansionOperator::Solve(mfem::Vector &X) { _equation_system->FormLinearSystem(blockA, trueX, trueRhs); preconditioner = new mfem::HypreBoomerAMG(*blockA.As()); - solver = new mfem::HyprePCG(MPI_COMM_WORLD); - solver->SetOperator(*blockA.As()); + preconditioner->SetSystemsOptions(this->pmesh_->Dimension()); + solver = new mfem::HyprePCG(*blockA.As()); + solver->SetPreconditioner(*preconditioner); + solver->SetTol(1e-11); solver->Mult(trueRhs, trueX); _equation_system->RecoverFEMSolution(trueX, _gridfunctions); } @@ -204,7 +210,8 @@ ThermalExpansionEquationSystem::ThermalExpansionEquationSystem( lame_param_coef_name(params.GetParam("LameParamCoefName")), shear_modulus_coef_name(params.GetParam("ShearModulusCoefName")), thermal_expansion_bilin_coef_name(params.GetParam("ThermalExpansionBilinCoefName")), - thermal_expansion_lin_coef_name(params.GetParam("ThermalExpansionLinCoefName")) {} + thermal_expansion_lin_coef_name(params.GetParam("ThermalExpansionLinCoefName")) + {} void ThermalExpansionEquationSystem::Init(hephaestus::GridFunctions &gridfunctions, const hephaestus::FESpaces &fespaces, @@ -219,23 +226,28 @@ void ThermalExpansionEquationSystem::addKernels() { addVariableNameIfMissing(temp_var_name); addVariableNameIfMissing(displacement_var_name); - hephaestus::InputParameters mixedWeakDivergenceParams; - mixedWeakDivergenceParams.SetParam("CoefficientName", thermal_expansion_bilin_coef_name); - addKernel(temp_var_name, displacement_var_name, - new hephaestus::MixedWeakDivergenceKernel(mixedWeakDivergenceParams)); hephaestus::InputParameters diffusionIntegratorParams; diffusionIntegratorParams.SetParam("CoefficientName", thermal_conductivity_coef_name); addKernel(temp_var_name, new hephaestus::DiffusionKernel(diffusionIntegratorParams)); - hephaestus::InputParameters domainDivergenceLFParams; - domainDivergenceLFParams.SetParam("CoefficientName", thermal_expansion_lin_coef_name); - addKernel(temp_var_name, new hephaestus::DomainDivergenceLFKernel(domainDivergenceLFParams)); + hephaestus::InputParameters tempLFParams; + tempLFParams.SetParam("CoefficientName", zero_coef_name); + addKernel(temp_var_name, new hephaestus::DomainLFKernel(tempLFParams)); hephaestus::InputParameters elasticityIntegratorParams; elasticityIntegratorParams.SetParam("LameParameterCoefName", lame_param_coef_name); elasticityIntegratorParams.SetParam("ShearModulusCoefName", shear_modulus_coef_name); addKernel(displacement_var_name, new hephaestus::LinearElasticityKernel(elasticityIntegratorParams)); + + hephaestus::InputParameters domainDivergenceLFParams; + domainDivergenceLFParams.SetParam("CoefficientName", thermal_expansion_lin_coef_name); + addKernel(displacement_var_name, new hephaestus::DomainDivergenceLFKernel(domainDivergenceLFParams)); + + hephaestus::InputParameters mixedWeakDivergenceParams; + mixedWeakDivergenceParams.SetParam("CoefficientName", thermal_expansion_bilin_coef_name); + addKernel(temp_var_name, displacement_var_name, + new hephaestus::MixedWeakDivergenceKernel(mixedWeakDivergenceParams)); } } //hephaestus diff --git a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp index 42673c165..e0eb8d20f 100644 --- a/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp +++ b/src/formulations/ThermalExpansion/thermal_expansion_formulation.hpp @@ -23,7 +23,7 @@ class ThermalExpansionFormulation : public SteadyStateFormulation { protected: std::string temp_var_name, displacement_var_name, stress_free_temp_coef_name, lame_param_coef_name, shear_modulus_coef_name, thermal_expansion_coef_name, thermal_conductivity_coef_name, - thermal_expansion_bilin_coef_name, thermal_expansion_lin_coef_name; + thermal_expansion_bilin_coef_name, thermal_expansion_lin_coef_name, zero_coef_name; }; @@ -40,7 +40,7 @@ class ThermalExpansionEquationSystem : public EquationSystem { std::string temp_var_name, displacement_var_name, stress_free_temp_coef_name, lame_param_coef_name, shear_modulus_coef_name, - thermal_conductivity_coef_name, thermal_expansion_bilin_coef_name, thermal_expansion_lin_coef_name; + thermal_conductivity_coef_name, thermal_expansion_bilin_coef_name, thermal_expansion_lin_coef_name, zero_coef_name; }; class ThermalExpansionOperator : public EquationSystemOperator { @@ -61,26 +61,8 @@ class ThermalExpansionOperator : public EquationSystemOperator { // Method for manipulating existing coefficients to get the terms needed for the thermal expansion solve void MakeCoefficients(); - std::string temp_var_name, displacement_var_name, - stress_free_temp_coef_name, lame_coef_name, shear_modulus_coef_name, - thermal_expansion_coef_name, thermal_conductivity_coef_name, - thermal_expansion_bilin_coef_name, thermal_expansion_lin_coef_name; - mfem::ParGridFunction *u_, *t_; - mfem::ParLinearForm *b1_, *b2_; - mfem::ParBilinearForm *a1_, *a2_; - mfem::ParMixedBilinearForm *aMixed_; // mfem::HypreBoomerAMG *preconditioner; mfem::HyprePCG *solver; - - mfem::Coefficient *thermalConductivityCoef_; - mfem::Coefficient *lameCoef_; // Lame's first parameter - mfem::Coefficient *shearModulusCoef_; // Shear modulus - mfem::Coefficient *thermalExpansionCoef_; // Thermal expansion coefficient - mfem::Coefficient *stressFreeTempCoef_; // Stress free temperature - mfem::Coefficient *bilinearFormCoef_; // - mfem::Coefficient *linearFormCoef_; // - - mfem::Array ess_temp_tdofs_, ess_disp_tdofs_; }; // } // namespace hephaestus From 06b094ca983ca34035dd353194164da8f6be3b0c Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 4 Dec 2023 15:48:40 +0000 Subject: [PATCH 36/41] updated thermal expansion example --- .../ThermalExpansionExample.cpp | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/examples/ThermalExpansion/ThermalExpansionExample.cpp b/examples/ThermalExpansion/ThermalExpansionExample.cpp index cc4631ba2..cc96e3feb 100644 --- a/examples/ThermalExpansion/ThermalExpansionExample.cpp +++ b/examples/ThermalExpansion/ThermalExpansionExample.cpp @@ -7,7 +7,7 @@ hephaestus::Coefficients defineCoefficients(){ hephaestus::Coefficients coefficients; coefficients.scalars.Register("thermal_expansion_coef", - new mfem::ConstantCoefficient(0.02), + new mfem::ConstantCoefficient(1e-04), true); coefficients.scalars.Register("thermal_conductivity", @@ -15,14 +15,18 @@ hephaestus::Coefficients defineCoefficients(){ true); coefficients.scalars.Register("lame_param", - new mfem::ConstantCoefficient(0.02), + new mfem::ConstantCoefficient(10), true); coefficients.scalars.Register("shear_modulus", - new mfem::ConstantCoefficient(0.02), + new mfem::ConstantCoefficient(10), true); coefficients.scalars.Register("stress_free_temp", + new mfem::ConstantCoefficient(250), + true); + + coefficients.scalars.Register("zero", new mfem::ConstantCoefficient(0.0), true); @@ -31,10 +35,11 @@ hephaestus::Coefficients defineCoefficients(){ } hephaestus::Outputs defineOutputs() { - std::map data_collections; - data_collections["ParaViewDataCollection"] = - new mfem::ParaViewDataCollection("ThermalExpansionExample"); - hephaestus::Outputs outputs(data_collections); + // std::map data_collections; + // data_collections["ParaViewDataCollection"] = + // new mfem::ParaViewDataCollection("ThermalExpansionExample"); + hephaestus::Outputs outputs; + outputs.Register("Paraview", new mfem::ParaViewDataCollection("ThermalExpansionExample"), true); return outputs; } @@ -109,7 +114,6 @@ int main(int argc, char *argv[]) { new hephaestus::SteadyExecutioner(exec_params); mfem::out << "Created executioner"; - executioner->Init(); executioner->Execute(); MPI_Finalize(); From 580c54581d30886fd23a178aa4828fac7093b8a9 Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 4 Dec 2023 15:49:23 +0000 Subject: [PATCH 37/41] Removed wrongly included -1 multiplier in mixedweakdivergence integrator --- src/integrators/MixedWeakDivergenceIntegrator.cpp | 7 ++----- src/integrators/MixedWeakDivergenceIntegrator.hpp | 6 +++--- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/integrators/MixedWeakDivergenceIntegrator.cpp b/src/integrators/MixedWeakDivergenceIntegrator.cpp index 64d370e79..33fe7f868 100644 --- a/src/integrators/MixedWeakDivergenceIntegrator.cpp +++ b/src/integrators/MixedWeakDivergenceIntegrator.cpp @@ -12,7 +12,7 @@ void MixedWeakDivergenceIntegrator::AssembleElementMatrix2(const mfem::FiniteEle dim = trial_fe.GetDim(); int trial_dof = trial_fe.GetDof(); int test_dof = test_fe.GetDof(); - double w, coeff, lambda, mu, alpha; + double w, coeff; Jadj.SetSize(dim); // vector to store values of basis functions @@ -44,11 +44,8 @@ void MixedWeakDivergenceIntegrator::AssembleElementMatrix2(const mfem::FiniteEle if (a) { - alpha = a -> Eval (Trans, ip); + coeff = a -> Eval(Trans, ip); } - - alpha *= -1; - Mult(test_d_shape, Trans.AdjugateJacobian(), test_g_shape); trial_shape *= w; trial_shape *= coeff; diff --git a/src/integrators/MixedWeakDivergenceIntegrator.hpp b/src/integrators/MixedWeakDivergenceIntegrator.hpp index 65b20da04..f2023ad0d 100644 --- a/src/integrators/MixedWeakDivergenceIntegrator.hpp +++ b/src/integrators/MixedWeakDivergenceIntegrator.hpp @@ -9,7 +9,7 @@ namespace mfem { - + class MixedWeakDivergenceIntegrator : public mfem::BilinearFormIntegrator { protected: @@ -31,14 +31,14 @@ class MixedWeakDivergenceIntegrator : public mfem::BilinearFormIntegrator MixedWeakDivergenceIntegrator(mfem::Coefficient &a) : a(&a), trial_maps(NULL), test_maps(NULL), geom(NULL) - {;} + {} ~MixedWeakDivergenceIntegrator() {;} void AssembleElementMatrix2(const mfem::FiniteElement &trial_fe, const mfem::FiniteElement &test_fe, mfem::ElementTransformation &Trans, - mfem::DenseMatrix &elmat); + mfem::DenseMatrix &elmat) override; const mfem::IntegrationRule& GetIntRule(const mfem::FiniteElement &trial_fe, const mfem::FiniteElement &test_fe, From 1623f2f4a638dc6a601fc931979fa518508a269b Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 4 Dec 2023 15:50:02 +0000 Subject: [PATCH 38/41] Added domain_lf_kernel include to kernels.hpp --- src/kernels/domain_lf_kernel.cpp | 21 +++++++++++++++++++++ src/kernels/domain_lf_kernel.hpp | 21 +++++++++++++++++++++ src/kernels/kernels.hpp | 4 +++- 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 src/kernels/domain_lf_kernel.cpp create mode 100644 src/kernels/domain_lf_kernel.hpp diff --git a/src/kernels/domain_lf_kernel.cpp b/src/kernels/domain_lf_kernel.cpp new file mode 100644 index 000000000..c63218d9f --- /dev/null +++ b/src/kernels/domain_lf_kernel.cpp @@ -0,0 +1,21 @@ +#include "domain_lf_kernel.hpp" + +namespace hephaestus { + +DomainLFKernel::DomainLFKernel(const hephaestus::InputParameters ¶ms) + : Kernel(params), + coef_name(params.GetParam("CoefficientName")) {} + +void DomainLFKernel::Init(hephaestus::GridFunctions &gridfunctions, + const hephaestus::FESpaces &fespaces, + hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients) { + + coef = coefficients.scalars.Get(coef_name); +} + +void DomainLFKernel::Apply(mfem::ParLinearForm *lf) { + lf->AddDomainIntegrator(new mfem::DomainLFIntegrator(*coef)); +}; + +} // namespace hephaestus diff --git a/src/kernels/domain_lf_kernel.hpp b/src/kernels/domain_lf_kernel.hpp new file mode 100644 index 000000000..2d498b6bd --- /dev/null +++ b/src/kernels/domain_lf_kernel.hpp @@ -0,0 +1,21 @@ +#pragma once +#include "kernel_base.hpp" + +namespace hephaestus { + +/* +(σ ∇ V, ∇ V') +*/ +class DomainLFKernel : public Kernel { +public: + DomainLFKernel(const hephaestus::InputParameters ¶ms); + virtual void Init(hephaestus::GridFunctions &gridfunctions, + const hephaestus::FESpaces &fespaces, + hephaestus::BCMap &bc_map, + hephaestus::Coefficients &coefficients) override; + virtual void Apply(mfem::ParLinearForm *lf) override; + std::string coef_name; + mfem::Coefficient *coef; +}; + +}; // namespace hephaestus diff --git a/src/kernels/kernels.hpp b/src/kernels/kernels.hpp index 7f129bf7e..1ba8565bb 100644 --- a/src/kernels/kernels.hpp +++ b/src/kernels/kernels.hpp @@ -7,6 +7,8 @@ #include "weak_curl_curl_kernel.hpp" #include "weak_curl_kernel.hpp" #include "mixed_weak_divergence_kernel.hpp" -#include "mixed_weak_divergence_kernel.hpp" #include "domain_divergence_lf_kernel.hpp" +#include "domain_lf_kernel.hpp" #include "linear_elasticity_kernel.hpp" + + From ea234d3b3435746fcc36f2d8ebe8e8a8dcc064fc Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 4 Dec 2023 15:50:39 +0000 Subject: [PATCH 39/41] Fixed wrong integrator being used in mixed_weak_divergence_kernel --- src/kernels/mixed_weak_divergence_kernel.cpp | 2 +- src/kernels/mixed_weak_divergence_kernel.hpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/kernels/mixed_weak_divergence_kernel.cpp b/src/kernels/mixed_weak_divergence_kernel.cpp index 813b79a1e..759cd87bd 100644 --- a/src/kernels/mixed_weak_divergence_kernel.cpp +++ b/src/kernels/mixed_weak_divergence_kernel.cpp @@ -16,7 +16,7 @@ void MixedWeakDivergenceKernel::Init(hephaestus::GridFunctions &gridfunctions, } void MixedWeakDivergenceKernel::Apply(mfem::ParMixedBilinearForm *mblf) { - mblf->AddDomainIntegrator(new mfem::MixedVectorGradientIntegrator(*coef)); + mblf->AddDomainIntegrator(new mfem::MixedWeakDivergenceIntegrator(*coef)); } } // namespace hephaestus diff --git a/src/kernels/mixed_weak_divergence_kernel.hpp b/src/kernels/mixed_weak_divergence_kernel.hpp index 87c66861c..61bf6d5f2 100644 --- a/src/kernels/mixed_weak_divergence_kernel.hpp +++ b/src/kernels/mixed_weak_divergence_kernel.hpp @@ -1,5 +1,6 @@ #pragma once #include "kernel_base.hpp" +#include "MixedWeakDivergenceIntegrator.hpp" namespace hephaestus { From 298db604079aa55988a1be0062f4ea1d06c5972c Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 4 Dec 2023 16:09:42 +0000 Subject: [PATCH 40/41] Renamed thermal expansion example src file to match other examples --- examples/CMakeLists.txt | 1 + examples/{ThermalExpansion => thermal_expansion}/CMakeLists.txt | 0 .../ThermalExpansionExample.cpp => thermal_expansion/Main.cpp} | 0 3 files changed, 1 insertion(+) rename examples/{ThermalExpansion => thermal_expansion}/CMakeLists.txt (100%) rename examples/{ThermalExpansion/ThermalExpansionExample.cpp => thermal_expansion/Main.cpp} (100%) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 8750063c5..252623489 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -4,3 +4,4 @@ add_subdirectory(complex_team7) add_subdirectory(closed_coil) add_subdirectory(open_coil) add_subdirectory(magnetostatic) +add_subdirectory(thermal_expansion) diff --git a/examples/ThermalExpansion/CMakeLists.txt b/examples/thermal_expansion/CMakeLists.txt similarity index 100% rename from examples/ThermalExpansion/CMakeLists.txt rename to examples/thermal_expansion/CMakeLists.txt diff --git a/examples/ThermalExpansion/ThermalExpansionExample.cpp b/examples/thermal_expansion/Main.cpp similarity index 100% rename from examples/ThermalExpansion/ThermalExpansionExample.cpp rename to examples/thermal_expansion/Main.cpp From e44e6a216500bca00ad13cbb093aa18381b257fb Mon Sep 17 00:00:00 2001 From: billellis Date: Mon, 4 Dec 2023 16:24:10 +0000 Subject: [PATCH 41/41] Removed CMakeFiles commits --- src/CMakeFiles/3.25.1/CMakeCXXCompiler.cmake | 83 -- .../3.25.1/CMakeDetermineCompilerABI_CXX.bin | Bin 15992 -> 0 bytes src/CMakeFiles/3.25.1/CMakeSystem.cmake | 15 - .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 857 ------------------ src/CMakeFiles/3.25.1/CompilerIdCXX/a.out | Bin 16096 -> 0 bytes src/CMakeFiles/CMakeOutput.log | 230 ----- src/CMakeFiles/cmake.check_cache | 1 - 7 files changed, 1186 deletions(-) delete mode 100644 src/CMakeFiles/3.25.1/CMakeCXXCompiler.cmake delete mode 100755 src/CMakeFiles/3.25.1/CMakeDetermineCompilerABI_CXX.bin delete mode 100644 src/CMakeFiles/3.25.1/CMakeSystem.cmake delete mode 100644 src/CMakeFiles/3.25.1/CompilerIdCXX/CMakeCXXCompilerId.cpp delete mode 100755 src/CMakeFiles/3.25.1/CompilerIdCXX/a.out delete mode 100644 src/CMakeFiles/CMakeOutput.log delete mode 100644 src/CMakeFiles/cmake.check_cache diff --git a/src/CMakeFiles/3.25.1/CMakeCXXCompiler.cmake b/src/CMakeFiles/3.25.1/CMakeCXXCompiler.cmake deleted file mode 100644 index 08880e71e..000000000 --- a/src/CMakeFiles/3.25.1/CMakeCXXCompiler.cmake +++ /dev/null @@ -1,83 +0,0 @@ -set(CMAKE_CXX_COMPILER "/usr/bin/c++") -set(CMAKE_CXX_COMPILER_ARG1 "") -set(CMAKE_CXX_COMPILER_ID "GNU") -set(CMAKE_CXX_COMPILER_VERSION "12.3.0") -set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") -set(CMAKE_CXX_COMPILER_WRAPPER "") -set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") -set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") -set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") -set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") -set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") -set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") -set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") -set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") -set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") - -set(CMAKE_CXX_PLATFORM_ID "Linux") -set(CMAKE_CXX_SIMULATE_ID "") -set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "") -set(CMAKE_CXX_SIMULATE_VERSION "") - - - - -set(CMAKE_AR "/usr/bin/ar") -set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-12") -set(CMAKE_RANLIB "/usr/bin/ranlib") -set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-12") -set(CMAKE_LINKER "/usr/bin/ld") -set(CMAKE_MT "") -set(CMAKE_COMPILER_IS_GNUCXX 1) -set(CMAKE_CXX_COMPILER_LOADED 1) -set(CMAKE_CXX_COMPILER_WORKS TRUE) -set(CMAKE_CXX_ABI_COMPILED TRUE) - -set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") - -set(CMAKE_CXX_COMPILER_ID_RUN 1) -set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm) -set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) - -foreach (lang C OBJC OBJCXX) - if (CMAKE_${lang}_COMPILER_ID_RUN) - foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) - list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) - endforeach() - endif() -endforeach() - -set(CMAKE_CXX_LINKER_PREFERENCE 30) -set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) - -# Save compiler ABI information. -set(CMAKE_CXX_SIZEOF_DATA_PTR "8") -set(CMAKE_CXX_COMPILER_ABI "ELF") -set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") -set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") - -if(CMAKE_CXX_SIZEOF_DATA_PTR) - set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") -endif() - -if(CMAKE_CXX_COMPILER_ABI) - set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") -endif() - -if(CMAKE_CXX_LIBRARY_ARCHITECTURE) - set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") -endif() - -set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") -if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) - set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") -endif() - - - - - -set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/12;/usr/include/x86_64-linux-gnu/c++/12;/usr/include/c++/12/backward;/usr/lib/gcc/x86_64-linux-gnu/12/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") -set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") -set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/12;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") -set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/src/CMakeFiles/3.25.1/CMakeDetermineCompilerABI_CXX.bin b/src/CMakeFiles/3.25.1/CMakeDetermineCompilerABI_CXX.bin deleted file mode 100755 index 1d9cbca5a080640d7c58b918a8033555c4b855ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15992 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 diff --git a/src/CMakeFiles/3.25.1/CMakeSystem.cmake b/src/CMakeFiles/3.25.1/CMakeSystem.cmake deleted file mode 100644 index 60c39546f..000000000 --- a/src/CMakeFiles/3.25.1/CMakeSystem.cmake +++ /dev/null @@ -1,15 +0,0 @@ -set(CMAKE_HOST_SYSTEM "Linux-6.2.0-35-generic") -set(CMAKE_HOST_SYSTEM_NAME "Linux") -set(CMAKE_HOST_SYSTEM_VERSION "6.2.0-35-generic") -set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") - - - -set(CMAKE_SYSTEM "Linux-6.2.0-35-generic") -set(CMAKE_SYSTEM_NAME "Linux") -set(CMAKE_SYSTEM_VERSION "6.2.0-35-generic") -set(CMAKE_SYSTEM_PROCESSOR "x86_64") - -set(CMAKE_CROSSCOMPILING "FALSE") - -set(CMAKE_SYSTEM_LOADED 1) diff --git a/src/CMakeFiles/3.25.1/CompilerIdCXX/CMakeCXXCompilerId.cpp b/src/CMakeFiles/3.25.1/CompilerIdCXX/CMakeCXXCompilerId.cpp deleted file mode 100644 index c9ba632f0..000000000 --- a/src/CMakeFiles/3.25.1/CompilerIdCXX/CMakeCXXCompilerId.cpp +++ /dev/null @@ -1,857 +0,0 @@ -/* This source file must have a .cpp extension so that all C++ compilers - recognize the extension without flags. Borland does not know .cxx for - example. */ -#ifndef __cplusplus -# error "A C compiler has been selected for C++." -#endif - -#if !defined(__has_include) -/* If the compiler does not have __has_include, pretend the answer is - always no. */ -# define __has_include(x) 0 -#endif - - -/* Version number components: V=Version, R=Revision, P=Patch - Version date components: YYYY=Year, MM=Month, DD=Day */ - -#if defined(__COMO__) -# define COMPILER_ID "Comeau" - /* __COMO_VERSION__ = VRR */ -# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) -# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) - -#elif defined(__INTEL_COMPILER) || defined(__ICC) -# define COMPILER_ID "Intel" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# if defined(__GNUC__) -# define SIMULATE_ID "GNU" -# endif - /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, - except that a few beta releases use the old format with V=2021. */ -# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) - /* The third version component from --version is an update index, - but no macro is provided for it. */ -# define COMPILER_VERSION_PATCH DEC(0) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) - /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# if defined(__GNUC__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# elif defined(__GNUG__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) -# endif -# if defined(__GNUC_MINOR__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) -# define COMPILER_ID "IntelLLVM" -#if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -#endif -#if defined(__GNUC__) -# define SIMULATE_ID "GNU" -#endif -/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and - * later. Look for 6 digit vs. 8 digit version number to decide encoding. - * VVVV is no smaller than the current year when a version is released. - */ -#if __INTEL_LLVM_COMPILER < 1000000L -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) -#else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) -#endif -#if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -#endif -#if defined(__GNUC__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -#elif defined(__GNUG__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) -#endif -#if defined(__GNUC_MINOR__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -#endif -#if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -#endif - -#elif defined(__PATHCC__) -# define COMPILER_ID "PathScale" -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif - -#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) -# define COMPILER_ID "Embarcadero" -# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_CC) -# define COMPILER_ID "SunPro" -# if __SUNPRO_CC >= 0x5100 - /* __SUNPRO_CC = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# endif - -#elif defined(__HP_aCC) -# define COMPILER_ID "HP" - /* __HP_aCC = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) - -#elif defined(__DECCXX) -# define COMPILER_ID "Compaq" - /* __DECCXX_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) - -#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__open_xl__) && defined(__clang__) -# define COMPILER_ID "IBMClang" -# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) -# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) -# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) - - -#elif defined(__ibmxl__) && defined(__clang__) -# define COMPILER_ID "XLClang" -# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) -# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) -# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) - - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 -# define COMPILER_ID "XL" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__NVCOMPILER) -# define COMPILER_ID "NVHPC" -# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) -# if defined(__NVCOMPILER_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) -# endif - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__CLANG_FUJITSU) -# define COMPILER_ID "FujitsuClang" -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(__FUJITSU) -# define COMPILER_ID "Fujitsu" -# if defined(__FCC_version__) -# define COMPILER_VERSION __FCC_version__ -# elif defined(__FCC_major__) -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# endif -# if defined(__fcc_version) -# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) -# elif defined(__FCC_VERSION) -# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) -# endif - - -#elif defined(__ghs__) -# define COMPILER_ID "GHS" -/* __GHS_VERSION_NUMBER = VVVVRP */ -# ifdef __GHS_VERSION_NUMBER -# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) -# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) -# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) -# endif - -#elif defined(__TASKING__) -# define COMPILER_ID "Tasking" - # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) - # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) -# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__ARMCC_VERSION) && !defined(__clang__) -# define COMPILER_ID "ARMCC" -#if __ARMCC_VERSION >= 1000000 - /* __ARMCC_VERSION = VRRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#else - /* __ARMCC_VERSION = VRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#endif - - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) -# define COMPILER_ID "ARMClang" - # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) -# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) -# define COMPILER_ID "LCC" -# define COMPILER_VERSION_MAJOR DEC(1) -# if defined(__LCC__) -# define COMPILER_VERSION_MINOR DEC(__LCC__- 100) -# endif -# if defined(__LCC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) -# endif -# if defined(__GNUC__) && defined(__GNUC_MINOR__) -# define SIMULATE_ID "GNU" -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif -# endif - -#elif defined(__GNUC__) || defined(__GNUG__) -# define COMPILER_ID "GNU" -# if defined(__GNUC__) -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# else -# define COMPILER_VERSION_MAJOR DEC(__GNUG__) -# endif -# if defined(__GNUC_MINOR__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(_ADI_COMPILER) -# define COMPILER_ID "ADSP" -#if defined(__VERSIONNUM__) - /* __VERSIONNUM__ = 0xVVRRPPTT */ -# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) -# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) -# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) -# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" -# if defined(__VER__) && defined(__ICCARM__) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) -# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) -# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) -# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) -# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) -char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__MSYS__) -# define PLATFORM_ID "MSYS" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# elif defined(__VXWORKS__) -# define PLATFORM_ID "VxWorks" - -# else /* unknown platform */ -# define PLATFORM_ID -# endif - -#elif defined(__INTEGRITY) -# if defined(INT_178B) -# define PLATFORM_ID "Integrity178" - -# else /* regular Integrity */ -# define PLATFORM_ID "Integrity" -# endif - -# elif defined(_ADI_COMPILER) -# define PLATFORM_ID "ADSP" - -#else /* unknown platform */ -# define PLATFORM_ID - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_ARM64EC) -# define ARCHITECTURE_ID "ARM64EC" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM64) -# define ARCHITECTURE_ID "ARM64" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# if defined(__ICCARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__ICCRX__) -# define ARCHITECTURE_ID "RX" - -# elif defined(__ICCRH850__) -# define ARCHITECTURE_ID "RH850" - -# elif defined(__ICCRL78__) -# define ARCHITECTURE_ID "RL78" - -# elif defined(__ICCRISCV__) -# define ARCHITECTURE_ID "RISCV" - -# elif defined(__ICCAVR__) -# define ARCHITECTURE_ID "AVR" - -# elif defined(__ICC430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__ICCV850__) -# define ARCHITECTURE_ID "V850" - -# elif defined(__ICC8051__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__ICCSTM8__) -# define ARCHITECTURE_ID "STM8" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__ghs__) -# if defined(__PPC64__) -# define ARCHITECTURE_ID "PPC64" - -# elif defined(__ppc__) -# define ARCHITECTURE_ID "PPC" - -# elif defined(__ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__x86_64__) -# define ARCHITECTURE_ID "x64" - -# elif defined(__i386__) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__TI_COMPILER_VERSION__) -# if defined(__TI_ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__MSP430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__TMS320C28XX__) -# define ARCHITECTURE_ID "TMS320C28x" - -# elif defined(__TMS320C6X__) || defined(_TMS320C6X) -# define ARCHITECTURE_ID "TMS320C6x" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -# elif defined(__ADSPSHARC__) -# define ARCHITECTURE_ID "SHARC" - -# elif defined(__ADSPBLACKFIN__) -# define ARCHITECTURE_ID "Blackfin" - -#elif defined(__TASKING__) - -# if defined(__CTC__) || defined(__CPTC__) -# define ARCHITECTURE_ID "TriCore" - -# elif defined(__CMCS__) -# define ARCHITECTURE_ID "MCS" - -# elif defined(__CARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__CARC__) -# define ARCHITECTURE_ID "ARC" - -# elif defined(__C51__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__CPCP__) -# define ARCHITECTURE_ID "PCP" - -# else -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number. */ -#ifdef COMPILER_VERSION -char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; - -/* Construct a string literal encoding the version number components. */ -#elif defined(COMPILER_VERSION_MAJOR) -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the internal version number. */ -#ifdef COMPILER_VERSION_INTERNAL -char const info_version_internal[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', - 'i','n','t','e','r','n','a','l','[', - COMPILER_VERSION_INTERNAL,']','\0'}; -#elif defined(COMPILER_VERSION_INTERNAL_STR) -char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - -#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L -# if defined(__INTEL_CXX11_MODE__) -# if defined(__cpp_aggregate_nsdmi) -# define CXX_STD 201402L -# else -# define CXX_STD 201103L -# endif -# else -# define CXX_STD 199711L -# endif -#elif defined(_MSC_VER) && defined(_MSVC_LANG) -# define CXX_STD _MSVC_LANG -#else -# define CXX_STD __cplusplus -#endif - -const char* info_language_standard_default = "INFO" ":" "standard_default[" -#if CXX_STD > 202002L - "23" -#elif CXX_STD > 201703L - "20" -#elif CXX_STD >= 201703L - "17" -#elif CXX_STD >= 201402L - "14" -#elif CXX_STD >= 201103L - "11" -#else - "98" -#endif -"]"; - -const char* info_language_extensions_default = "INFO" ":" "extensions_default[" -#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ - defined(__TI_COMPILER_VERSION__)) && \ - !defined(__STRICT_ANSI__) - "ON" -#else - "OFF" -#endif -"]"; - -/*--------------------------------------------------------------------------*/ - -int main(int argc, char* argv[]) -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; - require += info_arch[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef COMPILER_VERSION_INTERNAL - require += info_version_internal[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) - require += info_cray[argc]; -#endif - require += info_language_standard_default[argc]; - require += info_language_extensions_default[argc]; - (void)argv; - return require; -} diff --git a/src/CMakeFiles/3.25.1/CompilerIdCXX/a.out b/src/CMakeFiles/3.25.1/CompilerIdCXX/a.out deleted file mode 100755 index af772193ccf4f65330f7ec6d0559990d12cec44c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16096 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 BSqA_B diff --git a/src/CMakeFiles/CMakeOutput.log b/src/CMakeFiles/CMakeOutput.log deleted file mode 100644 index 8870c14b8..000000000 --- a/src/CMakeFiles/CMakeOutput.log +++ /dev/null @@ -1,230 +0,0 @@ -The system is: Linux - 6.2.0-35-generic - x86_64 -Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. -Compiler: /usr/bin/c++ -Build flags: -Id flags: - -The output was: -0 - - -Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" - -The CXX compiler identification is GNU, found in "/home/bill/Projects/hephaestus/src/CMakeFiles/3.25.1/CompilerIdCXX/a.out" - -Detecting CXX compiler ABI info compiled with the following output: -Change Dir: /home/bill/Projects/hephaestus/src/CMakeFiles/CMakeScratch/TryCompile-fefg0b - -Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_b60f1/fast && /usr/bin/gmake -f CMakeFiles/cmTC_b60f1.dir/build.make CMakeFiles/cmTC_b60f1.dir/build -gmake[1]: Entering directory '/home/bill/Projects/hephaestus/src/CMakeFiles/CMakeScratch/TryCompile-fefg0b' -Building CXX object CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -/usr/bin/c++ -v -o CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.25/Modules/CMakeCXXCompilerABI.cpp -Using built-in specs. -COLLECT_GCC=/usr/bin/c++ -OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa -OFFLOAD_TARGET_DEFAULT=1 -Target: x86_64-linux-gnu -Configured with: ../src/configure -v --with-pkgversion='Ubuntu 12.3.0-1ubuntu1~23.04' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu -Thread model: posix -Supported LTO compression algorithms: zlib zstd -gcc version 12.3.0 (Ubuntu 12.3.0-1ubuntu1~23.04) -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b60f1.dir/' - /usr/lib/gcc/x86_64-linux-gnu/12/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.25/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_b60f1.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccFDMmMV.s -GNU C++17 (Ubuntu 12.3.0-1ubuntu1~23.04) version 12.3.0 (x86_64-linux-gnu) - compiled by GNU C version 12.3.0, GMP version 6.2.1, MPFR version 4.2.0, MPC version 1.3.1, isl version isl-0.25-GMP - -GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 -ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/12" -ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" -ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/12/include-fixed" -ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include" -#include "..." search starts here: -#include <...> search starts here: - /usr/include/c++/12 - /usr/include/x86_64-linux-gnu/c++/12 - /usr/include/c++/12/backward - /usr/lib/gcc/x86_64-linux-gnu/12/include - /usr/local/include - /usr/include/x86_64-linux-gnu - /usr/include -End of search list. -GNU C++17 (Ubuntu 12.3.0-1ubuntu1~23.04) version 12.3.0 (x86_64-linux-gnu) - compiled by GNU C version 12.3.0, GMP version 6.2.1, MPFR version 4.2.0, MPC version 1.3.1, isl version isl-0.25-GMP - -GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 -Compiler executable checksum: 16d8e9c7f95d1b20c28ab711ca7df821 -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b60f1.dir/' - as -v --64 -o CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccFDMmMV.s -GNU assembler version 2.40 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.40 -COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/ -LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../:/lib/:/usr/lib/ -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.' -Linking CXX executable cmTC_b60f1 -/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b60f1.dir/link.txt --verbose=1 -/usr/bin/c++ -v CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_b60f1 -Using built-in specs. -COLLECT_GCC=/usr/bin/c++ -COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper -OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa -OFFLOAD_TARGET_DEFAULT=1 -Target: x86_64-linux-gnu -Configured with: ../src/configure -v --with-pkgversion='Ubuntu 12.3.0-1ubuntu1~23.04' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu -Thread model: posix -Supported LTO compression algorithms: zlib zstd -gcc version 12.3.0 (Ubuntu 12.3.0-1ubuntu1~23.04) -COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/ -LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../:/lib/:/usr/lib/ -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_b60f1' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_b60f1.' - /usr/lib/gcc/x86_64-linux-gnu/12/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/12/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper -plugin-opt=-fresolution=/tmp/ccwVbdIz.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b60f1 /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/12 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/12/../../.. CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crtn.o -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_b60f1' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_b60f1.' -gmake[1]: Leaving directory '/home/bill/Projects/hephaestus/src/CMakeFiles/CMakeScratch/TryCompile-fefg0b' - - - -Parsed CXX implicit include dir info from above output: rv=done - found start of include info - found start of implicit include info - add: [/usr/include/c++/12] - add: [/usr/include/x86_64-linux-gnu/c++/12] - add: [/usr/include/c++/12/backward] - add: [/usr/lib/gcc/x86_64-linux-gnu/12/include] - add: [/usr/local/include] - add: [/usr/include/x86_64-linux-gnu] - add: [/usr/include] - end of search list found - collapse include dir [/usr/include/c++/12] ==> [/usr/include/c++/12] - collapse include dir [/usr/include/x86_64-linux-gnu/c++/12] ==> [/usr/include/x86_64-linux-gnu/c++/12] - collapse include dir [/usr/include/c++/12/backward] ==> [/usr/include/c++/12/backward] - collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/12/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/12/include] - collapse include dir [/usr/local/include] ==> [/usr/local/include] - collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] - collapse include dir [/usr/include] ==> [/usr/include] - implicit include dirs: [/usr/include/c++/12;/usr/include/x86_64-linux-gnu/c++/12;/usr/include/c++/12/backward;/usr/lib/gcc/x86_64-linux-gnu/12/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] - - -Parsed CXX implicit link information from above output: - link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] - ignore line: [Change Dir: /home/bill/Projects/hephaestus/src/CMakeFiles/CMakeScratch/TryCompile-fefg0b] - ignore line: [] - ignore line: [Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_b60f1/fast && /usr/bin/gmake -f CMakeFiles/cmTC_b60f1.dir/build.make CMakeFiles/cmTC_b60f1.dir/build] - ignore line: [gmake[1]: Entering directory '/home/bill/Projects/hephaestus/src/CMakeFiles/CMakeScratch/TryCompile-fefg0b'] - ignore line: [Building CXX object CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o] - ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.25/Modules/CMakeCXXCompilerABI.cpp] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/c++] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-linux-gnu] - ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 12.3.0-1ubuntu1~23.04' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 12.3.0 (Ubuntu 12.3.0-1ubuntu1~23.04) ] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b60f1.dir/'] - ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/12/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.25/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_b60f1.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccFDMmMV.s] - ignore line: [GNU C++17 (Ubuntu 12.3.0-1ubuntu1~23.04) version 12.3.0 (x86_64-linux-gnu)] - ignore line: [ compiled by GNU C version 12.3.0 GMP version 6.2.1 MPFR version 4.2.0 MPC version 1.3.1 isl version isl-0.25-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/12"] - ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/12/include-fixed"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include"] - ignore line: [#include "..." search starts here:] - ignore line: [#include <...> search starts here:] - ignore line: [ /usr/include/c++/12] - ignore line: [ /usr/include/x86_64-linux-gnu/c++/12] - ignore line: [ /usr/include/c++/12/backward] - ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/12/include] - ignore line: [ /usr/local/include] - ignore line: [ /usr/include/x86_64-linux-gnu] - ignore line: [ /usr/include] - ignore line: [End of search list.] - ignore line: [GNU C++17 (Ubuntu 12.3.0-1ubuntu1~23.04) version 12.3.0 (x86_64-linux-gnu)] - ignore line: [ compiled by GNU C version 12.3.0 GMP version 6.2.1 MPFR version 4.2.0 MPC version 1.3.1 isl version isl-0.25-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [Compiler executable checksum: 16d8e9c7f95d1b20c28ab711ca7df821] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b60f1.dir/'] - ignore line: [ as -v --64 -o CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccFDMmMV.s] - ignore line: [GNU assembler version 2.40 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.40] - ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.'] - ignore line: [Linking CXX executable cmTC_b60f1] - ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b60f1.dir/link.txt --verbose=1] - ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_b60f1 ] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/c++] - ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-linux-gnu] - ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 12.3.0-1ubuntu1~23.04' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-12-DAPbBt/gcc-12-12.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 12.3.0 (Ubuntu 12.3.0-1ubuntu1~23.04) ] - ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/12/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/12/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_b60f1' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_b60f1.'] - link line: [ /usr/lib/gcc/x86_64-linux-gnu/12/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/12/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper -plugin-opt=-fresolution=/tmp/ccwVbdIz.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b60f1 /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/12 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/12/../../.. CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crtn.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/12/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/12/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccwVbdIz.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [--build-id] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [--as-needed] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-pie] ==> ignore - arg [-znow] ==> ignore - arg [-zrelro] ==> ignore - arg [-o] ==> ignore - arg [cmTC_b60f1] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/Scrt1.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crti.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/12] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/12] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib] - arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] - arg [-L/lib/../lib] ==> dir [/lib/../lib] - arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] - arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/12/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/12/../../..] - arg [CMakeFiles/cmTC_b60f1.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore - arg [-lstdc++] ==> lib [stdc++] - arg [-lm] ==> lib [m] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [-lc] ==> lib [c] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [/usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crtn.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/12] ==> [/usr/lib/gcc/x86_64-linux-gnu/12] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib] ==> [/usr/lib] - collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] - collapse library dir [/lib/../lib] ==> [/lib] - collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] - collapse library dir [/usr/lib/../lib] ==> [/usr/lib] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/12/../../..] ==> [/usr/lib] - implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] - implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] - implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/12;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] - implicit fwks: [] - - diff --git a/src/CMakeFiles/cmake.check_cache b/src/CMakeFiles/cmake.check_cache deleted file mode 100644 index 3dccd7317..000000000 --- a/src/CMakeFiles/cmake.check_cache +++ /dev/null @@ -1 +0,0 @@ -# This file is generated by cmake for dependency checking of the CMakeCache.txt file