diff --git a/host-configs/tpls.cmake b/host-configs/tpls.cmake index 1a4ab1701e6..a35b36a3c5e 100644 --- a/host-configs/tpls.cmake +++ b/host-configs/tpls.cmake @@ -32,6 +32,10 @@ if(EXISTS ${GEOS_TPL_DIR}/conduit) set(CONDUIT_DIR ${GEOS_TPL_DIR}/conduit CACHE PATH "" FORCE) endif() +if(EXISTS ${GEOS_TPL_DIR}/catalyst) + set(CATALYST_DIR ${GEOS_TPL_DIR}/catalyst CACHE PATH "" FORCE) +endif() + if(EXISTS ${GEOS_TPL_DIR}/silo) set(SILO_DIR ${GEOS_TPL_DIR}/silo CACHE PATH "" FORCE) endif() diff --git a/src/cmake/GeosxOptions.cmake b/src/cmake/GeosxOptions.cmake index 468e6490f57..b0f5d51691c 100644 --- a/src/cmake/GeosxOptions.cmake +++ b/src/cmake/GeosxOptions.cmake @@ -35,6 +35,7 @@ option( ENABLE_SCOTCH "Enables SCOTCH" ON ) option( ENABLE_SILO "Enables SILO output" ON ) option( ENABLE_VTK "Enables VTK" ON ) +option( ENABLE_CATALYST "Enables catalyst" ON ) option( ENABLE_TOTALVIEW_OUTPUT "Enables Totalview custom view" OFF ) diff --git a/src/cmake/thirdparty/SetupGeosxThirdParty.cmake b/src/cmake/thirdparty/SetupGeosxThirdParty.cmake index e30dbd937bc..18a871eb386 100644 --- a/src/cmake/thirdparty/SetupGeosxThirdParty.cmake +++ b/src/cmake/thirdparty/SetupGeosxThirdParty.cmake @@ -1,4 +1,4 @@ -#################################### +################################### # # 3rd Party Dependencies # @@ -828,6 +828,48 @@ else() message(STATUS "Not using VTK") endif() +################################ +# Catalyst +################################ +if(DEFINED CATALYST_DIR) + message(STATUS "CATALYST_DIR = ${CATALYST_DIR}") + + set(CATALYST_CMAKE_PREFIX ${CATALYST_DIR}/lib/cmake/catalyst-2.0) + if(NOT EXISTS ${CATALYST_CMAKE_PREFIX}) + set(CATALYST_CMAKE_PREFIX ${CATALYST_DIR}/lib64/cmake/catalyst-2.0) + endif() + + find_package(catalyst REQUIRED + PATHS ${CATALYST_CMAKE_PREFIX} + NO_DEFAULT_PATH) + + if (NOT CATALYST_ABI_VERSION STREQUAL "2") + message(WARNING "CATALYST_DIR was set but catalyst with ABI version 2 was not found") + endif() + + set(CATALYST_TARGETS catalyst::catalyst) + foreach( targetName ${CATALYST_TARGETS} ) + + get_target_property( includeDirs ${targetName} INTERFACE_INCLUDE_DIRECTORIES) + + set_property(TARGET ${targetName} + APPEND PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES + ${includeDirs}) + endforeach() + + set(ENABLE_CATALYST ON CACHE BOOL "Boolean defining whether or not to build with catalyst") + set(thirdPartyLibs ${thirdPartyLibs} catalyst) + +else() + + if(ENABLE_CATALYST) + message(WARNING "ENABLE_CATALYST is ON but CATALYST_DIR is not defined") + endif() + + set(ENABLE_CATALYST OFF CACHE BOOL "Boolean defining whether or not to build with catalyst") + message(STATUS "Not using catalyst") + +endif() ################################ # uncrustify @@ -867,7 +909,7 @@ if( ${CMAKE_VERSION} VERSION_LESS "3.19" ) set( PYTHON_AND_VERSION Python3 ) set( PYTHON_OPTIONAL_COMPONENTS) else() - set( PYTHON_AND_VERSION Python3 3.6.0...3.12.2 ) + set( PYTHON_AND_VERSION Python3 3.6.0...3.12.3 ) set( PYTHON_OPTIONAL_COMPONENTS OPTIONAL_COMPONENTS Development NumPy) endif() if(ENABLE_PYGEOSX) diff --git a/src/coreComponents/fileIO/CMakeLists.txt b/src/coreComponents/fileIO/CMakeLists.txt index 3b70d456190..ee89021d20a 100644 --- a/src/coreComponents/fileIO/CMakeLists.txt +++ b/src/coreComponents/fileIO/CMakeLists.txt @@ -31,10 +31,12 @@ set( fileIO_sources set( dependencyList ${parallelDeps} events mesh HDF5::HDF5 ) if( ENABLE_PYGEOSX ) list( APPEND fileIO_headers + python/PyCatalystOutputType.hpp python/PyHistoryCollectionType.hpp python/PyHistoryOutputType.hpp python/PyVTKOutputType.hpp ) list( APPEND fileIO_sources + python/PyCatalystOutput.cpp python/PyHistoryCollection.cpp python/PyHistoryOutput.cpp python/PyVTKOutput.cpp ) @@ -79,6 +81,13 @@ if( ENABLE_CUDA AND ENABLE_CUDA_NVTOOLSEXT ) list( APPEND dependencyList CUDA::nvToolsExt ) endif() +if ( ENABLE_CATALYST ) + add_subdirectory(Catalyst) + list( APPEND fileIO_headers Outputs/CatalystOutput.hpp ) + list( APPEND fileIO_sources Outputs/CatalystOutput.cpp ) + list( APPEND dependencyList fileIOCatalyst ) +endif() + geos_decorate_link_dependencies( LIST decoratedDependencies DEPENDENCIES ${dependencyList} ) diff --git a/src/coreComponents/fileIO/Catalyst/CMakeLists.txt b/src/coreComponents/fileIO/Catalyst/CMakeLists.txt new file mode 100644 index 00000000000..3c9f1be716e --- /dev/null +++ b/src/coreComponents/fileIO/Catalyst/CMakeLists.txt @@ -0,0 +1,29 @@ +set(catalyst_headers + CatalystActions.hpp + ConduitCapsule.hpp + GenericConduitCapsule.hpp +) + +set(catalyst_sources + CatalystActions.cpp + ConduitCapsule.cpp +) + +set(catalyst_template_sources + GenericConduitCapsule.tpp +) + +set(catalyst_dependencies + catalyst::catalyst +) + +list(APPEND ${catalyst_headers} ${catalyst_template_sources}) + +blt_add_library( NAME fileIOCatalyst + SOURCES ${catalyst_sources} + HEADERS ${catalyst_headers} + DEPENDS_ON ${catalyst_dependencies} + OBJECT ${GEOS_BUILD_OBJ_LIBS} + ) + +geosx_add_code_checks(PREFIX fileIOCatalyst ) diff --git a/src/coreComponents/fileIO/Catalyst/CatalystActions.cpp b/src/coreComponents/fileIO/Catalyst/CatalystActions.cpp new file mode 100644 index 00000000000..75fb45d8615 --- /dev/null +++ b/src/coreComponents/fileIO/Catalyst/CatalystActions.cpp @@ -0,0 +1,174 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2020 TotalEnergies + * Copyright (c) 2019- GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file CatalystActions.cpp + */ + +// source includes +#include "CatalystActions.hpp" + +// external includes +#include + +#include + +namespace geos +{ + +namespace internal +{ + +/* + * Convert the encapsulated simulation conduit node into a catalyst conduit node + */ +conduit_cpp::Node Convert(ConduitCapsule* simulationNode) +{ + conduit_cpp::Node convertedNode; + + if (!simulationNode) + { + return convertedNode; + } + + if(simulationNode->IsList() && simulationNode->IsInt8()) + { + convertedNode.set_int8_vector(simulationNode->GetInt8Array()); + } + else if(simulationNode->IsList() && simulationNode->IsInt16()) + { + convertedNode.set_int16_vector(simulationNode->GetInt16Array()); + } + else if(simulationNode->IsList() && simulationNode->IsInt32()) + { + convertedNode.set_int32_vector(simulationNode->GetInt32Array()); + } + else if(simulationNode->IsList() && simulationNode->IsInt64()) + { + convertedNode.set_int64_vector(simulationNode->GetInt64Array()); + } + else if(simulationNode->IsList() && simulationNode->IsUInt8()) + { + convertedNode.set_uint8_vector(simulationNode->GetUInt8Array()); + } + else if(simulationNode->IsList() && simulationNode->IsUInt16()) + { + convertedNode.set_uint16_vector(simulationNode->GetUInt16Array()); + } + else if(simulationNode->IsList() && simulationNode->IsUInt32()) + { + convertedNode.set_uint32_vector(simulationNode->GetUInt32Array()); + } + else if(simulationNode->IsList() && simulationNode->IsUInt64()) + { + convertedNode.set_uint64_vector(simulationNode->GetUInt64Array()); + } + else if(simulationNode->IsList() && simulationNode->IsFloat32()) + { + convertedNode.set_float32_vector(simulationNode->GetFloat32Array()); + } + else if(simulationNode->IsList() && simulationNode->IsFloat64()) + { + convertedNode.set_float64_vector(simulationNode->GetFloat64Array()); + } + else if(simulationNode->IsInt8()) + { + convertedNode.set_int8(simulationNode->GetInt8Value()); + } + else if(simulationNode->IsInt16()) + { + convertedNode.set_int16(simulationNode->GetInt16Value()); + } + else if(simulationNode->IsInt32()) + { + convertedNode.set_int32(simulationNode->GetInt32Value()); + } + else if(simulationNode->IsInt64()) + { + convertedNode.set_int64(simulationNode->GetInt64Value()); + } + else if(simulationNode->IsUInt8()) + { + convertedNode.set_uint8(simulationNode->GetUInt8Value()); + } + else if(simulationNode->IsUInt16()) + { + convertedNode.set_uint16(simulationNode->GetUInt16Value()); + } + else if(simulationNode->IsUInt32()) + { + convertedNode.set_uint32(simulationNode->GetUInt32Value()); + } + else if(simulationNode->IsUInt64()) + { + convertedNode.set_uint64(simulationNode->GetUInt64Value()); + } + else if(simulationNode->IsFloat32()) + { + convertedNode.set_float32(simulationNode->GetFloat32Value()); + } + else if(simulationNode->IsFloat64()) + { + convertedNode.set_float64(simulationNode->GetFloat64Value()); + } + else if(simulationNode->IsString()) + { + convertedNode.set_string(simulationNode->GetStringValue()); + } + + // Recursively convert children + for(std::size_t iChild = 0; iChild < simulationNode->GetNumberOfChildren(); ++iChild) + { + auto childConduitNode = simulationNode->GetChild(iChild); + auto name = childConduitNode->GetName(); + if(name.empty()) + { + name="root"; + } + convertedNode.set_path_node(name, Convert(childConduitNode.get())); + } + + return convertedNode; +} + +bool CatalystAction(ConduitCapsule* simulationNode, std::function action) +{ + if(!simulationNode) + { + return false; + } + + conduit_cpp::Node convertedNode = Convert(simulationNode); + + return (action(conduit_cpp::c_node(&convertedNode)) == catalyst_status::catalyst_status_ok); +} + +} + +bool CatalystInitialize(ConduitCapsule* simulationNode) +{ + return internal::CatalystAction(simulationNode, catalyst_initialize); +} + +bool CatalystExecute(ConduitCapsule* simulationNode) +{ + return internal::CatalystAction(simulationNode, catalyst_execute); +} + +bool CatalystFinalize(ConduitCapsule* simulationNode) +{ + return internal::CatalystAction(simulationNode, catalyst_finalize); +} + +} diff --git a/src/coreComponents/fileIO/Catalyst/CatalystActions.hpp b/src/coreComponents/fileIO/Catalyst/CatalystActions.hpp new file mode 100644 index 00000000000..36204c3dcc1 --- /dev/null +++ b/src/coreComponents/fileIO/Catalyst/CatalystActions.hpp @@ -0,0 +1,46 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2020 TotalEnergies + * Copyright (c) 2019- GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file CatalystActions.hpp + */ + +// source includes +#include "ConduitCapsule.hpp" + +namespace geos +{ + +/** + * @brief Wrapped call to catalyst_initialize + * @param the encapsulated conduit node to convert and send to initialize method + * @returns true on success + */ +bool CatalystInitialize(ConduitCapsule* simulationNode); + +/** + * @brief Wrapped call to catalyst_execute + * @param the encapsulated conduit node to convert and send to execute method + * @returns true on success + */ +bool CatalystExecute(ConduitCapsule* simulationNode); + +/** + * @brief Wrapped call to catalyst_finalize + * @param the encapsulated conduit node to convert and send to finalize method + * @returns true on success + */ +bool CatalystFinalize(ConduitCapsule* simulationNode); + +} diff --git a/src/coreComponents/fileIO/Catalyst/ConduitCapsule.cpp b/src/coreComponents/fileIO/Catalyst/ConduitCapsule.cpp new file mode 100644 index 00000000000..9ec4185bc97 --- /dev/null +++ b/src/coreComponents/fileIO/Catalyst/ConduitCapsule.cpp @@ -0,0 +1,19 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2020 TotalEnergies + * Copyright (c) 2019- GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file ConduitCapsule.cpp + */ + +#include "ConduitCapsule.hpp" diff --git a/src/coreComponents/fileIO/Catalyst/ConduitCapsule.hpp b/src/coreComponents/fileIO/Catalyst/ConduitCapsule.hpp new file mode 100644 index 00000000000..f80730d712a --- /dev/null +++ b/src/coreComponents/fileIO/Catalyst/ConduitCapsule.hpp @@ -0,0 +1,151 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2020 TotalEnergies + * Copyright (c) 2019- GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file ConduitCapsule.hpp + */ + +#ifndef GEOS_FILEIO_CATALYST_CONDUITCAPSULE_HPP_ +#define GEOS_FILEIO_CATALYST_CONDUITCAPSULE_HPP_ + +// External includes +#include +#include +#include + +namespace geos +{ + +/** + * @class ConduitCapsule + * @brief Pure interface for encapsulating a conduit node with the goal of coverting it to a catalyst conduit node + */ +class ConduitCapsule +{ +public: + + /** + * @brief No explicit memory deallocation here + */ + virtual ~ConduitCapsule() = default; + + /** + * @brief Get the number of children this node element has in the hiearchy + * @returns the number of children nodes this node has + */ + virtual std::size_t GetNumberOfChildren() const = 0; + + /** + * @brief Get the iChild'th node below this node + * @param iChild the index of the child node to get + * @returns A shared pointer to the iChild node already encapsulated + */ + virtual std::shared_ptr GetChild(std::size_t iChild) = 0; + + /** + * @brief Get the name of the underlying node + * @returns A string with the name of the node + */ + virtual std::string GetName() const = 0; + + ///@{ + /** + * @brief Type checkers for the data held by the node + * @returns true if the data type corresponds to the call + */ + virtual bool IsList() const = 0; + virtual bool IsInt8() const = 0; + virtual bool IsInt16() const = 0; + virtual bool IsInt32() const = 0; + virtual bool IsInt64() const = 0; + virtual bool IsUInt8() const = 0; + virtual bool IsUInt16() const = 0; + virtual bool IsUInt32() const = 0; + virtual bool IsUInt64() const = 0; + virtual bool IsFloat32() const = 0; + virtual bool IsFloat64() const = 0; + virtual bool IsString() const = 0; + ///@} + + ///@{ + /** + * @brief Check if the data held by the node is external + */ + virtual bool IsDataExternal() const = 0; + /** + * @brief Get a void* pointer to the external data when applicable + * @returns pointer to external data when relevant and nullptr if not + */ + virtual void* GetExternalDataPointer() const = 0; + /** + * @brief Get the offset with which to read the external data + * @retuns the offset meta-data + */ + virtual long GetExternalDataOffset() const = 0; + /** + * @brief Get the stride with which to read the external data + * @retuns the stride meta-data + */ + virtual long GetExternalDataStride() const = 0; + /** + * @brief Get the number of bytes one element of external data occupies + * @retuns the element size in bytes meta-data + */ + virtual long GetExternalDataElementBytes() const = 0; + /** + * @brief Get the endianness with which to read the external data + * @retuns the endianness meta-data + */ + virtual long GetExternalDataEndianness() const = 0; + ///@} + + + ///@{ + /** + * Get the values of data for conventional data types + */ + virtual int8_t GetInt8Value() const = 0; + virtual int16_t GetInt16Value() const = 0; + virtual int32_t GetInt32Value() const = 0; + virtual int64_t GetInt64Value() const = 0; + virtual uint8_t GetUInt8Value() const = 0; + virtual uint16_t GetUInt16Value() const = 0; + virtual uint32_t GetUInt32Value() const = 0; + virtual uint64_t GetUInt64Value() const = 0; + virtual float GetFloat32Value() const = 0; + virtual double GetFloat64Value() const = 0; + virtual std::string GetStringValue() const = 0; + ///@} + + ///@{ + /** + * Get the value arrays of data for conventional data types + */ + virtual std::vector GetInt8Array() const = 0; + virtual std::vector GetInt16Array() const = 0; + virtual std::vector GetInt32Array() const = 0; + virtual std::vector GetInt64Array() const = 0; + virtual std::vector GetUInt8Array() const = 0; + virtual std::vector GetUInt16Array() const = 0; + virtual std::vector GetUInt32Array() const = 0; + virtual std::vector GetUInt64Array() const = 0; + virtual std::vector GetFloat32Array() const = 0; + virtual std::vector GetFloat64Array() const = 0; + ///@} + +}; + +} + +#endif diff --git a/src/coreComponents/fileIO/Catalyst/GenericConduitCapsule.hpp b/src/coreComponents/fileIO/Catalyst/GenericConduitCapsule.hpp new file mode 100644 index 00000000000..71a55a252c2 --- /dev/null +++ b/src/coreComponents/fileIO/Catalyst/GenericConduitCapsule.hpp @@ -0,0 +1,162 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2020 TotalEnergies + * Copyright (c) 2019- GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file GenericConduitCapsule.hpp + */ + +#ifndef GEOS_FILEIO_CATALYST_GENERICCONDUITCAPSULE_HPP_ +#define GEOS_FILEIO_CATALYST_GENERICCONDUITCAPSULE_HPP_ + +// source includes +#include "ConduitCapsule.hpp" + +namespace geos +{ + +/** + * @class GenericConduitCapsule + * @brief Helper template class for streamlining capsule creation for classic conduit nodes + */ +template +class GenericConduitCapsule : public ConduitCapsule +{ +public: + + /** + * @brief Constructor following RAII principles + */ + GenericConduitCapsule(ConduitNodeT* node) : Node(node) {} + + /** + * @brief Default destructor since there is no explicit memory responsibility + */ + virtual ~GenericConduitCapsule() = default; + + /** + * @brief Get the number of children this node element has in the hiearchy + * @returns the number of children nodes this node has + */ + virtual std::size_t GetNumberOfChildren() const; + + /** + * @brief Get the iChild'th node below this node + * @param iChild the index of the child node to get + * @returns A shared pointer to the iChild node already encapsulated + */ + virtual std::shared_ptr GetChild(std::size_t iChild); + + /** + * @brief Get the name of the underlying node + * @returns A string with the name of the node + */ + virtual std::string GetName() const; + + ///@{ + /** + * @brief Type checkers for the data held by the node + * @returns true if the data type corresponds to the call + */ + virtual bool IsList() const; + virtual bool IsInt8() const; + virtual bool IsInt16() const; + virtual bool IsInt32() const; + virtual bool IsInt64() const; + virtual bool IsUInt8() const; + virtual bool IsUInt16() const; + virtual bool IsUInt32() const; + virtual bool IsUInt64() const; + virtual bool IsFloat32() const; + virtual bool IsFloat64() const; + virtual bool IsString() const; + ///@} + + ///@{ + /** + * @brief Check if the data held by the node is external + */ + virtual bool IsDataExternal() const; + /** + * @brief Get a void* pointer to the external data when applicable + * @returns pointer to external data when relevant and nullptr if not + */ + virtual void* GetExternalDataPointer() const; + /** + * @brief Get the offset with which to read the external data + * @retuns the offset meta-data + */ + virtual long GetExternalDataOffset() const; + /** + * @brief Get the stride with which to read the external data + * @retuns the stride meta-data + */ + virtual long GetExternalDataStride() const; + /** + * @brief Get the number of bytes one element of external data occupies + * @retuns the element size in bytes meta-data + */ + virtual long GetExternalDataElementBytes() const; + /** + * @brief Get the endianness with which to read the external data + * @retuns the endianness meta-data + */ + virtual long GetExternalDataEndianness() const; + ///@} + + + ///@{ + /** + * Get the values of data for conventional data types + */ + virtual int8_t GetInt8Value() const; + virtual int16_t GetInt16Value() const; + virtual int32_t GetInt32Value() const; + virtual int64_t GetInt64Value() const; + virtual uint8_t GetUInt8Value() const; + virtual uint16_t GetUInt16Value() const; + virtual uint32_t GetUInt32Value() const; + virtual uint64_t GetUInt64Value() const; + virtual float GetFloat32Value() const; + virtual double GetFloat64Value() const; + virtual std::string GetStringValue() const; + ///@} + + ///@{ + /** + * Get the value arrays of data for conventional data types + */ + virtual std::vector GetInt8Array() const; + virtual std::vector GetInt16Array() const; + virtual std::vector GetInt32Array() const; + virtual std::vector GetInt64Array() const; + virtual std::vector GetUInt8Array() const; + virtual std::vector GetUInt16Array() const; + virtual std::vector GetUInt32Array() const; + virtual std::vector GetUInt64Array() const; + virtual std::vector GetFloat32Array() const; + virtual std::vector GetFloat64Array() const; + ///@} + +protected: + + /** + * @brief the pointer to the node being encapsulated + */ + ConduitNodeT* Node; + +}; + +} + +#endif diff --git a/src/coreComponents/fileIO/Catalyst/GenericConduitCapsule.tpp b/src/coreComponents/fileIO/Catalyst/GenericConduitCapsule.tpp new file mode 100644 index 00000000000..4b0b90b553a --- /dev/null +++ b/src/coreComponents/fileIO/Catalyst/GenericConduitCapsule.tpp @@ -0,0 +1,314 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2020 TotalEnergies + * Copyright (c) 2019- GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file GenericConduitCapsule.tpp + */ + +// source includes +#include "GenericConduitCapsule.hpp" + +// external includes +#include + +namespace geos +{ + +template +std::size_t GenericConduitCapsule::GetNumberOfChildren() const +{ + return this->Node->number_of_children(); +} + +template +std::shared_ptr GenericConduitCapsule::GetChild(std::size_t iChild) +{ + if (iChild >= this->GetNumberOfChildren()) + { + return nullptr; + } + return std::make_shared>(this->Node->child_ptr(iChild)); +} + +template +std::string GenericConduitCapsule::GetName() const +{ + return this->Node->name(); +} + +template +bool GenericConduitCapsule::IsList() const +{ + return this->Node->dtype().number_of_elements() > 1; +} + +template +bool GenericConduitCapsule::IsInt8() const +{ + return this->Node->dtype().is_int8(); +} + +template +bool GenericConduitCapsule::IsInt16() const +{ + return this->Node->dtype().is_int16(); +} + +template +bool GenericConduitCapsule::IsInt32() const +{ + return this->Node->dtype().is_int32(); +} + +template +bool GenericConduitCapsule::IsInt64() const +{ + return this->Node->dtype().is_int64(); +} + +template +bool GenericConduitCapsule::IsUInt8() const +{ + return this->Node->dtype().is_uint8(); +} + +template +bool GenericConduitCapsule::IsUInt16() const +{ + return this->Node->dtype().is_uint16(); +} + +template +bool GenericConduitCapsule::IsUInt32() const +{ + return this->Node->dtype().is_uint32(); +} + +template +bool GenericConduitCapsule::IsUInt64() const +{ + return this->Node->dtype().is_uint64(); +} + +template +bool GenericConduitCapsule::IsFloat32() const +{ + return this->Node->dtype().is_float32(); +} + +template +bool GenericConduitCapsule::IsFloat64() const +{ + return this->Node->dtype().is_float64(); +} + +template +bool GenericConduitCapsule::IsString() const +{ + return this->Node->dtype().is_string(); +} + +template +bool GenericConduitCapsule::IsDataExternal() const +{ + return this->Node->is_data_external(); +} + +template +void* GenericConduitCapsule::GetExternalDataPointer() const +{ + return this->Node->data_ptr(); +} + +template +long GenericConduitCapsule::GetExternalDataOffset() const +{ + return this->Node->dtype().offset(); +} + +template +long GenericConduitCapsule::GetExternalDataStride() const +{ + return this->Node->dtype().stride(); +} + +template +long GenericConduitCapsule::GetExternalDataElementBytes() const +{ + return this->Node->dtype().element_bytes(); +} + +template +long GenericConduitCapsule::GetExternalDataEndianness() const +{ + return this->Node->dtype().endianness(); +} + +template +int8_t GenericConduitCapsule::GetInt8Value() const +{ + return this->Node->as_int8(); +} + +template +int16_t GenericConduitCapsule::GetInt16Value() const +{ + return this->Node->as_int16(); +} + +template +int32_t GenericConduitCapsule::GetInt32Value() const +{ + return this->Node->as_int32(); +} + +template +int64_t GenericConduitCapsule::GetInt64Value() const +{ + return this->Node->as_int64(); +} + +template +uint8_t GenericConduitCapsule::GetUInt8Value() const +{ + return this->Node->as_uint8(); +} + +template +uint16_t GenericConduitCapsule::GetUInt16Value() const +{ + return this->Node->as_uint16(); +} + +template +uint32_t GenericConduitCapsule::GetUInt32Value() const +{ + return this->Node->as_uint32(); +} + +template +uint64_t GenericConduitCapsule::GetUInt64Value() const +{ + return this->Node->as_uint64(); +} + +template +float GenericConduitCapsule::GetFloat32Value() const +{ + return this->Node->as_float32(); +} + +template +double GenericConduitCapsule::GetFloat64Value() const +{ + return this->Node->as_float64(); +} + +template +std::string GenericConduitCapsule::GetStringValue() const +{ + return this->Node->as_char8_str(); +} + +template +std::vector GenericConduitCapsule::GetInt8Array() const +{ + auto array = this->Node->as_int8_array(); + std::vector v(array.number_of_elements()); + std::generate(v.begin(), v.end(), [i=-1, array] () mutable {i++;return array.element(i);}); + return v; +} + +template +std::vector GenericConduitCapsule::GetInt16Array() const +{ + auto array = this->Node->as_int16_array(); + std::vector v(array.number_of_elements()); + std::generate(v.begin(), v.end(), [i=-1, array] () mutable {i++;return array.element(i);}); + return v; +} + +template +std::vector GenericConduitCapsule::GetInt32Array() const +{ + auto array = this->Node->as_int32_array(); + std::vector v(array.number_of_elements()); + std::generate(v.begin(), v.end(), [i=-1, array] () mutable {i++;return array.element(i);}); + return v; +} + +template +std::vector GenericConduitCapsule::GetInt64Array() const +{ + auto array = this->Node->as_int64_array(); + std::vector v(array.number_of_elements()); + std::generate(v.begin(), v.end(), [i=-1, array] () mutable {i++;return array.element(i);}); + return v; +} + +template +std::vector GenericConduitCapsule::GetUInt8Array() const +{ + auto array = this->Node->as_uint8_array(); + std::vector v(array.number_of_elements()); + std::generate(v.begin(), v.end(), [i=-1, array] () mutable {i++;return array.element(i);}); + return v; +} + +template +std::vector GenericConduitCapsule::GetUInt16Array() const +{ + auto array = this->Node->as_uint16_array(); + std::vector v(array.number_of_elements()); + std::generate(v.begin(), v.end(), [i=-1, array] () mutable {i++;return array.element(i);}); + return v; +} + +template +std::vector GenericConduitCapsule::GetUInt32Array() const +{ + auto array = this->Node->as_uint32_array(); + std::vector v(array.number_of_elements()); + std::generate(v.begin(), v.end(), [i=-1, array] () mutable {i++;return array.element(i);}); + return v; +} + +template +std::vector GenericConduitCapsule::GetUInt64Array() const +{ + auto array = this->Node->as_uint64_array(); + std::vector v(array.number_of_elements()); + std::generate(v.begin(), v.end(), [i=-1, array] () mutable {i++;return array.element(i);}); + return v; +} + +template +std::vector GenericConduitCapsule::GetFloat32Array() const +{ + auto array = this->Node->as_float32_array(); + std::vector v(array.number_of_elements()); + std::generate(v.begin(), v.end(), [i=-1, array] () mutable {i++;return array.element(i);}); + return v; +} + +template +std::vector GenericConduitCapsule::GetFloat64Array() const +{ + auto array = this->Node->as_float64_array(); + std::vector v(array.number_of_elements()); + std::generate(v.begin(), v.end(), [i=-1, array] () mutable {i++;return array.element(i);}); + return v; +} + +} diff --git a/src/coreComponents/fileIO/Catalyst/README.md b/src/coreComponents/fileIO/Catalyst/README.md new file mode 100644 index 00000000000..f05c331bc59 --- /dev/null +++ b/src/coreComponents/fileIO/Catalyst/README.md @@ -0,0 +1,11 @@ +## Reason for this module + +When trying to input the `conduit::Node` used by the simulation into the `conduit_cpp::Node` needed by `catalyst` we run into an incompatibility between the two conduit libraries which cannot coexist in the same translation unit. As of the time of writing this README, `catalyst` does not have any ready-made solution for this type of collision with simulation codes. + +The solution here is to create a library in this module with the following specifications: +- Provides an interface class defining an API for interacting with generic `conduit` nodes +- Provides utilities to convert any implementation of the above interface into a `conduit_cpp::Node` for passing to `catalyst` +- Links to the `conduit` provided by `catalyst` in its own translation unit +- Provides its own `initialize`, `execute` and `finalize` methods taking care of the conversion from the simulation code's `conduit` and `catalyst`'s version + +As such, for any simulation code already instrumented with `conduit` blueprints, this design pattern enables coexistance and conversion between the two `conduit` versions. The simulation code has but to provide an implementation of the interface in this module (in a separate library that links to this one) and pass it to the specific initialization, execution and finalization methods implemented in this library. The interface node acts as a buffer layer between the two `conduit` libraries and separates the translation units cleanly. diff --git a/src/coreComponents/fileIO/Outputs/BlueprintOutput.cpp b/src/coreComponents/fileIO/Outputs/BlueprintOutput.cpp index 21457e7796e..435a3284209 100644 --- a/src/coreComponents/fileIO/Outputs/BlueprintOutput.cpp +++ b/src/coreComponents/fileIO/Outputs/BlueprintOutput.cpp @@ -36,7 +36,7 @@ namespace internal { /** - * @brief @return The Blueprint shape from the GEOSX element type string. + * @brief @return The Blueprint shape from the GEOS element type string. * @param elementType the elementType to look up. */ string toBlueprintShape( ElementType const elementType ) @@ -138,26 +138,9 @@ bool BlueprintOutput::execute( real64 const time, { GEOS_MARK_FUNCTION; - MeshLevel const & meshLevel = domain.getMeshBody( 0 ).getBaseDiscretization(); - conduit::Node meshRoot; conduit::Node & mesh = meshRoot[ "mesh" ]; - conduit::Node & coordset = mesh[ "coordsets/nodes" ]; - conduit::Node & topologies = mesh[ "topologies" ]; - - mesh[ "state/time" ] = time; - mesh[ "state/cycle" ] = cycle; - - addNodalData( meshLevel.getNodeManager(), coordset, topologies, mesh[ "fields" ] ); - - dataRepository::Group averagedElementData( "averagedElementData", this ); - addElementData( meshLevel.getElemManager(), coordset, topologies, mesh[ "fields" ], averagedElementData ); - - /// The Blueprint will complain if the fields node is present but empty. - if( mesh[ "fields" ].number_of_children() == 0 ) - { - mesh.remove( "fields" ); - } + this->mapMesh(time, cycle, domain, mesh); /// Verify that the mesh conforms to the Blueprint. conduit::Node info; @@ -180,6 +163,35 @@ bool BlueprintOutput::execute( real64 const time, return false; } +/////////////////////////////////////////////////////////////////////////////////////////////////// +void BlueprintOutput::mapMesh( real64 const time, + integer const cycle, + DomainPartition & domain, + conduit::Node & mesh ) +{ + GEOS_MARK_FUNCTION; + + MeshLevel const & meshLevel = domain.getMeshBody( 0 ).getBaseDiscretization(); + + conduit::Node & coordset = mesh[ "coordsets/nodes" ]; + conduit::Node & topologies = mesh[ "topologies" ]; + conduit::Node & fields = mesh[ "fields" ]; + + mesh[ "state/time" ] = time; + mesh[ "state/cycle" ] = cycle; + + addNodalData( meshLevel.getNodeManager(), coordset, topologies, fields ); + + dataRepository::Group averagedElementData( "averagedElementData", this ); + addElementData( meshLevel.getElemManager(), coordset, topologies, fields, averagedElementData ); + + /// The Blueprint will complain if the fields node is present but empty. + if( fields.number_of_children() == 0 ) + { + mesh.remove( "fields" ); + } +} + /////////////////////////////////////////////////////////////////////////////////////////////////// void BlueprintOutput::addNodalData( NodeManager const & nodeManager, conduit::Node & coordset, @@ -257,6 +269,18 @@ void BlueprintOutput::addElementData( ElementRegionManager const & elemRegionMan writeOutWrappersAsFields( constitutiveModel, fields, topologyName, constitutiveModel.getName() ); } } ); + + /// Migrate fields associated with this topology + for (conduit::index_t iTopo = 0; iTopo < fields.number_of_children(); ++iTopo) + { + auto& field = fields.child(iTopo); + if (field["topology"].as_char8_str() == topologyName) + { + topology["fields/"+field.name()] = field; + // fields.remove(field.name()); + } + } + } ); } diff --git a/src/coreComponents/fileIO/Outputs/BlueprintOutput.hpp b/src/coreComponents/fileIO/Outputs/BlueprintOutput.hpp index 7d17570d47d..ce3deae48c1 100644 --- a/src/coreComponents/fileIO/Outputs/BlueprintOutput.hpp +++ b/src/coreComponents/fileIO/Outputs/BlueprintOutput.hpp @@ -80,6 +80,40 @@ class BlueprintOutput : public OutputBase DomainPartition & domain ) override { execute( time_n, 0, cycleNumber, eventCounter, eventProgress, domain ); } +protected: + + /** + * @brief Map the mesh to the conduit blueprint. + * @param time The time value associated with the mesh + * @param cycle The cycle from the execute method. + * @param domain the domain from the execute method + * @param meshRoot the conduit node to map the mesh to. + */ + virtual void mapMesh( real64 const time, + integer const cycle, + DomainPartition & domain, + conduit::Node & meshRoot ); + + /** + * @brief Write out all the children with the appropriate plot level of @p group. + * @param group The group that contains the children to write out. + * @param fields The Blueprint "fields" Node. + * @param topology The name of the Blueprint "topology" that @p group is associated with. + * @param prefix The string to prepend to the name of the field. If not specified no prefix is used. + */ + virtual void writeOutWrappersAsFields( Group const & group, + conduit::Node & fields, + string const & topology, + string const & prefix="" ); + + + virtual void writeOutConstitutiveData( dataRepository::Group const & constitutiveModel, + conduit::Node & fields, + string const & topology, + dataRepository::Group & averagedElementData ); + + dataRepository::PlotLevel getPlotLevel() { return m_plotLevel; } + private: /** @@ -107,23 +141,6 @@ class BlueprintOutput : public OutputBase conduit::Node & fields, dataRepository::Group & averagedElementData ); - /** - * @brief Write out all the children with the appropriate plot level of @p group. - * @param group The group that contains the children to write out. - * @param fields The Blueprint "fields" Node. - * @param topology The name of the Blueprint "topology" that @p group is associated with. - * @param prefix The string to prepend to the name of the field. If not specified no prefix is used. - */ - void writeOutWrappersAsFields( Group const & group, - conduit::Node & fields, - string const & topology, - string const & prefix="" ); - - void writeOutConstitutiveData( dataRepository::Group const & constitutiveModel, - conduit::Node & fields, - string const & topology, - dataRepository::Group & averagedElementData ); - // Used to determine which fields to write out. dataRepository::PlotLevel m_plotLevel = dataRepository::PlotLevel::LEVEL_1; diff --git a/src/coreComponents/fileIO/Outputs/CatalystOutput.cpp b/src/coreComponents/fileIO/Outputs/CatalystOutput.cpp new file mode 100644 index 00000000000..26c96b82e67 --- /dev/null +++ b/src/coreComponents/fileIO/Outputs/CatalystOutput.cpp @@ -0,0 +1,637 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior + * University Copyright (c) 2018-2020 TotalEnergies Copyright (c) 2019- GEOSX + * Contributors All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS + * files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file CatalystOutput.cpp + */ + +// GEOS +#include "CatalystOutput.hpp" + +#if defined(GEOS_USE_PYGEOSX) +#include "fileIO/python/PyCatalystOutputType.hpp" +#endif + +#include "fileIO/Catalyst/CatalystActions.hpp" +#include "fileIO/Catalyst/GenericConduitCapsule.tpp" +#include "mesh/DomainPartition.hpp" +#include "mesh/MeshLevel.hpp" +#include "mesh/mpiCommunications/CommunicationTools.hpp" + +// TPL +#include +#include + +// std +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace { + +void SanitizeSimpleNode(conduit::Node& channel) { + auto& blueprintNode = channel["data"]; + if (blueprintNode["topologies"].number_of_children() > 1) { + GEOS_ERROR( + "CatalystOutput: multi region passed to simple region code path"); + return; + } + std::string topoName = blueprintNode["topologies"].child(0).name(); + auto& fields = blueprintNode["fields"]; + for (conduit::index_t iField = 0; iField < fields.number_of_children(); + ++iField) { + auto& field = fields.child(iField); + if (field["topology"].as_char8_str() == std::string("nodes")) { + field["topology"] = topoName; + field["association"] = "vertex"; + } + } +} + +void SanitizeMultiNodeInSitu(conduit::Node& channel) { + auto& blueprintNode = channel["data"]; + for (conduit::index_t iTopo = 0; iTopo < blueprintNode["topologies"].number_of_children(); ++iTopo) { + auto& topology = blueprintNode["topologies"].child(iTopo); + std::string topoName = topology.name(); + auto& iMesh = blueprintNode[topoName]; + + iMesh["state"].update(blueprintNode["state"]); + + iMesh["coordsets"].update(blueprintNode["coordsets"]); + iMesh["topologies/" + topoName].update(topology); + iMesh["fields"].update(topology["fields"]); + + // Deprec ? + auto& dstFields = iMesh["fields"]; + const auto& srcFields = blueprintNode["fields"]; + for (conduit::index_t iField = 0; iField < srcFields.number_of_children(); ++iField) { + const auto& srcField = srcFields.child(iField); + if (srcField["topology"].as_char8_str() == std::string("nodes")) { + auto& dstField = dstFields[srcField.name()]; + dstField.update(srcField); + dstField["topology"] = topoName; + dstField["association"] = "vertex"; + } else if (srcField["topology"].as_char8_str() == topoName) { + auto& dstField = dstFields[srcField.name()]; + dstField.update(srcField); + } + } + if (dstFields.number_of_children() == 0) { + iMesh.remove("fields"); + } + } + blueprintNode.remove("state"); + blueprintNode.remove("topologies"); + blueprintNode.remove("coordsets"); + blueprintNode.remove("fields"); +} + +struct ScopedData {}; + +template +struct ScopedTypedData : public ScopedData { + public: + ScopedTypedData(T data) : Data(data) {} + + private: + T Data; +}; + +struct ScopedDataContainer : public std::vector> { + public: + template + void Add(T data) { + this->emplace_back( + std::unique_ptr(new ScopedTypedData(data))); + } +}; + +template +std::set ConstructNodeMapping(const IndexT* connectivity, + conduit::index_t size) { + std::set nodeMapping; + for (conduit::index_t iConnect = 0; iConnect < size; ++iConnect) { + nodeMapping.emplace( + static_cast(connectivity[iConnect])); + } + return nodeMapping; +} + +std::set ConstructNodeMapping( + const conduit::Node& connectivity) { + std::string dtype = connectivity.dtype().name(); + conduit::index_t numValues = connectivity.dtype().number_of_elements(); +#define DispatchNameToType(name, type) \ + do { \ + if (dtype == name) { \ + auto res = ConstructNodeMapping( \ + static_cast(connectivity.data_ptr()), numValues); \ + return res; \ + } \ + } while (0) + DispatchNameToType("int8", signed char); + DispatchNameToType("int16", short); + DispatchNameToType("int32", std::int32_t); + DispatchNameToType("int64", std::int64_t); + DispatchNameToType("uint8", unsigned char); + DispatchNameToType("uint16", unsigned short); + DispatchNameToType("uint32", std::uint32_t); + DispatchNameToType("uint64", std::uint64_t); + DispatchNameToType("float32", float); + DispatchNameToType("float64", double); +#undef DispatchNameToType + GEOS_ERROR("Could not dispatch connectivity with type " + dtype); + return std::set(); +} + +template +std::shared_ptr> ConstructConnectivity( + const std::set& nodeMapping, const DataT* src, + conduit_index_t size) { + auto res = std::make_shared>(size); + for (conduit::index_t iConnect = 0; iConnect < size; ++iConnect) { + (*res)[iConnect] = std::distance( + nodeMapping.begin(), + nodeMapping.find(static_cast(src[iConnect]))); + } + return res; +} + +bool DispatchConnectivity(const std::set& nodeMapping, + const conduit::Node& src, conduit::Node& dst, + ScopedDataContainer& dataContainer) { + std::string dtype = src.dtype().name(); + conduit_index_t size = src.dtype().number_of_elements(); +#define DispatchNameToType(name, type) \ + do { \ + if (dtype == name) { \ + auto res = ConstructConnectivity( \ + nodeMapping, static_cast(src.data_ptr()), size); \ + dataContainer.Add(res); \ + dst.set_external(res->data(), res->size()); \ + return true; \ + } \ + } while (0) + DispatchNameToType("int8", signed char); + DispatchNameToType("int16", short); + DispatchNameToType("int32", std::int32_t); + DispatchNameToType("int64", std::int64_t); + DispatchNameToType("uint8", unsigned char); + DispatchNameToType("uint16", unsigned short); + DispatchNameToType("uint32", std::uint32_t); + DispatchNameToType("uint64", std::uint64_t); + DispatchNameToType("float32", float); + DispatchNameToType("float64", double); +#undef DispatchNameToType + GEOS_ERROR("Could not dispatch connectivity type " + dtype); + return false; +} + +template +std::shared_ptr> ConstructReducedField( + const std::set& nodeMapping, const DataT* src, + std::size_t offset, std::size_t stride) { + auto res = std::make_shared>(nodeMapping.size(), 0); + auto resIt = res->begin(); + for (const auto& nodeIndex : nodeMapping) { + *resIt = src[static_cast(nodeIndex) * stride + offset]; + resIt++; + } + return res; +} + +bool DispatchFieldToContainers(const std::set& nodeMapping, + const conduit::Node& src, conduit::Node& dst, + ScopedDataContainer& dataContainer, + std::size_t offset = 0, std::size_t stride = 0) { + std::string dtype = src.dtype().name(); +#define DispatchNameToType(name, type) \ + do { \ + if (dtype == name) { \ + auto res = ConstructReducedField( \ + nodeMapping, static_cast(src.data_ptr()), offset, \ + stride); \ + dataContainer.Add(res); \ + dst.set_external(res->data(), res->size()); \ + return true; \ + } \ + } while (0) + DispatchNameToType("int8", signed char); + DispatchNameToType("int16", short); + DispatchNameToType("int32", std::int32_t); + DispatchNameToType("int64", std::int64_t); + DispatchNameToType("uint8", unsigned char); + DispatchNameToType("uint16", unsigned short); + DispatchNameToType("uint32", std::uint32_t); + DispatchNameToType("uint64", std::uint64_t); + DispatchNameToType("float32", float); + DispatchNameToType("float64", double); +#undef DispatchNameToType + GEOS_ERROR("Could not dispatch field type " + dtype); + return false; +} + +void SanitizeMultiNodeInTransit(conduit::Node& channel, + ScopedDataContainer& dataContainer) { + + GEOS_MARK_FUNCTION; + + auto& blueprintNode = channel["data"]; + for (conduit::index_t iTopo = 0; + iTopo < blueprintNode["topologies"].number_of_children(); ++iTopo) { + const auto& topology = blueprintNode["topologies"].child(iTopo); + + std::string topoName = topology.name(); + auto& iMesh = blueprintNode[topoName]; + + iMesh["state"].update(blueprintNode["state"]); + + const auto& srcConnectivity = topology["elements/connectivity"]; + std::set nodeMapping = ConstructNodeMapping(srcConnectivity); + + iMesh["topologies/" + topoName + "/type"].update(topology["type"]); + iMesh["topologies/" + topoName + "/elements/shape"].update( + topology["elements/shape"]); + iMesh["topologies/" + topoName + "/coordset"].update(topology["coordset"]); + + auto& dstConnectivity = + iMesh["topologies/" + topoName + "/elements/connectivity"]; + if (!DispatchConnectivity(nodeMapping, srcConnectivity, dstConnectivity, + dataContainer)) { + GEOS_ERROR( + "CatalystOutput: SanitizeMultiNodeInTransit: Dispatch of " + "connecitivities failed"); + } + + std::string coordsetName = + std::string("coordsets/") + topology["coordset"].as_char8_str(); + auto& coords = blueprintNode[coordsetName]; + iMesh[coordsetName + "/type"].update(coords["type"]); + std::map xyz = { + {"x", coords["values/x"]}, + {"y", coords["values/y"]}, + {"z", coords["values/z"]}}; + std::size_t offset = 0; + std::size_t stride = 1; + if (!coords.is_contiguous()) { + stride = 3; + } + for (const auto& component : xyz) { + auto& dst = iMesh[coordsetName + "/values/" + component.first]; + if (!DispatchFieldToContainers(nodeMapping, component.second, dst, + dataContainer, offset, stride)) { + GEOS_ERROR( + "CatalystOutput: SanitizeMultiNodeInTransit: Could not " + "dispatch " + + component.second.name() + " field."); + } + } + + const auto& srcFields = blueprintNode["fields"]; + auto& dstFields = iMesh["fields"]; + for (conduit::index_t iField = 0; iField < srcFields.number_of_children(); + ++iField) { + const auto& srcField = srcFields.child(iField); + bool isPointData = + srcField["topology"].as_char8_str() == std::string("nodes"); + bool isCellData = (srcField["topology"].as_char8_str() == topoName); + if (!isPointData && !isCellData) { + continue; + } + auto& dstField = dstFields[srcField.name()]; + if (isCellData) { + dstField.update(srcField); + continue; + } + dstField["topology"] = topoName; + dstField["volume_dependent"].update(srcField["volume_dependent"]); + dstField["association"] = "vertex"; + if (!DispatchFieldToContainers(nodeMapping, srcField["values"], + dstField["values"], dataContainer)) { + GEOS_ERROR( + "CatalystOutput: SanitizeMultiNodeInTransit: Could not " + "dispatch " + + srcField.name() + " field."); + } + } + if (dstFields.number_of_children() == 0) { + iMesh.remove("fields"); + } + } + blueprintNode.remove("state"); + blueprintNode.remove("topologies"); + blueprintNode.remove("coordsets"); + blueprintNode.remove("fields"); +} + +void SanitizeNode(conduit::Node& channel, bool isInTransit, + ScopedDataContainer& dataContainer) { + channel.remove("data/topologies/nodes"); + if (channel["data/topologies"].number_of_children() > 1) { + channel["type"] = "multimesh"; + if (isInTransit) { + SanitizeMultiNodeInTransit(channel, dataContainer); + return; + } + channel.remove("data/fields"); // fields info to use is inside each topologies + SanitizeMultiNodeInSitu(channel); + return; + } + + SanitizeSimpleNode(channel); + return; +} + +} // namespace + +namespace geos { + +struct CatalystOutput::CatalystInternals { + bool initialized = false; + std::string scripts = ""; + std::string implementation = ""; + std::string implementationPath = ""; + std::string adiosConfig = ""; + std::string channelName = "fullfield"; + std::string sstFileName = "gs.bp"; + integer onlyPlotSpecifiedFieldNames = 0; + array1d fieldNames = {}; + + + void initializeCatalyst() { + std::string scriptsCopy = this->scripts; + std::vector scriptList; + std::string delimiter = ":"; + std::size_t pos = scriptsCopy.find(delimiter); + scriptList.emplace_back(scriptsCopy.substr(0, pos)); + scriptsCopy.erase(0, pos + delimiter.length()); + while ((pos = scriptsCopy.find(delimiter)) != std::string::npos) { + scriptList.emplace_back(scriptsCopy.substr(0, pos)); + scriptsCopy.erase(0, pos + delimiter.length()); + } + + if (scriptList.empty() || scriptList[0] == "") { + GEOS_ERROR("CatalystOutput: Constructor: no catalyst scripts found."); + } + + conduit::Node initializer; + for (std::size_t iScr = 0; iScr < scriptList.size(); ++iScr) { + initializer["catalyst/scripts/script" + std::to_string(iScr)] = + scriptList[iScr]; + } + + if (!this->implementation.empty()) { + initializer["catalyst_load/implementation"] = this->implementation; + if (!this->implementationPath.empty()) { + initializer["catalyst_load/search_paths/" + this->implementation] = + this->implementationPath; + } + } + + if (this->implementation == "adios" || + (this->implementation.empty() && + getEnv("CATALYST_IMPLEMENTATION_NAME") == "adios")) { + if (this->adiosConfig == "") { + GEOS_ERROR( + "CatalystOutput: Constructor: Cannot use the catalyst/adios2 " + "implementation without providing an adios2 configuration file."); + } + initializer["adios/config"] = this->adiosConfig; + } + + std::string envSSTfilename = getEnv("CATALYST_SST_FILTENAME"); + if( envSSTfilename != "") { + this->sstFileName = envSSTfilename; + } + + auto capsule = GenericConduitCapsule(&initializer); + if (!CatalystInitialize(&capsule)) { + GEOS_ERROR("CatalystOutput: Constructor: catalyst failed to initialize."); + } + + GEOS_ERROR_IF((this->onlyPlotSpecifiedFieldNames != 0 ) && this->fieldNames.empty(), + GEOS_FMT("{}: the flag onlyPlotSpecifiedFieldNames is different from zero, but fieldNames is empty, which is inconsistent", + catalogName())); + + GEOS_LOG_RANK_0_IF(!this->fieldNames.empty() && this->onlyPlotSpecifiedFieldNames != 0, + GEOS_FMT("{}: found {} fields to plot in fieldNames. These fields will be output regardless of the `plotLevel` specified by the user. No other field will be output.", + catalogName(), std::to_string(this->fieldNames.size()))); + + GEOS_LOG_RANK_0_IF(!this->fieldNames.empty() && this->onlyPlotSpecifiedFieldNames == 0, + GEOS_FMT("{}: found {} fields to plot in fieldNames, in addition to all fields with `plotLevel` smaller or equal to the settings.", + catalogName(), std::to_string(this->fieldNames.size()))); + + this->initialized = true; + } +}; + +/////////////////////////////////////////////////////////////////////////////////////////////////// +CatalystOutput::CatalystOutput(std::string const& name, Group* const parent) + : BlueprintOutput(name, parent), + internal(std::unique_ptr(new CatalystInternals())) { + this->registerWrapper("scripts", &this->internal->scripts) + .setApplyDefaultValue("") + .setInputFlag(dataRepository::InputFlags::REQUIRED) + .setDescription("Column separated paths to the catalyst scripts."); + + this->registerWrapper("implementation", &this->internal->implementation) + .setApplyDefaultValue("") + .setInputFlag(dataRepository::InputFlags::OPTIONAL) + .setDescription("Name of the catalyst implementation to use."); + + this->registerWrapper("implementationPath", + &this->internal->implementationPath) + .setApplyDefaultValue("") + .setInputFlag(dataRepository::InputFlags::OPTIONAL) + .setDescription("Path to the catalyst the implementation to use."); + + this->registerWrapper("adiosConfig", &this->internal->adiosConfig) + .setApplyDefaultValue("") + .setInputFlag(dataRepository::InputFlags::OPTIONAL) + .setDescription( + "Path to the adios configuration file when using the catalyst-adios " + "implementation."); + + this->registerWrapper("fullFieldChannelName", &this->internal->channelName) + .setApplyDefaultValue("") + .setInputFlag(dataRepository::InputFlags::OPTIONAL) + .setDescription( + "Name to give to the channel passing the full field data."); + + this->registerWrapper("onlyPlotSpecifiedFieldNames", &this->internal->onlyPlotSpecifiedFieldNames) + .setApplyDefaultValue(0) + .setInputFlag(dataRepository::InputFlags::OPTIONAL) + .setDescription("If this flag is equal to 1, then we only plot the fields listed in `fieldNames`. Otherwise, we plot all the fields with the required `plotLevel`, plus the fields listed in `fieldNames`"); + + this->registerWrapper( "fieldNames", &this->internal->fieldNames) + .setRTTypeName(rtTypes::CustomTypes::groupNameRefArray ) + .setInputFlag(dataRepository::InputFlags::OPTIONAL ) + .setDescription("Names of the fields to output. If this attribute is specified, GEOSX outputs all the fields specified by the user, regardless of their `plotLevel`"); + +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// +CatalystOutput::~CatalystOutput() = default; + +/////////////////////////////////////////////////////////////////////////////////////////////////// +bool CatalystOutput::execute(real64 const time_n, real64 const /*dt*/, + integer const cycleNumber, + integer const /*eventCounter*/, + real64 const /*eventProgress*/, + DomainPartition& domain) { + GEOS_MARK_FUNCTION; + + if (!this->internal->initialized) { + this->internal->initializeCatalyst(); + } + + conduit::Node executeRoot; + auto& catalystState = executeRoot["catalyst/state"]; + catalystState["timestep"].set(cycleNumber); + catalystState["time"].set(time_n); + catalystState["sstFileName"].set(this->internal->sstFileName); + + auto& channel = + executeRoot["catalyst/channels/" + this->internal->channelName]; + channel["type"] = "mesh"; + + auto& meshGEOSRoot = channel["data"]; + this->mapMesh(time_n, cycleNumber, domain, meshGEOSRoot); + + bool isInTransit = + this->internal->implementation == "adios" || + (this->internal->implementation.empty() && + getEnv("CATALYST_IMPLEMENTATION_NAME") == "adios"); + + ScopedDataContainer dataScoping; + ::SanitizeNode(channel, isInTransit, dataScoping); + + auto capsule = GenericConduitCapsule(&executeRoot); + if (!CatalystExecute(&capsule)) { + GEOS_ERROR("CatalystOutput: execute: catalyst failed to execute."); + return true; + } + + return false; +} + +const std::string CatalystOutput::getEnv( const char* varname ) +{ + char* varptr = std::getenv( varname ); + return varptr == nullptr ? "" : std::string( varptr ); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// +void CatalystOutput::cleanup(real64 const time_n, integer const cycleNumber, + integer const eventCounter, + real64 const eventProgress, + DomainPartition& domain) { + GEOS_MARK_FUNCTION; + + if (this->execute(time_n, 0, cycleNumber, eventCounter, eventProgress, + domain)) { + GEOS_ERROR("CatalystOutput: cleanup: last execute failed."); + } + + conduit::Node emptyNode; + auto capsule = GenericConduitCapsule(&emptyNode); + if (!CatalystFinalize(&capsule)) { + GEOS_ERROR("CatalystOutput: cleanup: finalize catalyst failed"); + } + + this->internal->initialized = false; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// +bool CatalystOutput::isFieldDefined(const std::string& name) +{ + for (std::string fieldName : this->internal->fieldNames) + { + if (fieldName == name) + { + return true; + } + } + return false; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// +void CatalystOutput::writeOutWrappersAsFields( Group const & group, + conduit::Node & fields, + string const & topology, + string const & prefix ) +{ + GEOS_MARK_FUNCTION; + + group.forWrappers( [&] ( dataRepository::WrapperBase const & wrapper ) + { + string const fieldName = prefix.empty() ? wrapper.getName() : prefix + "-" + wrapper.getName(); + + bool plotLevelValid = !this->internal->onlyPlotSpecifiedFieldNames && wrapper.getPlotLevel() <= this->getPlotLevel(); + + if((isFieldDefined(fieldName) || plotLevelValid) && wrapper.sizedFromParent()) + { + // conduit::Node & field = fields[ fieldName ]; + // field[ "association" ] = "element"; + // field[ "volume_dependent" ] = "false"; + // field[ "topology" ] = topology; + // wrapper.populateMCArray( field[ "values" ] ); + + /// TODO: Replace with code above once https://github.com/visit-dav/visit/issues/4637 is fixed and released. + wrapper.addBlueprintField( fields, fieldName, topology ); + } + } ); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// +void CatalystOutput::writeOutConstitutiveData( dataRepository::Group const & constitutiveModel, + conduit::Node & fields, + string const & topology, + dataRepository::Group & averagedSubRegionData ) +{ + GEOS_MARK_FUNCTION; + + Group & averagedConstitutiveData = averagedSubRegionData.registerGroup( constitutiveModel.getName() ); + + constitutiveModel.forWrappers( [&] ( dataRepository::WrapperBase const & wrapper ) + { + string const fieldName = constitutiveModel.getName() + "-quadrature-averaged-" + wrapper.getName(); + + bool plotLevelValid = !this->internal->onlyPlotSpecifiedFieldNames && wrapper.getPlotLevel() <= this->getPlotLevel(); + + if((isFieldDefined(fieldName) || plotLevelValid) && wrapper.sizedFromParent()) + { + averagedConstitutiveData.registerWrapper( wrapper.averageOverSecondDim( fieldName, averagedConstitutiveData ) ). + addBlueprintField( fields, fieldName, topology ); + } + } ); +} + +#if defined(GEOS_USE_PYGEOSX) +PyTypeObject * CatalystOutput::getPythonType() const +{ + return python::getPyCatalystOutputType(); +} +#endif + +REGISTER_CATALOG_ENTRY(OutputBase, CatalystOutput, string const&, + dataRepository::Group* const) + +} // namespace geos diff --git a/src/coreComponents/fileIO/Outputs/CatalystOutput.hpp b/src/coreComponents/fileIO/Outputs/CatalystOutput.hpp new file mode 100644 index 00000000000..f02b841d2da --- /dev/null +++ b/src/coreComponents/fileIO/Outputs/CatalystOutput.hpp @@ -0,0 +1,108 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2020 TotalEnergies + * Copyright (c) 2019- GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file CatalystOutput.hpp + */ + +#ifndef GEOSX_FILEIO_OUTPUTS_CATALYSTOUTPUT_HPP_ +#define GEOSX_FILEIO_OUTPUTS_CATALYSTOUTPUT_HPP_ + +#include "BlueprintOutput.hpp" + +#include // for unique_ptr + +namespace geos +{ + +/** + * @class CatalystOutput + * @brief A class for outputing to a catalyst based in-situ pipeline. + */ +class CatalystOutput : public BlueprintOutput +{ +public: + + /** + * @brief Construct a new CatalystOutput object. + * @param name The name of the CatalystObject in the data repository. + * @param parent The parent Group. + */ + CatalystOutput( string const & name, + Group * const parent ); + + /** + * @brief Destructor. + */ + virtual ~CatalystOutput() override; + + /** + * @brief Get the name used to register this object in an XML file. + * @return The string "Catalyst". + */ + static string catalogName() { return "Catalyst"; } + + /** + * @brief Launches a catalyst execution + * @copydetails EventBase::execute() + */ + virtual bool execute( real64 const time_n, + real64 const dt, + integer const cycleNumber, + integer const eventCounter, + real64 const eventProgress, + DomainPartition & domain ) override; + + /** + * @brief Launches a last catalyst execution for the data present. + * @copydetails ExecutableGroup::cleanup() + */ + virtual void cleanup( real64 const time_n, + integer const cycleNumber, + integer const eventCounter, + real64 const eventProgress, + DomainPartition & domain ) override; + /** + * @brief Return PyCatalystOutput type. + * @return Return PyCatalystOutput type. + */ +#if defined(GEOS_USE_PYGEOSX) + virtual PyTypeObject * getPythonType() const override; +#endif + +private: + static const std::string getEnv( const char* ); + ///@{ + /** + */ + struct CatalystInternals; + std::unique_ptr internal; + ///@} + + bool isFieldDefined(const std::string& name); + + void writeOutWrappersAsFields( Group const & group, + conduit::Node & fields, + string const & topology, + string const & prefix="" ) override; + + void writeOutConstitutiveData( dataRepository::Group const & constitutiveModel, + conduit::Node & fields, + string const & topology, + dataRepository::Group & averagedElementData ) override; +}; + +} + +#endif // GEOSX_FILEIO_OUTPUTS_CATALYSTOUTPUT_HPP_ diff --git a/src/coreComponents/fileIO/python/PyCatalystOutput.cpp b/src/coreComponents/fileIO/python/PyCatalystOutput.cpp new file mode 100644 index 00000000000..8aab9a3caef --- /dev/null +++ b/src/coreComponents/fileIO/python/PyCatalystOutput.cpp @@ -0,0 +1,153 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2023-2024 Kitware + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +#define PY_SSIZE_T_CLEAN +#include + +// Source includes +#include "fileIO/Outputs/CatalystOutput.hpp" +#include "PyCatalystOutputType.hpp" +#include "dataRepository/python/PyGroupType.hpp" + + +#define VERIFY_NON_NULL_SELF( self ) \ + PYTHON_ERROR_IF( self == nullptr, PyExc_RuntimeError, "Passed a nullptr as self.", nullptr ) + +#define VERIFY_INITIALIZED( self ) \ + PYTHON_ERROR_IF( self->group == nullptr, PyExc_RuntimeError, "The PyCatalystOutput is not initialized.", nullptr ) + +namespace geos +{ +namespace python +{ + +struct PyCatalystOutput +{ + PyObject_HEAD + + static constexpr char const * docString = + "A Python interface to CatalystOutput."; + + geos::CatalystOutput * group; +}; + + +static PyObject * PyCatalystOutput_new( PyTypeObject *type, PyObject *args, PyObject *kwds ) +{ + GEOS_UNUSED_VAR( args, kwds ); + PyCatalystOutput *self; + + self = (PyCatalystOutput *)type->tp_alloc( type, 0 ); + if( self != nullptr ) + { + self->group = nullptr; + } + + return (PyObject *)self; +} + + +static PyObject * PyCatalystOutput_repr( PyObject * const obj ) noexcept +{ + PyCatalystOutput const * const pyCatalystOutput = LvArray::python::convert< PyCatalystOutput >( obj, getPyCatalystOutputType() ); + if( pyCatalystOutput == nullptr ) + { + return nullptr; + } + + VERIFY_INITIALIZED( pyCatalystOutput ); + + string repr; + string const path = pyCatalystOutput->group->getPath(); + string const type = LvArray::system::demangle( typeid( *(pyCatalystOutput->group) ).name() ); + repr = path + " ( " + type + " )"; + + return PyUnicode_FromString( repr.c_str() ); + +} + + +static PyObject * output( PyCatalystOutput * self, PyObject * args ) +{ + VERIFY_NON_NULL_SELF( self ); + VERIFY_INITIALIZED( self ); + + double time; + double dt; + + if( !PyArg_ParseTuple( args, "dd", &time, &dt ) ) + { + return nullptr; + } + + geos::DomainPartition & domain = self->group->getGroupByPath< DomainPartition >( "/Problem/domain" ); + + int cycleNumber = int(round( time/dt )); + try + { + self->group->execute( time, dt, cycleNumber, 0, 0, domain ); + } + catch( std::out_of_range const & e ) + { + std::cout << "Target not found. Impossible output."<< std::endl; + } + Py_RETURN_NONE; +} + +static PyObject * reinit( PyCatalystOutput * self, PyObject *args ) +{ + VERIFY_NON_NULL_SELF( self ); + VERIFY_INITIALIZED( self ); + GEOS_UNUSED_VAR( args ); + + self->group->reinit(); + + + Py_RETURN_NONE; +} + + +static PyMethodDef PyCatalystOutput_methods[] = { + { "output", (PyCFunction) output, METH_VARARGS, "wrapper to routine CatalystOutput::execute"}, + { "reinit", (PyCFunction) reinit, METH_VARARGS, "reinitialization function"}, + { nullptr, nullptr, 0, nullptr } /* Sentinel */ +}; + + +/** + * Initialize the module object for Python with the exported functions + */ + +BEGIN_ALLOW_DESIGNATED_INITIALIZERS + +static PyTypeObject PyCatalystOutputType = { + PyVarObject_HEAD_INIT( nullptr, 0 ) + .tp_name = "pygeosx.CatalystOutput", + .tp_basicsize = sizeof( PyCatalystOutput ), + .tp_itemsize = 0, + .tp_repr = PyCatalystOutput_repr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_doc = PyCatalystOutput::docString, + .tp_methods = PyCatalystOutput_methods, + .tp_base = getPyGroupType(), + .tp_new = PyCatalystOutput_new, +}; + +END_ALLOW_DESIGNATED_INITIALIZERS + +PyTypeObject * getPyCatalystOutputType() +{ + return &PyCatalystOutputType; +} + +} +} diff --git a/src/coreComponents/fileIO/python/PyCatalystOutputType.hpp b/src/coreComponents/fileIO/python/PyCatalystOutputType.hpp new file mode 100644 index 00000000000..b84f8e8b840 --- /dev/null +++ b/src/coreComponents/fileIO/python/PyCatalystOutputType.hpp @@ -0,0 +1,17 @@ +#ifndef GEOS_PYTHON_PYCATALYSTOUTPUTTYPE_HPP_ +#define GEOS_PYTHON_PYCATALYSTOUTPUTTYPE_HPP_ + +#include "LvArray/src/python/pythonForwardDeclarations.hpp" +#include "mesh/DomainPartition.hpp" + +namespace geos +{ +namespace python +{ + +PyTypeObject * getPyCatalystOutputType(); + +} // namespace python +} // namespace geos + +#endif diff --git a/src/coreComponents/fileIO/vtk/VTKPolyDataWriterInterface.hpp b/src/coreComponents/fileIO/vtk/VTKPolyDataWriterInterface.hpp index 526c8e3fb77..43e3e23d1d9 100644 --- a/src/coreComponents/fileIO/vtk/VTKPolyDataWriterInterface.hpp +++ b/src/coreComponents/fileIO/vtk/VTKPolyDataWriterInterface.hpp @@ -23,9 +23,13 @@ #include "fileIO/vtk/VTKVTMWriter.hpp" #include "codingUtilities/EnumStrings.hpp" +#include // for mangled namespace + +VTK_ABI_NAMESPACE_BEGIN class vtkUnstructuredGrid; class vtkPointData; class vtkCellData; +VTK_ABI_NAMESPACE_END namespace geos { diff --git a/src/coreComponents/mesh/generators/VTKFaceBlockUtilities.cpp b/src/coreComponents/mesh/generators/VTKFaceBlockUtilities.cpp index 05df2e0a99f..2dc4395b85d 100644 --- a/src/coreComponents/mesh/generators/VTKFaceBlockUtilities.cpp +++ b/src/coreComponents/mesh/generators/VTKFaceBlockUtilities.cpp @@ -573,6 +573,43 @@ Elem2dTo3dInfo buildElem2dTo3dElemAndFaces( vtkSmartPointer< vtkDataSet > faceMe } +/** + * @brief Computes the 2d element to nodes mapping. + * @param num2dElements Number of (2d) elements in the fracture. + * @param faceToNodes The face to nodes mapping. + * @param elem2dToFaces The 2d element to faces mapping. + * @return The computed mapping. + */ +ArrayOfArrays< localIndex > buildElem2dToNodes( vtkIdType num2dElements, + ArrayOfArraysView< localIndex const > faceToNodes, + ArrayOfArraysView< localIndex const > elem2dToFaces ) +{ + ArrayOfArrays< localIndex > elem2dToNodes( LvArray::integerConversion< localIndex >( num2dElements ) ); + for( localIndex elem2dIndex = 0; elem2dIndex < elem2dToFaces.size(); ++elem2dIndex ) + { + for( localIndex const & faceIndex: elem2dToFaces[elem2dIndex] ) + { + if( faceIndex < 0 ) + { + continue; + } + std::set< localIndex > tmp; + for( auto j = 0; j < faceToNodes[faceIndex].size(); ++j ) + { + localIndex const nodeIndex = faceToNodes[faceIndex][j]; + tmp.insert( nodeIndex ); + } + for( localIndex const & nodeIndex: tmp ) + { + elem2dToNodes.emplaceBack( elem2dIndex, nodeIndex ); + } + } + } + + return elem2dToNodes; +} + + /** * @brief Computes the local to global mappings for the 2d elements of the face mesh. * @param faceMeshCellGlobalIds The cell global ids for the face mesh. diff --git a/src/coreComponents/schema/docs/BiotPorosity_other.rst b/src/coreComponents/schema/docs/BiotPorosity_other.rst new file mode 100644 index 00000000000..962677d8251 --- /dev/null +++ b/src/coreComponents/schema/docs/BiotPorosity_other.rst @@ -0,0 +1,19 @@ + + +===================================== ============== ==================================================================================================== +Name Type Description +===================================== ============== ==================================================================================================== +averageMeanEffectiveStressIncrement_k real64_array Mean effective stress increment averaged over quadrature points at the previous sequential iteration +biotCoefficient real64_array Biot coefficient +dPorosity_dPressure real64_array2d Derivative of rock porosity with respect to pressure +dPorosity_dTemperature real64_array2d Derivative of rock porosity with respect to temperature +initialPorosity real64_array2d Initial porosity +meanEffectiveStressIncrement_k real64_array2d Mean effective stress increment at quadrature points at the previous sequential iteration +porosity real64_array2d Rock porosity +porosity_n real64_array2d Rock porosity at the previous converged time step +referencePorosity real64_array Reference porosity +solidBulkModulus real64_array Solid bulk modulus +thermalExpansionCoefficient real64_array Thermal expansion coefficient +===================================== ============== ==================================================================================================== + + diff --git a/src/coreComponents/schema/docs/Catalyst.rst b/src/coreComponents/schema/docs/Catalyst.rst new file mode 100644 index 00000000000..a8369f04372 --- /dev/null +++ b/src/coreComponents/schema/docs/Catalyst.rst @@ -0,0 +1,18 @@ + + +======================== ============================= ======== ================================================================================== +Name Type Default Description +======================== ============================= ======== ================================================================================== +adiosConfig string Path to the adios configuration file when using the catalyst-adios implementation. +childDirectory string Child directory path +fullFieldChannelName string Name to give to the channel passing the full field data. +implementation string Name of the catalyst implementation to use. +implementationPath string Path to the catalyst the implementation to use. +name string required A name is required for any non-unique nodes +outputFullQuadratureData integer 0 If true writes out data associated with every quadrature point. +parallelThreads integer 1 Number of plot files. +plotLevel geos_dataRepository_PlotLevel 1 Determines which fields to write. +scripts string required Column separated paths to the catalyst scripts. +======================== ============================= ======== ================================================================================== + + diff --git a/src/coreComponents/schema/docs/Catalyst_other.rst b/src/coreComponents/schema/docs/Catalyst_other.rst new file mode 100644 index 00000000000..adf1c1b8aec --- /dev/null +++ b/src/coreComponents/schema/docs/Catalyst_other.rst @@ -0,0 +1,9 @@ + + +==== ==== ============================ +Name Type Description +==== ==== ============================ + (no documentation available) +==== ==== ============================ + + diff --git a/src/coreComponents/schema/docs/Outputs.rst b/src/coreComponents/schema/docs/Outputs.rst new file mode 100644 index 00000000000..d7f59c47e9f --- /dev/null +++ b/src/coreComponents/schema/docs/Outputs.rst @@ -0,0 +1,16 @@ + + +=========== ==== ======= ====================== +Name Type Default Description +=========== ==== ======= ====================== +Blueprint node :ref:`XML_Blueprint` +Catalyst node :ref:`XML_Catalyst` +ChomboIO node :ref:`XML_ChomboIO` +Python node :ref:`XML_Python` +Restart node :ref:`XML_Restart` +Silo node :ref:`XML_Silo` +TimeHistory node :ref:`XML_TimeHistory` +VTK node :ref:`XML_VTK` +=========== ==== ======= ====================== + + diff --git a/src/coreComponents/schema/docs/Outputs_other.rst b/src/coreComponents/schema/docs/Outputs_other.rst new file mode 100644 index 00000000000..b2ee8317624 --- /dev/null +++ b/src/coreComponents/schema/docs/Outputs_other.rst @@ -0,0 +1,16 @@ + + +=========== ==== ================================ +Name Type Description +=========== ==== ================================ +Blueprint node :ref:`DATASTRUCTURE_Blueprint` +Catalyst node :ref:`DATASTRUCTURE_Catalyst` +ChomboIO node :ref:`DATASTRUCTURE_ChomboIO` +Python node :ref:`DATASTRUCTURE_Python` +Restart node :ref:`DATASTRUCTURE_Restart` +Silo node :ref:`DATASTRUCTURE_Silo` +TimeHistory node :ref:`DATASTRUCTURE_TimeHistory` +VTK node :ref:`DATASTRUCTURE_VTK` +=========== ==== ================================ + + diff --git a/src/coreComponents/schema/schema.xsd b/src/coreComponents/schema/schema.xsd index a8430b98131..1c98ee80ec4 100644 --- a/src/coreComponents/schema/schema.xsd +++ b/src/coreComponents/schema/schema.xsd @@ -283,6 +283,10 @@ + + + + @@ -2024,6 +2028,7 @@ the relative residual norm satisfies: + @@ -2044,6 +2049,22 @@ the relative residual norm satisfies: + + + + + + + + + + + + + + + + diff --git a/src/coreComponents/schema/schema.xsd.other b/src/coreComponents/schema/schema.xsd.other index d59f6b947e5..3fd756dcff6 100644 --- a/src/coreComponents/schema/schema.xsd.other +++ b/src/coreComponents/schema/schema.xsd.other @@ -476,6 +476,7 @@ + @@ -485,6 +486,7 @@ + @@ -1497,8 +1499,8 @@ - - + + @@ -1509,8 +1511,8 @@ - - + + diff --git a/src/coreComponents/unitTests/constitutiveTests/testMultiFluid.cpp b/src/coreComponents/unitTests/constitutiveTests/testMultiFluid.cpp new file mode 100644 index 00000000000..4eac29de507 --- /dev/null +++ b/src/coreComponents/unitTests/constitutiveTests/testMultiFluid.cpp @@ -0,0 +1,1173 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2020 TotalEnergies + * Copyright (c) 2019- GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +// Source includes +#include "common/DataTypes.hpp" +#include "common/TimingMacros.hpp" +#include "constitutive/fluid/multifluid/MultiFluidFields.hpp" +#include "constitutive/fluid/multifluid/MultiFluidSelector.hpp" +#include "constitutive/fluid/multifluid/MultiFluidUtils.hpp" +#include "unitTests/fluidFlowTests/testCompFlowUtils.hpp" +#include "mainInterface/initialization.hpp" +#include "functions/FunctionManager.hpp" +#include "mainInterface/GeosxState.hpp" + +// TPL includes +#include +#include + +using namespace geos; +using namespace geos::testing; +using namespace geos::constitutive; +using namespace geos::constitutive::multifluid; +using namespace geos::dataRepository; +using namespace geos::constitutive::PVTProps; + +/// Black-oil tables written into temporary files during testing + +static const char * pvtoTableContent = "# Rs[sm3/sm3]\tPbub[Pa]\tBo[m3/sm3]\tVisc(Pa.s)\n" + "\n" + " 2\t 2000000\t 1.02\t 0.000975\n" + " 5\t 5000000\t 1.03\t 0.00091\n" + " 10\t 10000000\t1.04\t 0.00083\n" + " 15\t 20000000\t1.05\t 0.000695\n" + " 90000000\t1.03\t 0.000985 -- some line comment\n" + " 30\t 30000000\t1.07\t 0.000594\n" + " 40\t 40000000\t1.08\t 0.00051\n" + " 50000000\t1.07\t 0.000549 -- another one\n" + " 90000000\t1.06\t 0.00074\n" + " 50\t 50000000.7\t1.09\t 0.000449\n" + " 90000000.7\t1.08\t 0.000605"; + +static const char * pvtwTableContent = "#\tPref[Pa]\tBw[m3/sm3]\tCp[1/Pa]\t Visc[Pa.s]\n" + "\t30600000.1\t1.03\t\t0.00000000041\t0.0003"; + +/// Dead-oil tables written into temporary files during testing + +static const char * pvdgTableContent = "# Pg(Pa) Bg(m3/sm3) Visc(Pa.s)\n" + "3000000 0.04234 0.00001344\n" + "6000000 0.02046 0.0000142\n" + "9000000 0.01328 0.00001526\n" + "12000000 0.00977 0.0000166\n" + "15000000 0.00773 0.00001818\n" + "18000000 0.006426 0.00001994\n" + "21000000 0.005541 0.00002181\n" + "24000000 0.004919 0.0000237\n" + "27000000 0.004471 0.00002559\n" + "29500000 0.004194 0.00002714\n" + "31000000 0.004031 0.00002806\n" + "33000000 0.00391 0.00002832\n" + "53000000 0.003868 0.00002935"; + +static const char * pvdoTableContent = "#P[Pa] Bo[m3/sm3] Visc(Pa.s)\n" + "10000000.0 1.23331 0.00015674\n" + "12500000.0 1.21987 0.00016570\n" + "15000000.0 1.20802 0.00017445\n" + "20000000.0 1.18791 0.00019143\n" + "25000000.0 1.17137 0.00020779\n" + "30000000.0 1.15742 0.00022361\n" + "33200000.3 1.14946 0.00023359\n" + "35000000.0 1.14543 0.00023894\n" + "40000000.0 1.13498 0.00025383\n" + "50000000.0 1.11753 0.00028237\n" + "60000000.0 1.10346 0.00030941\n" + "70000000.0 1.09180 0.00033506\n" + "80000000.0 1.08194 0.00035945\n" + "90000000.0 1.07347 0.00038266\n" + "95000000.0 1.06966 0.00039384\n" + "100000000.0 1.06610 0.00040476\n" + "110000000.0 1.05961 0.00042584\n" + "112500000.0 1.05811 0.00043096\n" + "115000000.0 1.05665 0.00043602\n" + "117500000.0 1.05523 0.00044102\n" + "120000000.0 1.05385 0.00044596\n"; + +static const char * pvdwTableContent = "# Pref[Pa] Bw[m3/sm3] Cp[1/Pa] Visc[Pa.s]\n" + " 30600000.1 1.03 0.00000000041 0.0003"; + +// CO2-brine model + +static const char * pvtLiquidPhillipsTableContent = "DensityFun PhillipsBrineDensity 1e6 1.5e7 5e4 367.15 369.15 1 0.2\n" + "ViscosityFun PhillipsBrineViscosity 0.1"; + +// the last are set relatively high (1e-4) to increase derivative value and check it properly +static const char * pvtLiquidEzrokhiTableContent = "DensityFun EzrokhiBrineDensity 2.01e-6 -6.34e-7 1e-4\n" + "ViscosityFun EzrokhiBrineViscosity 2.42e-7 0 1e-4"; + +static const char * pvtGasTableContent = "DensityFun SpanWagnerCO2Density 1e6 1.5e7 5e4 367.15 369.15 1\n" + "ViscosityFun FenghourCO2Viscosity 1e6 1.5e7 5e4 367.15 369.15 1"; + +static const char * co2FlashTableContent = "FlashModel CO2Solubility 1e6 1.5e7 5e4 367.15 369.15 1 0.15"; + +void testNumericalDerivatives( MultiFluidBase & fluid, + Group & parent, + real64 const P, + real64 const T, + arraySlice1d< real64 > const & compositionInput, + real64 const perturbParameter, + bool usePVTPackage, + real64 const relTol, + real64 const absTol = std::numeric_limits< real64 >::max() ) +{ + using Deriv = multifluid::DerivativeOffset; + + integer const NC = fluid.numFluidComponents(); + integer const NP = fluid.numFluidPhases(); + integer const NDOF = NC+2; + + // Copy input values into an array with expected layout + array2d< real64, compflow::LAYOUT_COMP > compositionValues( 1, NC ); + for( integer i = 0; i < NC; ++i ) + { + compositionValues[0][i] = compositionInput[i]; + } + arraySlice1d< real64 const, compflow::USD_COMP - 1 > const composition = compositionValues[0]; + + auto const & components = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::componentNamesString() ); + auto const & phases = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::phaseNamesString() ); + + // create a clone of the fluid to run updates on + std::unique_ptr< ConstitutiveBase > fluidCopyPtr = fluid.deliverClone( "fluidCopy", &parent ); + MultiFluidBase & fluidCopy = dynamicCast< MultiFluidBase & >( *fluidCopyPtr ); + + fluid.allocateConstitutiveData( fluid.getParent(), 1 ); + fluidCopy.allocateConstitutiveData( fluid.getParent(), 1 ); + + // extract data views from both fluids + #define GET_FLUID_DATA( FLUID, TRAIT ) \ + FLUID.getReference< TRAIT::type >( TRAIT::key() )[0][0] + + MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 > phaseFrac { + GET_FLUID_DATA( fluid, fields::multifluid::phaseFraction ), + GET_FLUID_DATA( fluid, fields::multifluid::dPhaseFraction ) + }; + + MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 > phaseDens { + GET_FLUID_DATA( fluid, fields::multifluid::phaseDensity ), + GET_FLUID_DATA( fluid, fields::multifluid::dPhaseDensity ) + }; + + MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 > phaseVisc { + GET_FLUID_DATA( fluid, fields::multifluid::phaseViscosity ), + GET_FLUID_DATA( fluid, fields::multifluid::dPhaseViscosity ) + }; + + MultiFluidVarSlice< real64, 2, USD_PHASE_COMP - 2, USD_PHASE_COMP_DC - 2 > phaseCompFrac { + GET_FLUID_DATA( fluid, fields::multifluid::phaseCompFraction ), + GET_FLUID_DATA( fluid, fields::multifluid::dPhaseCompFraction ) + }; + + MultiFluidVarSlice< real64, 0, USD_FLUID - 2, USD_FLUID_DC - 2 > totalDens { + GET_FLUID_DATA( fluid, fields::multifluid::totalDensity ), + GET_FLUID_DATA( fluid, fields::multifluid::dTotalDensity ) + }; + + auto const & phaseFracCopy = GET_FLUID_DATA( fluidCopy, fields::multifluid::phaseFraction ); + auto const & phaseDensCopy = GET_FLUID_DATA( fluidCopy, fields::multifluid::phaseDensity ); + auto const & phaseViscCopy = GET_FLUID_DATA( fluidCopy, fields::multifluid::phaseViscosity ); + auto const & phaseCompFracCopy = GET_FLUID_DATA( fluidCopy, fields::multifluid::phaseCompFraction ); + auto totalDensCopy = [&]() { return GET_FLUID_DATA( fluidCopy, fields::multifluid::totalDensity ); }; + +#undef GET_FLUID_DATA + + // set the original fluid state to current + constitutive::constitutiveUpdatePassThru( fluid, [&] ( auto & castedFluid ) + { + typename TYPEOFREF( castedFluid ) ::KernelWrapper fluidWrapper = castedFluid.createKernelWrapper(); + fluidWrapper.update( 0, 0, P, T, composition ); + } ); + + // now perturb variables and update the copied fluid's state + constitutive::constitutiveUpdatePassThru( fluidCopy, [&] ( auto & castedFluid ) + { + typename TYPEOFREF( castedFluid ) ::KernelWrapper fluidWrapper = castedFluid.createKernelWrapper(); + + // to be able to use the checkDerivative utility function, we have to invert the layout + auto dPhaseFrac = invertLayout( phaseFrac.derivs.toSliceConst(), NP, NDOF ); + auto dPhaseDens = invertLayout( phaseDens.derivs.toSliceConst(), NP, NDOF ); + auto dPhaseVisc = invertLayout( phaseVisc.derivs.toSliceConst(), NP, NDOF ); + auto dTotalDens = invertLayout( totalDens.derivs.toSliceConst(), NDOF ); + auto dPhaseCompFrac = invertLayout( phaseCompFrac.derivs.toSliceConst(), NP, NC, NDOF ); + + // update pressure and check derivatives + { + real64 const dP = perturbParameter * (P + perturbParameter); + fluidWrapper.update( 0, 0, P + dP, T, composition ); + + checkDerivative( phaseFracCopy.toSliceConst(), phaseFrac.value.toSliceConst(), dPhaseFrac[Deriv::dP].toSliceConst(), + dP, relTol, absTol, "phaseFrac", "Pres", phases ); + checkDerivative( phaseDensCopy.toSliceConst(), phaseDens.value.toSliceConst(), dPhaseDens[Deriv::dP].toSliceConst(), + dP, relTol, absTol, "phaseDens", "Pres", phases ); + checkDerivative( phaseViscCopy.toSliceConst(), phaseVisc.value.toSliceConst(), dPhaseVisc[Deriv::dP].toSliceConst(), + dP, relTol, absTol, "phaseVisc", "Pres", phases ); + checkDerivative( totalDensCopy(), totalDens.value, dTotalDens[Deriv::dP], + dP, relTol, absTol, "totalDens", "Pres" ); + checkDerivative( phaseCompFracCopy.toSliceConst(), phaseCompFrac.value.toSliceConst(), dPhaseCompFrac[Deriv::dP].toSliceConst(), + dP, relTol, absTol, "phaseCompFrac", "Pres", phases, components ); + } + + // update temperature and check derivatives + { + real64 const dT = perturbParameter * (T + perturbParameter); + fluidWrapper.update( 0, 0, P, T + dT, composition ); + + checkDerivative( phaseFracCopy.toSliceConst(), phaseFrac.value.toSliceConst(), dPhaseFrac[Deriv::dT].toSliceConst(), + dT, relTol, absTol, "phaseFrac", "Temp", phases ); + checkDerivative( phaseDensCopy.toSliceConst(), phaseDens.value.toSliceConst(), dPhaseDens[Deriv::dT].toSliceConst(), + dT, relTol, absTol, "phaseDens", "Temp", phases ); + checkDerivative( phaseViscCopy.toSliceConst(), phaseVisc.value.toSliceConst(), dPhaseVisc[Deriv::dT].toSliceConst(), + dT, relTol, absTol, "phaseVisc", "Temp", phases ); + checkDerivative( totalDensCopy(), totalDens.value, dTotalDens[Deriv::dT], + dT, relTol, absTol, "totalDens", "Temp" ); + checkDerivative( phaseCompFracCopy.toSliceConst(), phaseCompFrac.value.toSliceConst(), dPhaseCompFrac[Deriv::dT].toSliceConst(), + dT, relTol, absTol, "phaseCompFrac", "Temp", phases, components ); + } + + array2d< real64, compflow::LAYOUT_COMP > compNew( 1, NC ); + for( integer jc = 0; jc < NC; ++jc ) + { + real64 const dC = perturbParameter * ( composition[jc] + perturbParameter ); + for( integer ic = 0; ic < NC; ++ic ) + { + compNew[0][ic] = composition[ic]; + } + compNew[0][jc] += dC; + + // Note: in PVTPackage, derivatives are obtained with finite-difference approx **with normalization of the comp fraction** + // The component fraction is perturbed (just as above), and then all the component fractions are normalized (as below) + // But, in the native DO model and in CO2BrinePhillips, derivatives are computed analytically, which results in different + // derivatives wrt component fractions--although the derivatives wrt component densities obtained with the chain rule + // in the solver will be very similar (see discussion on PR #1325 on GitHub). + // + // Since both approaches--FD approximation of derivatives with normalization, and analytical derivatives--are correct, + // we have to support both when we check the intermediate derivatives wrt component fractions below. Therefore, if the + // PVTPackage is used, then we normalize the perturbed component fractions before taking the FD approx. If the native + // DO or CO2-brine models are used, we skip the normalization below. + if( usePVTPackage ) + { + // renormalize + real64 sum = 0.0; + for( integer ic = 0; ic < NC; ++ic ) + { + sum += compNew[0][ic]; + } + for( integer ic = 0; ic < NC; ++ic ) + { + compNew[0][ic] /= sum; + } + } + + fluidWrapper.update( 0, 0, P, T, compNew[0] ); + + string const var = "compFrac[" + components[jc] + "]"; + checkDerivative( phaseFracCopy.toSliceConst(), phaseFrac.value.toSliceConst(), dPhaseFrac[Deriv::dC+jc].toSliceConst(), + dC, relTol, absTol, "phaseFrac", var, phases ); + checkDerivative( phaseDensCopy.toSliceConst(), phaseDens.value.toSliceConst(), dPhaseDens[Deriv::dC+jc].toSliceConst(), + dC, relTol, absTol, "phaseDens", var, phases ); + checkDerivative( phaseViscCopy.toSliceConst(), phaseVisc.value.toSliceConst(), dPhaseVisc[Deriv::dC+jc].toSliceConst(), + dC, relTol, absTol, "phaseVisc", var, phases ); + checkDerivative( totalDensCopy(), totalDens.value, dTotalDens[Deriv::dC+jc], + dC, relTol, absTol, "totalDens", var ); + checkDerivative( phaseCompFracCopy.toSliceConst(), phaseCompFrac.value.toSliceConst(), dPhaseCompFrac[Deriv::dC+jc].toSliceConst(), + dC, relTol, absTol, "phaseCompFrac", var, phases, components ); + } + } ); +} + +void testValuesAgainstPreviousImplementation( CO2BrinePhillipsFluid::KernelWrapper const & wrapper, + real64 const P, + real64 const T, + arraySlice1d< real64 const > const & compositionInput, + real64 const & savedTotalDensity, + real64 const & savedGasPhaseFrac, + real64 const & savedWaterDens, + real64 const & savedGasDens, + real64 const & savedWaterMassDens, + real64 const & savedGasMassDens, + real64 const & savedWaterVisc, + real64 const & savedGasVisc, + real64 const & savedWaterPhaseGasComp, + real64 const & savedWaterPhaseWaterComp, + real64 const relTol ) +{ + integer constexpr numPhase = 2; + integer constexpr numComp = 2; + integer constexpr numDof = numComp + 2; + + // Copy input values into an array with expected layout + array2d< real64, compflow::LAYOUT_COMP > compositionValues( 1, numComp ); + for( integer i = 0; i < numComp; ++i ) + { + compositionValues[0][i] = compositionInput[i]; + } + arraySlice1d< real64 const, compflow::USD_COMP - 1 > const composition = compositionValues[0]; + + StackArray< real64, 3, numPhase, LAYOUT_PHASE > phaseFraction( 1, 1, numPhase ); + StackArray< real64, 4, numDof *numPhase, LAYOUT_PHASE_DC > dPhaseFraction( 1, 1, numPhase, numDof ); + StackArray< real64, 3, numPhase, LAYOUT_PHASE > phaseDensity( 1, 1, numPhase ); + StackArray< real64, 4, numDof *numPhase, LAYOUT_PHASE_DC > dPhaseDensity( 1, 1, numPhase, numDof ); + StackArray< real64, 3, numPhase, LAYOUT_PHASE > phaseMassDensity( 1, 1, numPhase ); + StackArray< real64, 4, numDof *numPhase, LAYOUT_PHASE_DC > dPhaseMassDensity( 1, 1, numPhase, numDof ); + StackArray< real64, 3, numPhase, LAYOUT_PHASE > phaseViscosity( 1, 1, numPhase ); + StackArray< real64, 4, numDof *numPhase, LAYOUT_PHASE_DC > dPhaseViscosity( 1, 1, numPhase, numDof ); + StackArray< real64, 3, numPhase, LAYOUT_PHASE > phaseEnthalpy( 1, 1, numPhase ); + StackArray< real64, 4, numDof *numPhase, LAYOUT_PHASE_DC > dPhaseEnthalpy( 1, 1, numPhase, numDof ); + StackArray< real64, 3, numPhase, LAYOUT_PHASE > phaseInternalEnergy( 1, 1, numPhase ); + StackArray< real64, 4, numDof *numPhase, LAYOUT_PHASE_DC > dPhaseInternalEnergy( 1, 1, numPhase, numDof ); + StackArray< real64, 4, numComp *numPhase, LAYOUT_PHASE_COMP > phaseCompFraction( 1, 1, numPhase, numComp ); + StackArray< real64, 5, numDof *numComp *numPhase, LAYOUT_PHASE_COMP_DC > dPhaseCompFraction( 1, 1, numPhase, numComp, numDof ); + StackArray< real64, 2, 1, LAYOUT_FLUID > totalDensity( 1, 1 ); + StackArray< real64, 3, numDof, LAYOUT_FLUID_DC > dTotalDensity( 1, 1, numDof ); + + wrapper.compute( P, T, composition, + { + phaseFraction[0][0], + dPhaseFraction[0][0] + }, + { + phaseDensity[0][0], + dPhaseDensity[0][0] + }, + { + phaseMassDensity[0][0], + dPhaseMassDensity[0][0] + }, + { + phaseViscosity[0][0], + dPhaseViscosity[0][0] + }, + { + phaseEnthalpy[0][0], + dPhaseEnthalpy[0][0] + }, + { + phaseInternalEnergy[0][0], + dPhaseInternalEnergy[0][0] + }, + { + phaseCompFraction[0][0], + dPhaseCompFraction[0][0] + }, + { + totalDensity[0][0], + dTotalDensity[0][0] + } ); + + checkRelativeError( totalDensity[0][0], savedTotalDensity, relTol ); + for( integer ip = 0; ip < numPhase; ++ip ) + { + real64 const savedPhaseFrac = ( ip == 0 ) ? savedGasPhaseFrac : 1 - savedGasPhaseFrac; + checkRelativeError( phaseFraction[0][0][ip], savedPhaseFrac, relTol ); + real64 const savedPhaseDens = ( ip == 0 ) ? savedGasDens : savedWaterDens; + checkRelativeError( phaseDensity[0][0][ip], savedPhaseDens, relTol ); + real64 const savedPhaseMassDens = ( ip == 0 ) ? savedGasMassDens : savedWaterMassDens; + checkRelativeError( phaseMassDensity[0][0][ip], savedPhaseMassDens, relTol ); + real64 const savedPhaseVisc = ( ip == 0 ) ? savedGasVisc : savedWaterVisc; + checkRelativeError( phaseViscosity[0][0][ip], savedPhaseVisc, relTol ); + for( integer ic = 0; ic < numComp; ++ic ) + { + real64 savedCompFrac = 0.0; + if( ip == 0 ) + { + savedCompFrac = ( ic == 0 ) ? 1 : 0; + } + else + { + savedCompFrac = ( ic == 0 ) ? savedWaterPhaseGasComp : savedWaterPhaseWaterComp; + } + checkRelativeError( phaseCompFraction[0][0][ip][ic], savedCompFrac, relTol ); + } + } +} + +MultiFluidBase & makeCompositionalFluid( string const & name, Group & parent ) +{ + CompositionalMultiphaseFluidPVTPackage & fluid = parent.registerGroup< CompositionalMultiphaseFluidPVTPackage >( name ); + + // TODO we should actually create a fake XML node with data, but this seemed easier... + + auto & compNames = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::componentNamesString() ); + compNames.resize( 4 ); + compNames[0] = "N2"; compNames[1] = "C10"; compNames[2] = "C20"; compNames[3] = "H20"; + + auto & molarWgt = fluid.getReference< array1d< real64 > >( MultiFluidBase::viewKeyStruct::componentMolarWeightString() ); + molarWgt.resize( 4 ); + molarWgt[0] = 28e-3; molarWgt[1] = 134e-3; molarWgt[2] = 275e-3; molarWgt[3] = 18e-3; + + auto & phaseNames = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::phaseNamesString() ); + phaseNames.resize( 2 ); + phaseNames[0] = "oil"; phaseNames[1] = "gas"; + + auto & eqnOfState = fluid.getReference< string_array >( CompositionalMultiphaseFluidPVTPackage::viewKeyStruct::equationsOfStateString() ); + eqnOfState.resize( 2 ); + eqnOfState[0] = "PR"; eqnOfState[1] = "PR"; + + auto & critPres = fluid.getReference< array1d< real64 > >( CompositionalMultiphaseFluidPVTPackage::viewKeyStruct::componentCriticalPressureString() ); + critPres.resize( 4 ); + critPres[0] = 34e5; critPres[1] = 25.3e5; critPres[2] = 14.6e5; critPres[3] = 220.5e5; + + auto & critTemp = fluid.getReference< array1d< real64 > >( CompositionalMultiphaseFluidPVTPackage::viewKeyStruct::componentCriticalTemperatureString() ); + critTemp.resize( 4 ); + critTemp[0] = 126.2; critTemp[1] = 622.0; critTemp[2] = 782.0; critTemp[3] = 647.0; + + auto & acFactor = fluid.getReference< array1d< real64 > >( CompositionalMultiphaseFluidPVTPackage::viewKeyStruct::componentAcentricFactorString() ); + acFactor.resize( 4 ); + acFactor[0] = 0.04; acFactor[1] = 0.443; acFactor[2] = 0.816; acFactor[3] = 0.344; + + fluid.postProcessInputRecursive(); + return fluid; +} + +class CompositionalFluidTestBase : public ::testing::Test +{ +public: + CompositionalFluidTestBase(): + node(), + parent( "parent", node ) + {} + +protected: + conduit::Node node; + Group parent; + MultiFluidBase * fluid; +}; + +class CompositionalFluidTest : public CompositionalFluidTestBase +{ +public: + CompositionalFluidTest() + { + parent.resize( 1 ); + fluid = &makeCompositionalFluid( "fluid", parent ); + + parent.initialize(); + parent.initializePostInitialConditions(); + } +}; + +TEST_F( CompositionalFluidTest, numericalDerivativesMolar ) +{ + fluid->setMassFlag( false ); + + // TODO test over a range of values + real64 const P = 5e6; + real64 const T = 297.15; + array1d< real64 > comp( 4 ); + comp[0] = 0.099; comp[1] = 0.3; comp[2] = 0.6; comp[3] = 0.001; + + real64 const eps = sqrt( std::numeric_limits< real64 >::epsilon()); + real64 const relTol = 1e-4; + + testNumericalDerivatives( *fluid, parent, P, T, comp, eps, true, relTol ); +} + +TEST_F( CompositionalFluidTest, numericalDerivativesMass ) +{ + fluid->setMassFlag( true ); + + // TODO test over a range of values + real64 const P = 5e6; + real64 const T = 297.15; + array1d< real64 > comp( 4 ); + comp[0] = 0.099; comp[1] = 0.3; comp[2] = 0.6; comp[3] = 0.001; + + real64 const eps = sqrt( std::numeric_limits< real64 >::epsilon()); + real64 const relTol = 1e-2; + + testNumericalDerivatives( *fluid, parent, P, T, comp, eps, true, relTol ); +} + +MultiFluidBase & makeLiveOilFluid( string const & name, Group * parent ) +{ + BlackOilFluid & fluid = parent->registerGroup< BlackOilFluid >( name ); + + string_array & compNames = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::componentNamesString() ); + compNames.resize( 3 ); + compNames[0] = "oil"; compNames[1] = "gas"; compNames[2] = "water"; + + array1d< real64 > & molarWgt = fluid.getReference< array1d< real64 > >( MultiFluidBase::viewKeyStruct::componentMolarWeightString() ); + molarWgt.resize( 3 ); + molarWgt[0] = 114e-3; molarWgt[1] = 16e-3; molarWgt[2] = 18e-3; + + string_array & phaseNames = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::phaseNamesString() ); + phaseNames.resize( 3 ); + phaseNames[0] = "oil"; phaseNames[1] = "gas"; phaseNames[2] = "water"; + + array1d< real64 > & surfaceDens = fluid.getReference< array1d< real64 > >( BlackOilFluidBase::viewKeyStruct::surfacePhaseMassDensitiesString() ); + surfaceDens.resize( 3 ); + surfaceDens[0] = 800.0; surfaceDens[1] = 0.9907; surfaceDens[2] = 1022.0; + + path_array & tableNames = fluid.getReference< path_array >( BlackOilFluidBase::viewKeyStruct::tableFilesString() ); + tableNames.resize( 3 ); + tableNames[0] = "pvto.txt"; tableNames[1] = "pvdg.txt"; tableNames[2] = "pvtw.txt"; + + fluid.postProcessInputRecursive(); + return fluid; +} + +MultiFluidBase & makeDeadOilFluid( string const & name, Group * parent ) +{ + DeadOilFluid & fluid = parent->registerGroup< DeadOilFluid >( name ); + + string_array & compNames = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::componentNamesString() ); + compNames.resize( 3 ); + compNames[0] = "oil"; compNames[1] = "water"; compNames[2] = "gas"; + + array1d< real64 > & molarWgt = fluid.getReference< array1d< real64 > >( MultiFluidBase::viewKeyStruct::componentMolarWeightString() ); + molarWgt.resize( 3 ); + molarWgt[0] = 114e-3; molarWgt[1] = 16e-3; molarWgt[2] = 18e-3; + + string_array & phaseNames = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::phaseNamesString() ); + phaseNames.resize( 3 ); + phaseNames[0] = "oil"; phaseNames[1] = "water"; phaseNames[2] = "gas"; + + array1d< real64 > & surfaceDens = fluid.getReference< array1d< real64 > >( BlackOilFluidBase::viewKeyStruct::surfacePhaseMassDensitiesString() ); + surfaceDens.resize( 3 ); + surfaceDens[0] = 800.0; surfaceDens[1] = 1022.0; surfaceDens[2] = 0.9907; + + path_array & tableNames = fluid.getReference< path_array >( BlackOilFluidBase::viewKeyStruct::tableFilesString() ); + tableNames.resize( 3 ); + tableNames[0] = "pvdo.txt"; tableNames[1] = "pvdw.txt"; tableNames[2] = "pvdg.txt"; + + fluid.postProcessInputRecursive(); + return fluid; +} + +MultiFluidBase & makeDeadOilFluidFromTable( string const & name, Group * parent ) +{ + FunctionManager & functionManager = FunctionManager::getInstance(); + + // 1) First, define the tables (PVDO, PVDG) + + // 1D table with linear interpolation + integer const NaxisPVDO = 21; + integer const NaxisPVDG = 13; + + array1d< real64_array > coordinatesPVDO; + real64_array valuesPVDO_Bo( NaxisPVDO ); + real64_array valuesPVDO_visc( NaxisPVDO ); + coordinatesPVDO.resize( 1 ); + coordinatesPVDO[0].resize( NaxisPVDO ); + coordinatesPVDO[0][0] = 10000000.0; valuesPVDO_Bo[0] = 1.23331; valuesPVDO_visc[0] = 0.00015674; + coordinatesPVDO[0][1] = 12500000.0; valuesPVDO_Bo[1] = 1.21987; valuesPVDO_visc[1] = 0.00016570; + coordinatesPVDO[0][2] = 15000000.0; valuesPVDO_Bo[2] = 1.20802; valuesPVDO_visc[2] = 0.00017445; + coordinatesPVDO[0][3] = 20000000.0; valuesPVDO_Bo[3] = 1.18791; valuesPVDO_visc[3] = 0.00019143; + coordinatesPVDO[0][4] = 25000000.0; valuesPVDO_Bo[4] = 1.17137; valuesPVDO_visc[4] = 0.00020779; + coordinatesPVDO[0][5] = 30000000.0; valuesPVDO_Bo[5] = 1.15742; valuesPVDO_visc[5] = 0.00022361; + coordinatesPVDO[0][6] = 33200000.3; valuesPVDO_Bo[6] = 1.14946; valuesPVDO_visc[6] = 0.00023359; + coordinatesPVDO[0][7] = 35000000.0; valuesPVDO_Bo[7] = 1.14543; valuesPVDO_visc[7] = 0.00023894; + coordinatesPVDO[0][8] = 40000000.0; valuesPVDO_Bo[8] = 1.13498; valuesPVDO_visc[8] = 0.00025383; + coordinatesPVDO[0][9] = 50000000.0; valuesPVDO_Bo[9] = 1.11753; valuesPVDO_visc[9] = 0.00028237; + coordinatesPVDO[0][10] = 60000000.0; valuesPVDO_Bo[10] = 1.10346; valuesPVDO_visc[10] = 0.00030941; + coordinatesPVDO[0][11] = 70000000.0; valuesPVDO_Bo[11] = 1.09180; valuesPVDO_visc[11] = 0.00033506; + coordinatesPVDO[0][12] = 80000000.0; valuesPVDO_Bo[12] = 1.08194; valuesPVDO_visc[12] = 0.00035945; + coordinatesPVDO[0][13] = 90000000.0; valuesPVDO_Bo[13] = 1.07347; valuesPVDO_visc[13] = 0.00038266; + coordinatesPVDO[0][14] = 95000000.0; valuesPVDO_Bo[14] = 1.06966; valuesPVDO_visc[14] = 0.00039384; + coordinatesPVDO[0][15] = 100000000.0; valuesPVDO_Bo[15] = 1.06610; valuesPVDO_visc[15] = 0.00040476; + coordinatesPVDO[0][16] = 110000000.0; valuesPVDO_Bo[16] = 1.05961; valuesPVDO_visc[16] = 0.00042584; + coordinatesPVDO[0][17] = 112500000.0; valuesPVDO_Bo[17] = 1.05811; valuesPVDO_visc[17] = 0.00043096; + coordinatesPVDO[0][18] = 115000000.0; valuesPVDO_Bo[18] = 1.05665; valuesPVDO_visc[18] = 0.00043602; + coordinatesPVDO[0][19] = 117500000.0; valuesPVDO_Bo[19] = 1.05523; valuesPVDO_visc[19] = 0.00044102; + coordinatesPVDO[0][20] = 120000000.0; valuesPVDO_Bo[20] = 1.05385; valuesPVDO_visc[20] = 0.00044596; + + array1d< real64_array > coordinatesPVDG; + real64_array valuesPVDG_Bg( NaxisPVDG ); + real64_array valuesPVDG_visc( NaxisPVDG ); + coordinatesPVDG.resize( 1 ); + coordinatesPVDG[0].resize( NaxisPVDG ); + coordinatesPVDG[0][0] = 3000000; valuesPVDG_Bg[0] = 0.04234; valuesPVDG_visc[0] = 0.00001344; + coordinatesPVDG[0][1] = 6000000; valuesPVDG_Bg[1] = 0.02046; valuesPVDG_visc[1] = 0.0000142; + coordinatesPVDG[0][2] = 9000000; valuesPVDG_Bg[2] = 0.01328; valuesPVDG_visc[2] = 0.00001526; + coordinatesPVDG[0][3] = 12000000; valuesPVDG_Bg[3] = 0.00977; valuesPVDG_visc[3] = 0.0000166; + coordinatesPVDG[0][4] = 15000000; valuesPVDG_Bg[4] = 0.00773; valuesPVDG_visc[4] = 0.00001818; + coordinatesPVDG[0][5] = 18000000; valuesPVDG_Bg[5] = 0.006426; valuesPVDG_visc[5] = 0.00001994; + coordinatesPVDG[0][6] = 21000000; valuesPVDG_Bg[6] = 0.005541; valuesPVDG_visc[6] = 0.00002181; + coordinatesPVDG[0][7] = 24000000; valuesPVDG_Bg[7] = 0.004919; valuesPVDG_visc[7] = 0.0000237; + coordinatesPVDG[0][8] = 27000000; valuesPVDG_Bg[8] = 0.004471; valuesPVDG_visc[8] = 0.00002559; + coordinatesPVDG[0][9] = 29500000; valuesPVDG_Bg[9] = 0.004194; valuesPVDG_visc[9] = 0.00002714; + coordinatesPVDG[0][10] = 31000000; valuesPVDG_Bg[10] = 0.004031; valuesPVDG_visc[10] = 0.00002806; + coordinatesPVDG[0][11] = 33000000; valuesPVDG_Bg[11] = 0.00391; valuesPVDG_visc[11] = 0.00002832; + coordinatesPVDG[0][12] = 53000000; valuesPVDG_Bg[12] = 0.003868; valuesPVDG_visc[12] = 0.00002935; + + TableFunction & tablePVDO_Bo = dynamicCast< TableFunction & >( *functionManager.createChild( "TableFunction", "PVDO_Bo" ) ); + tablePVDO_Bo.setTableCoordinates( coordinatesPVDO, { units::Pressure } ); + tablePVDO_Bo.setTableValues( valuesPVDO_Bo, units::Dimensionless ); + tablePVDO_Bo.reInitializeFunction(); + tablePVDO_Bo.setInterpolationMethod( TableFunction::InterpolationType::Linear ); + + TableFunction & tablePVDO_visc = dynamicCast< TableFunction & >( *functionManager.createChild( "TableFunction", "PVDO_visc" ) ); + tablePVDO_visc.setTableCoordinates( coordinatesPVDO, { units::Pressure } ); + tablePVDO_visc.setTableValues( valuesPVDO_visc, units::Viscosity ); + tablePVDO_visc.reInitializeFunction(); + tablePVDO_visc.setInterpolationMethod( TableFunction::InterpolationType::Linear ); + + TableFunction & tablePVDG_Bg = dynamicCast< TableFunction & >( *functionManager.createChild( "TableFunction", "PVDG_Bg" ) ); + tablePVDG_Bg.setTableCoordinates( coordinatesPVDG, { units::Pressure } ); + tablePVDG_Bg.setTableValues( valuesPVDG_Bg, units::Dimensionless ); + tablePVDG_Bg.reInitializeFunction(); + tablePVDG_Bg.setInterpolationMethod( TableFunction::InterpolationType::Linear ); + + TableFunction & tablePVDG_visc = dynamicCast< TableFunction & >( *functionManager.createChild( "TableFunction", "PVDG_visc" ) ); + tablePVDG_visc.setTableCoordinates( coordinatesPVDG, { units::Pressure } ); + tablePVDG_visc.setTableValues( valuesPVDG_visc, units::Viscosity ); + tablePVDG_visc.reInitializeFunction(); + tablePVDG_visc.setInterpolationMethod( TableFunction::InterpolationType::Linear ); + + // 2) Then, define the Dead-Oil constitutive model + + DeadOilFluid & fluid = parent->registerGroup< DeadOilFluid >( name ); + + string_array & compNames = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::componentNamesString() ); + compNames.resize( 3 ); + compNames[0] = "gas"; compNames[1] = "water"; compNames[2] = "oil"; + + array1d< real64 > & molarWgt = fluid.getReference< array1d< real64 > >( MultiFluidBase::viewKeyStruct::componentMolarWeightString() ); + molarWgt.resize( 3 ); + molarWgt[0] = 18e-3; molarWgt[1] = 16e-3; molarWgt[2] = 114e-3; + + string_array & phaseNames = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::phaseNamesString() ); + phaseNames.resize( 3 ); + phaseNames[0] = "gas"; phaseNames[1] = "water"; phaseNames[2] = "oil"; + + array1d< real64 > & surfaceDens = fluid.getReference< array1d< real64 > >( DeadOilFluid::viewKeyStruct::surfacePhaseMassDensitiesString() ); + surfaceDens.resize( 3 ); + surfaceDens[0] = 0.9907; surfaceDens[1] = 1022.0; surfaceDens[2] = 800.0; + + string_array & FVFTableNames = fluid.getReference< string_array >( DeadOilFluid::viewKeyStruct::formationVolumeFactorTableNamesString() ); + FVFTableNames.resize( 2 ); + FVFTableNames[0] = "PVDG_Bg"; FVFTableNames[1] = "PVDO_Bo"; + + string_array & viscosityTableNames = fluid.getReference< string_array >( DeadOilFluid::viewKeyStruct::viscosityTableNamesString() ); + viscosityTableNames.resize( 2 ); + viscosityTableNames[0] = "PVDG_visc"; viscosityTableNames[1] = "PVDO_visc"; + + real64 & waterRefPressure = fluid.getReference< real64 >( DeadOilFluid::viewKeyStruct::waterRefPressureString() ); + waterRefPressure = 30600000.1; + real64 & waterFormationVolumeFactor = fluid.getReference< real64 >( DeadOilFluid::viewKeyStruct::waterFormationVolumeFactorString() ); + waterFormationVolumeFactor = 1.03; + real64 & waterCompressibility = fluid.getReference< real64 >( DeadOilFluid::viewKeyStruct::waterCompressibilityString() ); + waterCompressibility = 0.00000000041; + real64 & waterViscosity = fluid.getReference< real64 >( DeadOilFluid::viewKeyStruct::waterViscosityString() ); + waterViscosity = 0.0003; + + fluid.postProcessInputRecursive(); + return fluid; +} + +void writeTableToFile( string const & filename, char const * str ) +{ + std::ofstream os( filename ); + ASSERT_TRUE( os.is_open() ); + os << str; + os.close(); +} + +void removeFile( string const & filename ) +{ + int const ret = std::remove( filename.c_str() ); + ASSERT_TRUE( ret == 0 ); +} + +class LiveOilFluidTest : public CompositionalFluidTestBase +{ +public: + LiveOilFluidTest() + { + writeTableToFile( "pvto.txt", pvtoTableContent ); + writeTableToFile( "pvdg.txt", pvdgTableContent ); + writeTableToFile( "pvtw.txt", pvtwTableContent ); + + parent.resize( 1 ); + fluid = &makeLiveOilFluid( "fluid", &parent ); + + parent.initialize(); + parent.initializePostInitialConditions(); + } + + ~LiveOilFluidTest() + { + removeFile( "pvto.txt" ); + removeFile( "pvdg.txt" ); + removeFile( "pvtw.txt" ); + } +}; + +TEST_F( LiveOilFluidTest, numericalDerivativesMolar ) +{ + fluid->setMassFlag( false ); + + real64 const P[3] = { 5.4e6, 1.24e7, 3.21e7 }; + real64 const T = 297.15; + array1d< real64 > comp( 3 ); + comp[0] = 0.79999; comp[1] = 0.2; comp[2] = 0.00001; + + real64 const eps = sqrt( std::numeric_limits< real64 >::epsilon()); + real64 const relTol = 1e-12; + + for( integer i = 0; i < 3; ++i ) + { + testNumericalDerivatives( *fluid, parent, P[i], T, comp, eps, false, relTol ); + } +} + +TEST_F( LiveOilFluidTest, numericalDerivativesMass ) +{ + fluid->setMassFlag( true ); + + real64 const P[3] = { 5.4e6, 1.24e7, 3.21e7 }; + real64 const T = 297.15; + array1d< real64 > comp( 3 ); + comp[0] = 0.79999; comp[1] = 0.2; comp[2] = 0.00001; + + real64 const eps = sqrt( std::numeric_limits< real64 >::epsilon()); + real64 const relTol = 1e-12; + + for( integer i = 0; i < 3; ++i ) + { + testNumericalDerivatives( *fluid, parent, P[i], T, comp, eps, false, relTol ); + } +} + +class DeadOilFluidTest : public CompositionalFluidTestBase +{ +public: + + DeadOilFluidTest() + { + writeTableToFile( "pvdo.txt", pvdoTableContent ); + writeTableToFile( "pvdg.txt", pvdgTableContent ); + writeTableToFile( "pvdw.txt", pvdwTableContent ); + + parent.resize( 1 ); + fluid = &makeDeadOilFluid( "fluid", &parent ); + + parent.initialize(); + parent.initializePostInitialConditions(); + } + + ~DeadOilFluidTest() + { + removeFile( "pvdo.txt" ); + removeFile( "pvdg.txt" ); + removeFile( "pvdw.txt" ); + } +}; + +TEST_F( DeadOilFluidTest, numericalDerivativesMolar ) +{ + fluid->setMassFlag( false ); + + real64 const P[3] = { 1.24e7, 3.21e7, 5.01e7 }; + real64 const T = 297.15; + array1d< real64 > comp( 3 ); + comp[0] = 0.1; comp[1] = 0.3; comp[2] = 0.6; + + real64 const eps = sqrt( std::numeric_limits< real64 >::epsilon()); + real64 const relTol = 1e-4; + + for( integer i = 0; i < 3; ++i ) + { + testNumericalDerivatives( *fluid, parent, P[i], T, comp, eps, false, relTol ); + } +} + +TEST_F( DeadOilFluidTest, numericalDerivativesMass ) +{ + fluid->setMassFlag( true ); + + real64 const P[3] = { 5.4e6, 1.24e7, 3.21e7 }; + real64 const T = 297.15; + array1d< real64 > comp( 3 ); + comp[0] = 0.1; comp[1] = 0.3; comp[2] = 0.6; + + real64 const eps = sqrt( std::numeric_limits< real64 >::epsilon()); + real64 const relTol = 1e-4; + real64 const absTol = 1e-14; + + for( integer i = 0; i < 3; ++i ) + { + testNumericalDerivatives( *fluid, parent, P[i], T, comp, eps, false, relTol, absTol ); + } +} + +class DeadOilFluidFromTableTest : public CompositionalFluidTestBase +{ +public: + + DeadOilFluidFromTableTest() + { + parent.resize( 1 ); + fluid = &makeDeadOilFluidFromTable( "fluid", &parent ); + + parent.initialize(); + parent.initializePostInitialConditions(); + } +}; + +TEST_F( DeadOilFluidFromTableTest, numericalDerivativesMolar ) +{ + fluid->setMassFlag( false ); + + real64 const P[3] = { 5.4e6, 1.24e7, 3.21e7 }; + real64 const T = 297.15; + array1d< real64 > comp( 3 ); + comp[0] = 0.1; comp[1] = 0.3; comp[2] = 0.6; + + real64 const eps = sqrt( std::numeric_limits< real64 >::epsilon()); + real64 const relTol = 1e-4; + + for( integer i = 0; i < 3; ++i ) + { + testNumericalDerivatives( *fluid, parent, P[i], T, comp, eps, false, relTol ); + } +} + +MultiFluidBase & makeCO2BrinePhillipsFluid( string const & name, Group * parent ) +{ + CO2BrinePhillipsFluid & fluid = parent->registerGroup< CO2BrinePhillipsFluid >( name ); + + auto & compNames = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::componentNamesString() ); + compNames.resize( 2 ); + compNames[0] = "co2"; compNames[1] = "water"; + + auto & molarWgt = fluid.getReference< array1d< real64 > >( MultiFluidBase::viewKeyStruct::componentMolarWeightString() ); + molarWgt.resize( 2 ); + molarWgt[0] = 44e-3; molarWgt[1] = 18e-3; + + auto & phaseNames = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::phaseNamesString() ); + phaseNames.resize( 2 ); + phaseNames[0] = "gas"; phaseNames[1] = "liquid"; + + auto & phasePVTParaFileNames = fluid.getReference< path_array >( CO2BrinePhillipsFluid::viewKeyStruct::phasePVTParaFilesString() ); + phasePVTParaFileNames.resize( 2 ); + phasePVTParaFileNames[0] = "pvtgas.txt"; phasePVTParaFileNames[1] = "pvtliquid.txt"; + + auto & flashModelParaFileName = fluid.getReference< Path >( CO2BrinePhillipsFluid::viewKeyStruct::flashModelParaFileString() ); + flashModelParaFileName = "co2flash.txt"; + + fluid.postProcessInputRecursive(); + return fluid; +} + +class CO2BrinePhillipsFluidTest : public CompositionalFluidTestBase +{ +protected: + + CO2BrinePhillipsFluidTest() + { + writeTableToFile( "pvtliquid.txt", pvtLiquidPhillipsTableContent ); + writeTableToFile( "pvtgas.txt", pvtGasTableContent ); + writeTableToFile( "co2flash.txt", co2FlashTableContent ); + + parent.resize( 1 ); + fluid = &makeCO2BrinePhillipsFluid( "fluid", &parent ); + + parent.initialize(); + parent.initializePostInitialConditions(); + } + + ~CO2BrinePhillipsFluidTest() + { + removeFile( "pvtliquid.txt" ); + removeFile( "pvtgas.txt" ); + removeFile( "co2flash.txt" ); + } + +}; + + +TEST_F( CO2BrinePhillipsFluidTest, checkAgainstPreviousImplementationMolar ) +{ + fluid->setMassFlag( false ); + + real64 const P[3] = { 5e6, 7.5e6, 1.2e7 }; + real64 const T[3] = { 367.65, 368.15, 368.75 }; + array1d< real64 > comp( 2 ); + comp[0] = 0.3; comp[1] = 0.7; + + real64 const relTol = 1e-10; + + fluid->allocateConstitutiveData( fluid->getParent(), 1 ); + + CO2BrinePhillipsFluid::KernelWrapper wrapper = + dynamicCast< CO2BrinePhillipsFluid * >( fluid )->createKernelWrapper(); + + real64 const savedTotalDens[] = + { 5881.9010529428224, 5869.6094131788523, 5855.0332090690354, 9181.3523596865525, 9157.6071613646127, 9129.5728206336826, 15757.685798517123, 15698.877814368472, + 15630.149353340639 }; + real64 const savedGasPhaseFrac[] = + { 0.29413690046142371148, 0.29415754810481165027, 0.29418169867697463449, 0.29194010802017489326, 0.29196434961986583723, 0.29199266189550621142, 0.2890641335638892695, 0.28908718137828937067, + 0.28911404840933618843 }; + real64 const savedWaterDens[] = + { 53296.719183517576, 53274.578175308554, 53247.856162690216, 53248.577831698305, 53226.801031868054, 53200.505577694363, 53232.959859840405, 53211.345942175059, + 53185.244751356993 }; + real64 const savedGasDens[] = + { 1876.2436091302606656, 1872.184636376355229, 1867.3711104617746059, 3053.1548401973859654, 3044.5748249030266379, 3034.4507978134674886, 5769.0622621289458039, 5742.8476745352018042, + 5712.2837704249559465 }; + real64 const savedWaterMassDens[] = + { 970.85108546544745423, 970.4075834766143771, 969.87385780866463847, 974.23383396044232541, 973.78856424100911227, 973.25280170872576946, 979.48333010951580491, 979.04147229150635212, + 978.50977403260912979 }; + real64 const savedGasMassDens[] = + { 82.554718801731468147, 82.376124000559627802, 82.164328860318079251, 134.33881296868497657, 133.96129229573315911, 133.51583510379256836, 253.83873953367358922, 252.68529767954885301, + 251.34048589869803436 }; + real64 const savedWaterVisc[] = + { 0.0003032144206279845924, 0.00030157070452334377216, 0.00029959815370251820189, 0.0003032144206279845924, 0.00030157070452334377216, 0.00029959815370251820189, 0.0003032144206279845924, + 0.00030157070452334377216, 0.00029959815370251820189 }; + + real64 const savedGasVisc[] = + { 1.9042384704865343673e-05, 1.9062615947696152414e-05, 1.9086923154230274463e-05, 2.0061713844617985449e-05, 2.0075955757102255573e-05, 2.0093249989250199265e-05, 2.3889596884008691474e-05, + 2.3865756080512667728e-05, 2.3839170076324036522e-05 }; + real64 const savedWaterPhaseGasComp[] = + { 0.0083062842389820552153, 0.008277274736736653718, 0.0082433415400525456018, 0.011383065290266058955, 0.011349217198060387521, 0.011309682362800700661, 0.015382352969377973903, + 0.015350431636424789056, 0.015313218057419366105 }; + real64 const savedWaterPhaseWaterComp[] = + { 0.99169371576101794652, 0.9917227252632633272, 0.99175665845994742664, 0.98861693470973388553, 0.98865078280193963156, 0.98869031763719927852, 0.98461764703062204518, 0.98464956836357520054, + 0.98468678194258063563 }; + + integer counter = 0; + for( integer i = 0; i < 3; ++i ) + { + for( integer j = 0; j < 3; ++j ) + { + testValuesAgainstPreviousImplementation( wrapper, + P[i], T[j], comp, + savedTotalDens[counter], savedGasPhaseFrac[counter], + savedWaterDens[counter], savedGasDens[counter], + savedWaterMassDens[counter], savedGasMassDens[counter], + savedWaterVisc[counter], savedGasVisc[counter], + savedWaterPhaseGasComp[counter], savedWaterPhaseWaterComp[counter], + relTol ); + counter++; + } + } +} + +TEST_F( CO2BrinePhillipsFluidTest, checkAgainstPreviousImplementationMass ) +{ + fluid->setMassFlag( true ); + + real64 const P[3] = { 5e6, 7.5e6, 1.2e7 }; + real64 const T[3] = { 367.65, 368.15, 368.75 }; + array1d< real64 > comp( 2 ); + comp[0] = 0.3; comp[1] = 0.7; + + real64 const relTol = 1e-10; + + fluid->allocateConstitutiveData( fluid->getParent(), 1 ); + + CO2BrinePhillipsFluid::KernelWrapper wrapper = + dynamicCast< CO2BrinePhillipsFluid * >( fluid )->createKernelWrapper(); + + real64 const savedTotalDens[] = + { 238.31504112633914, 237.83897306400553, 237.27445306546298, 353.95258514794097, 353.12773295711992, 352.1532278769692, 549.90502586392017, 548.2725957521294, + 546.35992000222234 }; + real64 const savedGasPhaseFrac[] = + { 0.28566797890570228, 0.28571845092287312, 0.28577748565482669, 0.28029804182709406, 0.28035729907078311, 0.2804265068556816, 0.27326788204506247, 0.27332422114692956, + 0.27338989611171055 }; + real64 const savedWaterDens[] = + { 970.85108546544745423, 970.4075834766143771, 969.87385780866463847, 974.23383396044232541, 973.78856424100911227, 973.25280170872576946, 979.48333010951580491, 979.04147229150635212, + 978.50977403260912979 }; + real64 const savedGasDens[] = + { 82.554718801731468147, 82.376124000559627802, 82.164328860318079251, 134.33881296868497657, 133.96129229573315911, 133.51583510379256836, 253.83873953367358922, 252.68529767954885301, + 251.34048589869803436 }; + real64 const savedWaterMassDens[] = + { 970.85108546544745423, 970.4075834766143771, 969.87385780866463847, 974.23383396044232541, 973.78856424100911227, 973.25280170872576946, 979.48333010951580491, 979.04147229150635212, + 978.50977403260912979 }; + real64 const savedGasMassDens[] = + { 82.554718801731468147, 82.376124000559627802, 82.164328860318079251, 134.33881296868497657, 133.96129229573315911, 133.51583510379256836, 253.83873953367358922, 252.68529767954885301, + 251.34048589869803436 }; + real64 const savedWaterVisc[] = + { 0.0003032144206279845924, 0.00030157070452334377216, 0.00029959815370251820189, 0.0003032144206279845924, 0.00030157070452334377216, 0.00029959815370251820189, 0.0003032144206279845924, + 0.00030157070452334377216, 0.00029959815370251820189 }; + real64 const savedGasVisc[] = + { 1.9042384704865343673e-05, 1.9062615947696152414e-05, 1.9086923154230274463e-05, 2.0061713844617985449e-05, 2.0075955757102255573e-05, 2.0093249989250199265e-05, 2.3889596884008691474e-05, + 2.3865756080512667728e-05, 2.3839170076324036522e-05 }; + real64 const savedWaterPhaseGasComp[] = + { 0.020063528822832473, 0.019994285300494085, 0.019913282008777046, 0.027375162661670061, 0.027295074213708581, 0.02720152052681666, 0.036784005129927563, + 0.036709327088310859, 0.036622259649145526 }; + real64 const savedWaterPhaseWaterComp[] = + { 0.97993647117716742, 0.98000571469950604, 0.98008671799122282, 0.97262483733832983, 0.97270492578629131, 0.97279847947318321, 0.96321599487007259, 0.96329067291168902, + 0.96337774035085455 }; + + integer counter = 0; + for( integer i = 0; i < 3; ++i ) + { + for( integer j = 0; j < 3; ++j ) + { + testValuesAgainstPreviousImplementation( wrapper, + P[i], T[j], comp, + savedTotalDens[counter], savedGasPhaseFrac[counter], + savedWaterDens[counter], savedGasDens[counter], + savedWaterMassDens[counter], savedGasMassDens[counter], + savedWaterVisc[counter], savedGasVisc[counter], + savedWaterPhaseGasComp[counter], savedWaterPhaseWaterComp[counter], + relTol ); + counter++; + } + } +} + +TEST_F( CO2BrinePhillipsFluidTest, numericalDerivativesMolar ) +{ + fluid->setMassFlag( false ); + + // TODO test over a range of values + real64 const P[3] = { 5e6, 7.5e6, 1.2e7 }; + real64 const T[3] = { 367.65, 368.15, 368.75 }; + array1d< real64 > comp( 2 ); + comp[0] = 0.3; comp[1] = 0.7; + + real64 const eps = sqrt( std::numeric_limits< real64 >::epsilon()); + real64 const relTol = 1e-4; + + for( integer i = 0; i < 3; ++i ) + { + for( integer j = 0; j < 3; ++j ) + { + testNumericalDerivatives( *fluid, parent, P[i], T[j], comp, eps, false, relTol ); + } + } +} + +TEST_F( CO2BrinePhillipsFluidTest, numericalDerivativesMass ) +{ + fluid->setMassFlag( true ); + + // TODO test over a range of values + real64 const P[3] = { 5e6, 7.5e6, 1.2e7 }; + real64 const T[3] = { 367.65, 368.15, 368.75 }; + array1d< real64 > comp( 2 ); + comp[0] = 0.3; comp[1] = 0.7; + + real64 const eps = sqrt( std::numeric_limits< real64 >::epsilon()); + real64 const relTol = 1e-8; + + for( integer i = 0; i < 3; ++i ) + { + for( integer j = 0; j < 3; ++j ) + { + testNumericalDerivatives( *fluid, parent, P[i], T[j], comp, eps, false, relTol ); + } + } +} + +MultiFluidBase & makeCO2BrineEzrokhiFluid( string const & name, Group * parent ) +{ + CO2BrineEzrokhiFluid & fluid = parent->registerGroup< CO2BrineEzrokhiFluid >( name ); + + auto & compNames = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::componentNamesString() ); + compNames.resize( 2 ); + compNames[0] = "co2"; compNames[1] = "water"; + + auto & molarWgt = fluid.getReference< array1d< real64 > >( MultiFluidBase::viewKeyStruct::componentMolarWeightString() ); + molarWgt.resize( 2 ); + molarWgt[0] = 44e-3; molarWgt[1] = 18e-3; + + auto & phaseNames = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::phaseNamesString() ); + phaseNames.resize( 2 ); + phaseNames[0] = "gas"; phaseNames[1] = "liquid"; + + auto & phasePVTParaFileNames = fluid.getReference< path_array >( CO2BrineEzrokhiFluid::viewKeyStruct::phasePVTParaFilesString() ); + phasePVTParaFileNames.resize( 2 ); + phasePVTParaFileNames[0] = "pvtgas.txt"; phasePVTParaFileNames[1] = "pvtliquid.txt"; + + auto & flashModelParaFileName = fluid.getReference< Path >( CO2BrineEzrokhiFluid::viewKeyStruct::flashModelParaFileString() ); + flashModelParaFileName = "co2flash.txt"; + + fluid.postProcessInputRecursive(); + return fluid; +} + +class CO2BrineEzrokhiFluidTest : public CompositionalFluidTestBase +{ +protected: + + CO2BrineEzrokhiFluidTest() + { + writeTableToFile( "pvtliquid.txt", pvtLiquidEzrokhiTableContent ); + writeTableToFile( "pvtgas.txt", pvtGasTableContent ); + writeTableToFile( "co2flash.txt", co2FlashTableContent ); + + parent.resize( 1 ); + fluid = &makeCO2BrineEzrokhiFluid( "fluid", &parent ); + + parent.initialize(); + parent.initializePostInitialConditions(); + } + + ~CO2BrineEzrokhiFluidTest() + { + removeFile( "pvtliquid.txt" ); + removeFile( "pvtgas.txt" ); + removeFile( "co2flash.txt" ); + } + +}; + +TEST_F( CO2BrineEzrokhiFluidTest, numericalDerivativesMolar ) +{ + fluid->setMassFlag( false ); + + // TODO test over a range of values + real64 const P[3] = { 5e6, 7.5e6, 1.2e7 }; + real64 const T[3] = { 367.65, 368.15, 368.75 }; + array1d< real64 > comp( 2 ); + comp[0] = 0.3; comp[1] = 0.7; + + real64 const eps = sqrt( std::numeric_limits< real64 >::epsilon()); + real64 const relTol = 1e-4; + + for( integer i = 0; i < 3; ++i ) + { + for( integer j = 0; j < 3; ++j ) + { + testNumericalDerivatives( *fluid, parent, P[i], T[j], comp, eps, false, relTol ); + } + } +} + +TEST_F( CO2BrineEzrokhiFluidTest, numericalDerivativesMass ) +{ + fluid->setMassFlag( true ); + + // TODO test over a range of values + real64 const P[3] = { 5e6, 7.5e6, 1.2e7 }; + real64 const T[3] = { 367.65, 368.15, 368.75 }; + array1d< real64 > comp( 2 ); + comp[0] = 0.3; comp[1] = 0.7; + + real64 const eps = sqrt( std::numeric_limits< real64 >::epsilon()); + real64 const relTol = 1e-8; + + for( integer i = 0; i < 3; ++i ) + { + for( integer j = 0; j < 3; ++j ) + { + testNumericalDerivatives( *fluid, parent, P[i], T[j], comp, eps, false, relTol ); + } + } +} + +int main( int argc, char * * argv ) +{ + ::testing::InitGoogleTest( &argc, argv ); + + geos::GeosxState state( geos::basicSetup( argc, argv ) ); + + int const result = RUN_ALL_TESTS(); + + geos::basicCleanup(); + + return result; +} diff --git a/src/docs/doxygen/GeosxConfig.hpp b/src/docs/doxygen/GeosxConfig.hpp index 44a7b9be831..c9dd79794ff 100644 --- a/src/docs/doxygen/GeosxConfig.hpp +++ b/src/docs/doxygen/GeosxConfig.hpp @@ -123,7 +123,7 @@ #define HDF5_VERSION 1.12.1 /// Version information for Conduit -#define Conduit_VERSION 0.8.2 +#define Conduit_VERSION 0.8.6 /// Version information for RAJA #define RAJA_VERSION 2022.10.5 @@ -165,13 +165,13 @@ #define petsc_VERSION 3.13.0 /// Version information for VTK -#define VTK_VERSION 9.2.6 +#define VTK_VERSION 9.2.20230719 /// Version information for fmt -#define fmt_VERSION 10.0.0 +#define fmt_VERSION 9.1.0 /// Version information for python -#define Python3_VERSION 3.10.6 +#define Python3_VERSION 3.11.5 /// Version information for CUDAToolkit /* #undef CUDAToolkit_VERSION */ diff --git a/src/docs/sphinx/CompleteXMLSchema.rst b/src/docs/sphinx/CompleteXMLSchema.rst new file mode 100644 index 00000000000..565df778c90 --- /dev/null +++ b/src/docs/sphinx/CompleteXMLSchema.rst @@ -0,0 +1,2969 @@ +###################### +Datastructure Index +###################### + +************************** + +Input Schema Definitions +************************** + +:download:`XML Schema <../../coreComponents/schema/docs/../schema.xsd>` + + +.. _XML_AcousticElasticSEM: + +Element: AcousticElasticSEM +=========================== +.. include:: ../../coreComponents/schema/docs/AcousticElasticSEM.rst + + +.. _XML_AcousticFirstOrderSEM: + +Element: AcousticFirstOrderSEM +============================== +.. include:: ../../coreComponents/schema/docs/AcousticFirstOrderSEM.rst + + +.. _XML_AcousticSEM: + +Element: AcousticSEM +==================== +.. include:: ../../coreComponents/schema/docs/AcousticSEM.rst + + +.. _XML_AcousticVTISEM: + +Element: AcousticVTISEM +======================= +.. include:: ../../coreComponents/schema/docs/AcousticVTISEM.rst + + +.. _XML_Aquifer: + +Element: Aquifer +================ +.. include:: ../../coreComponents/schema/docs/Aquifer.rst + + +.. _XML_Benchmarks: + +Element: Benchmarks +=================== +.. include:: ../../coreComponents/schema/docs/Benchmarks.rst + + +.. _XML_BiotPorosity: + +Element: BiotPorosity +===================== +.. include:: ../../coreComponents/schema/docs/BiotPorosity.rst + + +.. _XML_BlackOilFluid: + +Element: BlackOilFluid +====================== +.. include:: ../../coreComponents/schema/docs/BlackOilFluid.rst + + +.. _XML_Blueprint: + +Element: Blueprint +================== +.. include:: ../../coreComponents/schema/docs/Blueprint.rst + + +.. _XML_Box: + +Element: Box +============ +.. include:: ../../coreComponents/schema/docs/Box.rst + + +.. _XML_BrooksCoreyBakerRelativePermeability: + +Element: BrooksCoreyBakerRelativePermeability +============================================= +.. include:: ../../coreComponents/schema/docs/BrooksCoreyBakerRelativePermeability.rst + + +.. _XML_BrooksCoreyCapillaryPressure: + +Element: BrooksCoreyCapillaryPressure +===================================== +.. include:: ../../coreComponents/schema/docs/BrooksCoreyCapillaryPressure.rst + + +.. _XML_BrooksCoreyRelativePermeability: + +Element: BrooksCoreyRelativePermeability +======================================== +.. include:: ../../coreComponents/schema/docs/BrooksCoreyRelativePermeability.rst + + +.. _XML_BrooksCoreyStone2RelativePermeability: + +Element: BrooksCoreyStone2RelativePermeability +============================================== +.. include:: ../../coreComponents/schema/docs/BrooksCoreyStone2RelativePermeability.rst + + +.. _XML_CO2BrineEzrokhiFluid: + +Element: CO2BrineEzrokhiFluid +============================= +.. include:: ../../coreComponents/schema/docs/CO2BrineEzrokhiFluid.rst + + +.. _XML_CO2BrineEzrokhiThermalFluid: + +Element: CO2BrineEzrokhiThermalFluid +==================================== +.. include:: ../../coreComponents/schema/docs/CO2BrineEzrokhiThermalFluid.rst + + +.. _XML_CO2BrinePhillipsFluid: + +Element: CO2BrinePhillipsFluid +============================== +.. include:: ../../coreComponents/schema/docs/CO2BrinePhillipsFluid.rst + + +.. _XML_CO2BrinePhillipsThermalFluid: + +Element: CO2BrinePhillipsThermalFluid +===================================== +.. include:: ../../coreComponents/schema/docs/CO2BrinePhillipsThermalFluid.rst + + +.. _XML_CarmanKozenyPermeability: + +Element: CarmanKozenyPermeability +================================= +.. include:: ../../coreComponents/schema/docs/CarmanKozenyPermeability.rst + + +.. _XML_Catalyst: + +Element: Catalyst +================= +.. include:: ../../coreComponents/schema/docs/Catalyst.rst + + +.. _XML_CellElementRegion: + +Element: CellElementRegion +========================== +.. include:: ../../coreComponents/schema/docs/CellElementRegion.rst + + +.. _XML_CeramicDamage: + +Element: CeramicDamage +====================== +.. include:: ../../coreComponents/schema/docs/CeramicDamage.rst + + +.. _XML_ChomboIO: + +Element: ChomboIO +================= +.. include:: ../../coreComponents/schema/docs/ChomboIO.rst + + +.. _XML_CompositeFunction: + +Element: CompositeFunction +========================== +.. include:: ../../coreComponents/schema/docs/CompositeFunction.rst + + +.. _XML_CompositionalMultiphaseFVM: + +Element: CompositionalMultiphaseFVM +=================================== +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseFVM.rst + + +.. _XML_CompositionalMultiphaseFluid: + +Element: CompositionalMultiphaseFluid +===================================== +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseFluid.rst + + +.. _XML_CompositionalMultiphaseHybridFVM: + +Element: CompositionalMultiphaseHybridFVM +========================================= +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseHybridFVM.rst + + +.. _XML_CompositionalMultiphaseReservoir: + +Element: CompositionalMultiphaseReservoir +========================================= +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseReservoir.rst + + +.. _XML_CompositionalMultiphaseReservoirPoromechanics: + +Element: CompositionalMultiphaseReservoirPoromechanics +====================================================== +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseReservoirPoromechanics.rst + + +.. _XML_CompositionalMultiphaseReservoirPoromechanicsInitialization: + +Element: CompositionalMultiphaseReservoirPoromechanicsInitialization +==================================================================== +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseReservoirPoromechanicsInitialization.rst + + +.. _XML_CompositionalMultiphaseStatistics: + +Element: CompositionalMultiphaseStatistics +========================================== +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseStatistics.rst + + +.. _XML_CompositionalMultiphaseWell: + +Element: CompositionalMultiphaseWell +==================================== +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseWell.rst + + +.. _XML_CompositonalTwoPhaseFluidPengRobinson: + +Element: CompositonalTwoPhaseFluidPengRobinson +============================================== +.. include:: ../../coreComponents/schema/docs/CompositonalTwoPhaseFluidPengRobinson.rst + + +.. _XML_CompositonalTwoPhaseFluidSoaveRedlichKwong: + +Element: CompositonalTwoPhaseFluidSoaveRedlichKwong +=================================================== +.. include:: ../../coreComponents/schema/docs/CompositonalTwoPhaseFluidSoaveRedlichKwong.rst + + +.. _XML_CompressibleSinglePhaseFluid: + +Element: CompressibleSinglePhaseFluid +===================================== +.. include:: ../../coreComponents/schema/docs/CompressibleSinglePhaseFluid.rst + + +.. _XML_CompressibleSolidCarmanKozenyPermeability: + +Element: CompressibleSolidCarmanKozenyPermeability +================================================== +.. include:: ../../coreComponents/schema/docs/CompressibleSolidCarmanKozenyPermeability.rst + + +.. _XML_CompressibleSolidConstantPermeability: + +Element: CompressibleSolidConstantPermeability +============================================== +.. include:: ../../coreComponents/schema/docs/CompressibleSolidConstantPermeability.rst + + +.. _XML_CompressibleSolidExponentialDecayPermeability: + +Element: CompressibleSolidExponentialDecayPermeability +====================================================== +.. include:: ../../coreComponents/schema/docs/CompressibleSolidExponentialDecayPermeability.rst + + +.. _XML_CompressibleSolidParallelPlatesPermeability: + +Element: CompressibleSolidParallelPlatesPermeability +==================================================== +.. include:: ../../coreComponents/schema/docs/CompressibleSolidParallelPlatesPermeability.rst + + +.. _XML_CompressibleSolidSlipDependentPermeability: + +Element: CompressibleSolidSlipDependentPermeability +=================================================== +.. include:: ../../coreComponents/schema/docs/CompressibleSolidSlipDependentPermeability.rst + + +.. _XML_CompressibleSolidWillisRichardsPermeability: + +Element: CompressibleSolidWillisRichardsPermeability +==================================================== +.. include:: ../../coreComponents/schema/docs/CompressibleSolidWillisRichardsPermeability.rst + + +.. _XML_ConstantDiffusion: + +Element: ConstantDiffusion +========================== +.. include:: ../../coreComponents/schema/docs/ConstantDiffusion.rst + + +.. _XML_ConstantPermeability: + +Element: ConstantPermeability +============================= +.. include:: ../../coreComponents/schema/docs/ConstantPermeability.rst + + +.. _XML_Constitutive: + +Element: Constitutive +===================== +.. include:: ../../coreComponents/schema/docs/Constitutive.rst + + +.. _XML_Coulomb: + +Element: Coulomb +================ +.. include:: ../../coreComponents/schema/docs/Coulomb.rst + + +.. _XML_CustomPolarObject: + +Element: CustomPolarObject +========================== +.. include:: ../../coreComponents/schema/docs/CustomPolarObject.rst + + +.. _XML_Cylinder: + +Element: Cylinder +================= +.. include:: ../../coreComponents/schema/docs/Cylinder.rst + + +.. _XML_DamageElasticIsotropic: + +Element: DamageElasticIsotropic +=============================== +.. include:: ../../coreComponents/schema/docs/DamageElasticIsotropic.rst + + +.. _XML_DamageSpectralElasticIsotropic: + +Element: DamageSpectralElasticIsotropic +======================================= +.. include:: ../../coreComponents/schema/docs/DamageSpectralElasticIsotropic.rst + + +.. _XML_DamageVolDevElasticIsotropic: + +Element: DamageVolDevElasticIsotropic +===================================== +.. include:: ../../coreComponents/schema/docs/DamageVolDevElasticIsotropic.rst + + +.. _XML_DeadOilFluid: + +Element: DeadOilFluid +===================== +.. include:: ../../coreComponents/schema/docs/DeadOilFluid.rst + + +.. _XML_DelftEgg: + +Element: DelftEgg +================= +.. include:: ../../coreComponents/schema/docs/DelftEgg.rst + + +.. _XML_Dirichlet: + +Element: Dirichlet +================== +.. include:: ../../coreComponents/schema/docs/Dirichlet.rst + + +.. _XML_Disc: + +Element: Disc +============= +.. include:: ../../coreComponents/schema/docs/Disc.rst + + +.. _XML_DruckerPrager: + +Element: DruckerPrager +====================== +.. include:: ../../coreComponents/schema/docs/DruckerPrager.rst + + +.. _XML_ElasticFirstOrderSEM: + +Element: ElasticFirstOrderSEM +============================= +.. include:: ../../coreComponents/schema/docs/ElasticFirstOrderSEM.rst + + +.. _XML_ElasticIsotropic: + +Element: ElasticIsotropic +========================= +.. include:: ../../coreComponents/schema/docs/ElasticIsotropic.rst + + +.. _XML_ElasticIsotropicPressureDependent: + +Element: ElasticIsotropicPressureDependent +========================================== +.. include:: ../../coreComponents/schema/docs/ElasticIsotropicPressureDependent.rst + + +.. _XML_ElasticOrthotropic: + +Element: ElasticOrthotropic +=========================== +.. include:: ../../coreComponents/schema/docs/ElasticOrthotropic.rst + + +.. _XML_ElasticSEM: + +Element: ElasticSEM +=================== +.. include:: ../../coreComponents/schema/docs/ElasticSEM.rst + + +.. _XML_ElasticTransverseIsotropic: + +Element: ElasticTransverseIsotropic +=================================== +.. include:: ../../coreComponents/schema/docs/ElasticTransverseIsotropic.rst + + +.. _XML_ElementRegions: + +Element: ElementRegions +======================= +.. include:: ../../coreComponents/schema/docs/ElementRegions.rst + + +.. _XML_EmbeddedSurfaceGenerator: + +Element: EmbeddedSurfaceGenerator +================================= +.. include:: ../../coreComponents/schema/docs/EmbeddedSurfaceGenerator.rst + + +.. _XML_Events: + +Element: Events +=============== +.. include:: ../../coreComponents/schema/docs/Events.rst + + +.. _XML_ExponentialDecayPermeability: + +Element: ExponentialDecayPermeability +===================================== +.. include:: ../../coreComponents/schema/docs/ExponentialDecayPermeability.rst + + +.. _XML_ExtendedDruckerPrager: + +Element: ExtendedDruckerPrager +============================== +.. include:: ../../coreComponents/schema/docs/ExtendedDruckerPrager.rst + + +.. _XML_FieldSpecification: + +Element: FieldSpecification +=========================== +.. include:: ../../coreComponents/schema/docs/FieldSpecification.rst + + +.. _XML_FieldSpecifications: + +Element: FieldSpecifications +============================ +.. include:: ../../coreComponents/schema/docs/FieldSpecifications.rst + + +.. _XML_File: + +Element: File +============= +.. include:: ../../coreComponents/schema/docs/File.rst + + +.. _XML_FiniteElementSpace: + +Element: FiniteElementSpace +=========================== +.. include:: ../../coreComponents/schema/docs/FiniteElementSpace.rst + + +.. _XML_FiniteElements: + +Element: FiniteElements +======================= +.. include:: ../../coreComponents/schema/docs/FiniteElements.rst + + +.. _XML_FiniteVolume: + +Element: FiniteVolume +===================== +.. include:: ../../coreComponents/schema/docs/FiniteVolume.rst + + +.. _XML_FlowProppantTransport: + +Element: FlowProppantTransport +============================== +.. include:: ../../coreComponents/schema/docs/FlowProppantTransport.rst + + +.. _XML_FrictionlessContact: + +Element: FrictionlessContact +============================ +.. include:: ../../coreComponents/schema/docs/FrictionlessContact.rst + + +.. _XML_Functions: + +Element: Functions +================== +.. include:: ../../coreComponents/schema/docs/Functions.rst + + +.. _XML_Geometry: + +Element: Geometry +================= +.. include:: ../../coreComponents/schema/docs/Geometry.rst + + +.. _XML_HaltEvent: + +Element: HaltEvent +================== +.. include:: ../../coreComponents/schema/docs/HaltEvent.rst + + +.. _XML_HybridMimeticDiscretization: + +Element: HybridMimeticDiscretization +==================================== +.. include:: ../../coreComponents/schema/docs/HybridMimeticDiscretization.rst + + +.. _XML_Hydrofracture: + +Element: Hydrofracture +====================== +.. include:: ../../coreComponents/schema/docs/Hydrofracture.rst + + +.. _XML_HydrostaticEquilibrium: + +Element: HydrostaticEquilibrium +=============================== +.. include:: ../../coreComponents/schema/docs/HydrostaticEquilibrium.rst + + +.. _XML_Included: + +Element: Included +================= +.. include:: ../../coreComponents/schema/docs/Included.rst + + +.. _XML_InternalMesh: + +Element: InternalMesh +===================== +.. include:: ../../coreComponents/schema/docs/InternalMesh.rst + + +.. _XML_InternalWell: + +Element: InternalWell +===================== +.. include:: ../../coreComponents/schema/docs/InternalWell.rst + + +.. _XML_InternalWellbore: + +Element: InternalWellbore +========================= +.. include:: ../../coreComponents/schema/docs/InternalWellbore.rst + + +.. _XML_JFunctionCapillaryPressure: + +Element: JFunctionCapillaryPressure +=================================== +.. include:: ../../coreComponents/schema/docs/JFunctionCapillaryPressure.rst + + +.. _XML_LagrangianContact: + +Element: LagrangianContact +========================== +.. include:: ../../coreComponents/schema/docs/LagrangianContact.rst + + +.. _XML_LaplaceFEM: + +Element: LaplaceFEM +=================== +.. include:: ../../coreComponents/schema/docs/LaplaceFEM.rst + + +.. _XML_LinearIsotropicDispersion: + +Element: LinearIsotropicDispersion +================================== +.. include:: ../../coreComponents/schema/docs/LinearIsotropicDispersion.rst + + +.. _XML_LinearSolverParameters: + +Element: LinearSolverParameters +=============================== +.. include:: ../../coreComponents/schema/docs/LinearSolverParameters.rst + + +.. _XML_Mesh: + +Element: Mesh +============= +.. include:: ../../coreComponents/schema/docs/Mesh.rst + + +.. _XML_ModifiedCamClay: + +Element: ModifiedCamClay +======================== +.. include:: ../../coreComponents/schema/docs/ModifiedCamClay.rst + + +.. _XML_MultiPhaseConstantThermalConductivity: + +Element: MultiPhaseConstantThermalConductivity +============================================== +.. include:: ../../coreComponents/schema/docs/MultiPhaseConstantThermalConductivity.rst + + +.. _XML_MultiPhaseVolumeWeightedThermalConductivity: + +Element: MultiPhaseVolumeWeightedThermalConductivity +==================================================== +.. include:: ../../coreComponents/schema/docs/MultiPhaseVolumeWeightedThermalConductivity.rst + + +.. _XML_MultiphasePoromechanics: + +Element: MultiphasePoromechanics +================================ +.. include:: ../../coreComponents/schema/docs/MultiphasePoromechanics.rst + + +.. _XML_MultiphasePoromechanicsInitialization: + +Element: MultiphasePoromechanicsInitialization +============================================== +.. include:: ../../coreComponents/schema/docs/MultiphasePoromechanicsInitialization.rst + + +.. _XML_MultiphasePoromechanicsReservoir: + +Element: MultiphasePoromechanicsReservoir +========================================= +.. include:: ../../coreComponents/schema/docs/MultiphasePoromechanicsReservoir.rst + + +.. _XML_MultivariableTableFunction: + +Element: MultivariableTableFunction +=================================== +.. include:: ../../coreComponents/schema/docs/MultivariableTableFunction.rst + + +.. _XML_NonlinearSolverParameters: + +Element: NonlinearSolverParameters +================================== +.. include:: ../../coreComponents/schema/docs/NonlinearSolverParameters.rst + + +.. _XML_NullModel: + +Element: NullModel +================== +.. include:: ../../coreComponents/schema/docs/NullModel.rst + + +.. _XML_NumericalMethods: + +Element: NumericalMethods +========================= +.. include:: ../../coreComponents/schema/docs/NumericalMethods.rst + + +.. _XML_Outputs: + +Element: Outputs +================ +.. include:: ../../coreComponents/schema/docs/Outputs.rst + + +.. _XML_PML: + +Element: PML +============ +.. include:: ../../coreComponents/schema/docs/PML.rst + + +.. _XML_PVTDriver: + +Element: PVTDriver +================== +.. include:: ../../coreComponents/schema/docs/PVTDriver.rst + + +.. _XML_PackCollection: + +Element: PackCollection +======================= +.. include:: ../../coreComponents/schema/docs/PackCollection.rst + + +.. _XML_ParallelPlatesPermeability: + +Element: ParallelPlatesPermeability +=================================== +.. include:: ../../coreComponents/schema/docs/ParallelPlatesPermeability.rst + + +.. _XML_Parameter: + +Element: Parameter +================== +.. include:: ../../coreComponents/schema/docs/Parameter.rst + + +.. _XML_Parameters: + +Element: Parameters +=================== +.. include:: ../../coreComponents/schema/docs/Parameters.rst + + +.. _XML_ParticleFluid: + +Element: ParticleFluid +====================== +.. include:: ../../coreComponents/schema/docs/ParticleFluid.rst + + +.. _XML_ParticleMesh: + +Element: ParticleMesh +===================== +.. include:: ../../coreComponents/schema/docs/ParticleMesh.rst + + +.. _XML_ParticleRegion: + +Element: ParticleRegion +======================= +.. include:: ../../coreComponents/schema/docs/ParticleRegion.rst + + +.. _XML_ParticleRegions: + +Element: ParticleRegions +======================== +.. include:: ../../coreComponents/schema/docs/ParticleRegions.rst + + +.. _XML_PerfectlyPlastic: + +Element: PerfectlyPlastic +========================= +.. include:: ../../coreComponents/schema/docs/PerfectlyPlastic.rst + + +.. _XML_Perforation: + +Element: Perforation +==================== +.. include:: ../../coreComponents/schema/docs/Perforation.rst + + +.. _XML_PeriodicEvent: + +Element: PeriodicEvent +====================== +.. include:: ../../coreComponents/schema/docs/PeriodicEvent.rst + + +.. _XML_PermeabilityBase: + +Element: PermeabilityBase +========================= +.. include:: ../../coreComponents/schema/docs/PermeabilityBase.rst + + +.. _XML_PhaseFieldDamageFEM: + +Element: PhaseFieldDamageFEM +============================ +.. include:: ../../coreComponents/schema/docs/PhaseFieldDamageFEM.rst + + +.. _XML_PhaseFieldFracture: + +Element: PhaseFieldFracture +=========================== +.. include:: ../../coreComponents/schema/docs/PhaseFieldFracture.rst + + +.. _XML_PorousDamageElasticIsotropic: + +Element: PorousDamageElasticIsotropic +===================================== +.. include:: ../../coreComponents/schema/docs/PorousDamageElasticIsotropic.rst + + +.. _XML_PorousDamageSpectralElasticIsotropic: + +Element: PorousDamageSpectralElasticIsotropic +============================================= +.. include:: ../../coreComponents/schema/docs/PorousDamageSpectralElasticIsotropic.rst + + +.. _XML_PorousDamageVolDevElasticIsotropic: + +Element: PorousDamageVolDevElasticIsotropic +=========================================== +.. include:: ../../coreComponents/schema/docs/PorousDamageVolDevElasticIsotropic.rst + + +.. _XML_PorousDelftEgg: + +Element: PorousDelftEgg +======================= +.. include:: ../../coreComponents/schema/docs/PorousDelftEgg.rst + + +.. _XML_PorousDruckerPrager: + +Element: PorousDruckerPrager +============================ +.. include:: ../../coreComponents/schema/docs/PorousDruckerPrager.rst + + +.. _XML_PorousElasticIsotropic: + +Element: PorousElasticIsotropic +=============================== +.. include:: ../../coreComponents/schema/docs/PorousElasticIsotropic.rst + + +.. _XML_PorousElasticOrthotropic: + +Element: PorousElasticOrthotropic +================================= +.. include:: ../../coreComponents/schema/docs/PorousElasticOrthotropic.rst + + +.. _XML_PorousElasticTransverseIsotropic: + +Element: PorousElasticTransverseIsotropic +========================================= +.. include:: ../../coreComponents/schema/docs/PorousElasticTransverseIsotropic.rst + + +.. _XML_PorousExtendedDruckerPrager: + +Element: PorousExtendedDruckerPrager +==================================== +.. include:: ../../coreComponents/schema/docs/PorousExtendedDruckerPrager.rst + + +.. _XML_PorousModifiedCamClay: + +Element: PorousModifiedCamClay +============================== +.. include:: ../../coreComponents/schema/docs/PorousModifiedCamClay.rst + + +.. _XML_PorousViscoDruckerPrager: + +Element: PorousViscoDruckerPrager +================================= +.. include:: ../../coreComponents/schema/docs/PorousViscoDruckerPrager.rst + + +.. _XML_PorousViscoExtendedDruckerPrager: + +Element: PorousViscoExtendedDruckerPrager +========================================= +.. include:: ../../coreComponents/schema/docs/PorousViscoExtendedDruckerPrager.rst + + +.. _XML_PorousViscoModifiedCamClay: + +Element: PorousViscoModifiedCamClay +=================================== +.. include:: ../../coreComponents/schema/docs/PorousViscoModifiedCamClay.rst + + +.. _XML_PressurePorosity: + +Element: PressurePorosity +========================= +.. include:: ../../coreComponents/schema/docs/PressurePorosity.rst + + +.. _XML_Problem: + +Element: Problem +================ +.. include:: ../../coreComponents/schema/docs/Problem.rst + + +.. _XML_ProppantPermeability: + +Element: ProppantPermeability +============================= +.. include:: ../../coreComponents/schema/docs/ProppantPermeability.rst + + +.. _XML_ProppantPorosity: + +Element: ProppantPorosity +========================= +.. include:: ../../coreComponents/schema/docs/ProppantPorosity.rst + + +.. _XML_ProppantSlurryFluid: + +Element: ProppantSlurryFluid +============================ +.. include:: ../../coreComponents/schema/docs/ProppantSlurryFluid.rst + + +.. _XML_ProppantSolidProppantPermeability: + +Element: ProppantSolidProppantPermeability +========================================== +.. include:: ../../coreComponents/schema/docs/ProppantSolidProppantPermeability.rst + + +.. _XML_ProppantTransport: + +Element: ProppantTransport +========================== +.. include:: ../../coreComponents/schema/docs/ProppantTransport.rst + + +.. _XML_Python: + +Element: Python +=============== +.. include:: ../../coreComponents/schema/docs/Python.rst + + +.. _XML_ReactiveBrine: + +Element: ReactiveBrine +====================== +.. include:: ../../coreComponents/schema/docs/ReactiveBrine.rst + + +.. _XML_ReactiveBrineThermal: + +Element: ReactiveBrineThermal +============================= +.. include:: ../../coreComponents/schema/docs/ReactiveBrineThermal.rst + + +.. _XML_ReactiveCompositionalMultiphaseOBL: + +Element: ReactiveCompositionalMultiphaseOBL +=========================================== +.. include:: ../../coreComponents/schema/docs/ReactiveCompositionalMultiphaseOBL.rst + + +.. _XML_ReactiveFluidDriver: + +Element: ReactiveFluidDriver +============================ +.. include:: ../../coreComponents/schema/docs/ReactiveFluidDriver.rst + + +.. _XML_Rectangle: + +Element: Rectangle +================== +.. include:: ../../coreComponents/schema/docs/Rectangle.rst + + +.. _XML_RelpermDriver: + +Element: RelpermDriver +====================== +.. include:: ../../coreComponents/schema/docs/RelpermDriver.rst + + +.. _XML_Restart: + +Element: Restart +================ +.. include:: ../../coreComponents/schema/docs/Restart.rst + + +.. _XML_Run: + +Element: Run +============ +.. include:: ../../coreComponents/schema/docs/Run.rst + + +.. _XML_Silo: + +Element: Silo +============= +.. include:: ../../coreComponents/schema/docs/Silo.rst + + +.. _XML_SinglePhaseConstantThermalConductivity: + +Element: SinglePhaseConstantThermalConductivity +=============================================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseConstantThermalConductivity.rst + + +.. _XML_SinglePhaseFVM: + +Element: SinglePhaseFVM +======================= +.. include:: ../../coreComponents/schema/docs/SinglePhaseFVM.rst + + +.. _XML_SinglePhaseHybridFVM: + +Element: SinglePhaseHybridFVM +============================= +.. include:: ../../coreComponents/schema/docs/SinglePhaseHybridFVM.rst + + +.. _XML_SinglePhasePoromechanics: + +Element: SinglePhasePoromechanics +================================= +.. include:: ../../coreComponents/schema/docs/SinglePhasePoromechanics.rst + + +.. _XML_SinglePhasePoromechanicsConformingFractures: + +Element: SinglePhasePoromechanicsConformingFractures +==================================================== +.. include:: ../../coreComponents/schema/docs/SinglePhasePoromechanicsConformingFractures.rst + + +.. _XML_SinglePhasePoromechanicsEmbeddedFractures: + +Element: SinglePhasePoromechanicsEmbeddedFractures +================================================== +.. include:: ../../coreComponents/schema/docs/SinglePhasePoromechanicsEmbeddedFractures.rst + + +.. _XML_SinglePhasePoromechanicsInitialization: + +Element: SinglePhasePoromechanicsInitialization +=============================================== +.. include:: ../../coreComponents/schema/docs/SinglePhasePoromechanicsInitialization.rst + + +.. _XML_SinglePhasePoromechanicsReservoir: + +Element: SinglePhasePoromechanicsReservoir +========================================== +.. include:: ../../coreComponents/schema/docs/SinglePhasePoromechanicsReservoir.rst + + +.. _XML_SinglePhaseProppantFVM: + +Element: SinglePhaseProppantFVM +=============================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseProppantFVM.rst + + +.. _XML_SinglePhaseReservoir: + +Element: SinglePhaseReservoir +============================= +.. include:: ../../coreComponents/schema/docs/SinglePhaseReservoir.rst + + +.. _XML_SinglePhaseReservoirPoromechanics: + +Element: SinglePhaseReservoirPoromechanics +========================================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseReservoirPoromechanics.rst + + +.. _XML_SinglePhaseReservoirPoromechanicsInitialization: + +Element: SinglePhaseReservoirPoromechanicsInitialization +======================================================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseReservoirPoromechanicsInitialization.rst + + +.. _XML_SinglePhaseStatistics: + +Element: SinglePhaseStatistics +============================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseStatistics.rst + + +.. _XML_SinglePhaseWell: + +Element: SinglePhaseWell +======================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseWell.rst + + +.. _XML_SlipDependentPermeability: + +Element: SlipDependentPermeability +================================== +.. include:: ../../coreComponents/schema/docs/SlipDependentPermeability.rst + + +.. _XML_SolidInternalEnergy: + +Element: SolidInternalEnergy +============================ +.. include:: ../../coreComponents/schema/docs/SolidInternalEnergy.rst + + +.. _XML_SolidMechanicsEmbeddedFractures: + +Element: SolidMechanicsEmbeddedFractures +======================================== +.. include:: ../../coreComponents/schema/docs/SolidMechanicsEmbeddedFractures.rst + + +.. _XML_SolidMechanicsLagrangianSSLE: + +Element: SolidMechanicsLagrangianSSLE +===================================== +.. include:: ../../coreComponents/schema/docs/SolidMechanicsLagrangianSSLE.rst + + +.. _XML_SolidMechanicsStateReset: + +Element: SolidMechanicsStateReset +================================= +.. include:: ../../coreComponents/schema/docs/SolidMechanicsStateReset.rst + + +.. _XML_SolidMechanicsStatistics: + +Element: SolidMechanicsStatistics +================================= +.. include:: ../../coreComponents/schema/docs/SolidMechanicsStatistics.rst + + +.. _XML_SolidMechanics_LagrangianFEM: + +Element: SolidMechanics_LagrangianFEM +===================================== +.. include:: ../../coreComponents/schema/docs/SolidMechanics_LagrangianFEM.rst + + +.. _XML_SolidMechanics_MPM: + +Element: SolidMechanics_MPM +=========================== +.. include:: ../../coreComponents/schema/docs/SolidMechanics_MPM.rst + + +.. _XML_SoloEvent: + +Element: SoloEvent +================== +.. include:: ../../coreComponents/schema/docs/SoloEvent.rst + + +.. _XML_Solvers: + +Element: Solvers +================ +.. include:: ../../coreComponents/schema/docs/Solvers.rst + + +.. _XML_SourceFlux: + +Element: SourceFlux +=================== +.. include:: ../../coreComponents/schema/docs/SourceFlux.rst + + +.. _XML_SurfaceElementRegion: + +Element: SurfaceElementRegion +============================= +.. include:: ../../coreComponents/schema/docs/SurfaceElementRegion.rst + + +.. _XML_SurfaceGenerator: + +Element: SurfaceGenerator +========================= +.. include:: ../../coreComponents/schema/docs/SurfaceGenerator.rst + + +.. _XML_SymbolicFunction: + +Element: SymbolicFunction +========================= +.. include:: ../../coreComponents/schema/docs/SymbolicFunction.rst + + +.. _XML_TableCapillaryPressure: + +Element: TableCapillaryPressure +=============================== +.. include:: ../../coreComponents/schema/docs/TableCapillaryPressure.rst + + +.. _XML_TableFunction: + +Element: TableFunction +====================== +.. include:: ../../coreComponents/schema/docs/TableFunction.rst + + +.. _XML_TableRelativePermeability: + +Element: TableRelativePermeability +================================== +.. include:: ../../coreComponents/schema/docs/TableRelativePermeability.rst + + +.. _XML_TableRelativePermeabilityHysteresis: + +Element: TableRelativePermeabilityHysteresis +============================================ +.. include:: ../../coreComponents/schema/docs/TableRelativePermeabilityHysteresis.rst + + +.. _XML_Tasks: + +Element: Tasks +============== +.. include:: ../../coreComponents/schema/docs/Tasks.rst + + +.. _XML_ThermalCompressibleSinglePhaseFluid: + +Element: ThermalCompressibleSinglePhaseFluid +============================================ +.. include:: ../../coreComponents/schema/docs/ThermalCompressibleSinglePhaseFluid.rst + + +.. _XML_ThickPlane: + +Element: ThickPlane +=================== +.. include:: ../../coreComponents/schema/docs/ThickPlane.rst + + +.. _XML_TimeHistory: + +Element: TimeHistory +==================== +.. include:: ../../coreComponents/schema/docs/TimeHistory.rst + + +.. _XML_Traction: + +Element: Traction +================= +.. include:: ../../coreComponents/schema/docs/Traction.rst + + +.. _XML_TriaxialDriver: + +Element: TriaxialDriver +======================= +.. include:: ../../coreComponents/schema/docs/TriaxialDriver.rst + + +.. _XML_TwoPointFluxApproximation: + +Element: TwoPointFluxApproximation +================================== +.. include:: ../../coreComponents/schema/docs/TwoPointFluxApproximation.rst + + +.. _XML_VTK: + +Element: VTK +============ +.. include:: ../../coreComponents/schema/docs/VTK.rst + + +.. _XML_VTKMesh: + +Element: VTKMesh +================ +.. include:: ../../coreComponents/schema/docs/VTKMesh.rst + + +.. _XML_VTKWell: + +Element: VTKWell +================ +.. include:: ../../coreComponents/schema/docs/VTKWell.rst + + +.. _XML_VanGenuchtenBakerRelativePermeability: + +Element: VanGenuchtenBakerRelativePermeability +============================================== +.. include:: ../../coreComponents/schema/docs/VanGenuchtenBakerRelativePermeability.rst + + +.. _XML_VanGenuchtenCapillaryPressure: + +Element: VanGenuchtenCapillaryPressure +====================================== +.. include:: ../../coreComponents/schema/docs/VanGenuchtenCapillaryPressure.rst + + +.. _XML_VanGenuchtenStone2RelativePermeability: + +Element: VanGenuchtenStone2RelativePermeability +=============================================== +.. include:: ../../coreComponents/schema/docs/VanGenuchtenStone2RelativePermeability.rst + + +.. _XML_ViscoDruckerPrager: + +Element: ViscoDruckerPrager +=========================== +.. include:: ../../coreComponents/schema/docs/ViscoDruckerPrager.rst + + +.. _XML_ViscoExtendedDruckerPrager: + +Element: ViscoExtendedDruckerPrager +=================================== +.. include:: ../../coreComponents/schema/docs/ViscoExtendedDruckerPrager.rst + + +.. _XML_ViscoModifiedCamClay: + +Element: ViscoModifiedCamClay +============================= +.. include:: ../../coreComponents/schema/docs/ViscoModifiedCamClay.rst + + +.. _XML_WellControls: + +Element: WellControls +===================== +.. include:: ../../coreComponents/schema/docs/WellControls.rst + + +.. _XML_WellElementRegion: + +Element: WellElementRegion +========================== +.. include:: ../../coreComponents/schema/docs/WellElementRegion.rst + + +.. _XML_WillisRichardsPermeability: + +Element: WillisRichardsPermeability +=================================== +.. include:: ../../coreComponents/schema/docs/WillisRichardsPermeability.rst + + +.. _XML_crusher: + +Element: crusher +================ +.. include:: ../../coreComponents/schema/docs/crusher.rst + + +.. _XML_lassen: + +Element: lassen +=============== +.. include:: ../../coreComponents/schema/docs/lassen.rst + + +.. _XML_quartz: + +Element: quartz +=============== +.. include:: ../../coreComponents/schema/docs/quartz.rst + +******************************** +Datastructure Definitions +******************************** + + +.. _DATASTRUCTURE_AcousticElasticSEM: + +Datastructure: AcousticElasticSEM +================================= +.. include:: ../../coreComponents/schema/docs/AcousticElasticSEM_other.rst + + +.. _DATASTRUCTURE_AcousticFirstOrderSEM: + +Datastructure: AcousticFirstOrderSEM +==================================== +.. include:: ../../coreComponents/schema/docs/AcousticFirstOrderSEM_other.rst + + +.. _DATASTRUCTURE_AcousticSEM: + +Datastructure: AcousticSEM +========================== +.. include:: ../../coreComponents/schema/docs/AcousticSEM_other.rst + + +.. _DATASTRUCTURE_AcousticVTISEM: + +Datastructure: AcousticVTISEM +============================= +.. include:: ../../coreComponents/schema/docs/AcousticVTISEM_other.rst + + +.. _DATASTRUCTURE_Aquifer: + +Datastructure: Aquifer +====================== +.. include:: ../../coreComponents/schema/docs/Aquifer_other.rst + + +.. _DATASTRUCTURE_Benchmarks: + +Datastructure: Benchmarks +========================= +.. include:: ../../coreComponents/schema/docs/Benchmarks_other.rst + + +.. _DATASTRUCTURE_BiotPorosity: + +Datastructure: BiotPorosity +=========================== +.. include:: ../../coreComponents/schema/docs/BiotPorosity_other.rst + + +.. _DATASTRUCTURE_BlackOilFluid: + +Datastructure: BlackOilFluid +============================ +.. include:: ../../coreComponents/schema/docs/BlackOilFluid_other.rst + + +.. _DATASTRUCTURE_Blueprint: + +Datastructure: Blueprint +======================== +.. include:: ../../coreComponents/schema/docs/Blueprint_other.rst + + +.. _DATASTRUCTURE_Box: + +Datastructure: Box +================== +.. include:: ../../coreComponents/schema/docs/Box_other.rst + + +.. _DATASTRUCTURE_BrooksCoreyBakerRelativePermeability: + +Datastructure: BrooksCoreyBakerRelativePermeability +=================================================== +.. include:: ../../coreComponents/schema/docs/BrooksCoreyBakerRelativePermeability_other.rst + + +.. _DATASTRUCTURE_BrooksCoreyCapillaryPressure: + +Datastructure: BrooksCoreyCapillaryPressure +=========================================== +.. include:: ../../coreComponents/schema/docs/BrooksCoreyCapillaryPressure_other.rst + + +.. _DATASTRUCTURE_BrooksCoreyRelativePermeability: + +Datastructure: BrooksCoreyRelativePermeability +============================================== +.. include:: ../../coreComponents/schema/docs/BrooksCoreyRelativePermeability_other.rst + + +.. _DATASTRUCTURE_BrooksCoreyStone2RelativePermeability: + +Datastructure: BrooksCoreyStone2RelativePermeability +==================================================== +.. include:: ../../coreComponents/schema/docs/BrooksCoreyStone2RelativePermeability_other.rst + + +.. _DATASTRUCTURE_CO2BrineEzrokhiFluid: + +Datastructure: CO2BrineEzrokhiFluid +=================================== +.. include:: ../../coreComponents/schema/docs/CO2BrineEzrokhiFluid_other.rst + + +.. _DATASTRUCTURE_CO2BrineEzrokhiThermalFluid: + +Datastructure: CO2BrineEzrokhiThermalFluid +========================================== +.. include:: ../../coreComponents/schema/docs/CO2BrineEzrokhiThermalFluid_other.rst + + +.. _DATASTRUCTURE_CO2BrinePhillipsFluid: + +Datastructure: CO2BrinePhillipsFluid +==================================== +.. include:: ../../coreComponents/schema/docs/CO2BrinePhillipsFluid_other.rst + + +.. _DATASTRUCTURE_CO2BrinePhillipsThermalFluid: + +Datastructure: CO2BrinePhillipsThermalFluid +=========================================== +.. include:: ../../coreComponents/schema/docs/CO2BrinePhillipsThermalFluid_other.rst + + +.. _DATASTRUCTURE_CarmanKozenyPermeability: + +Datastructure: CarmanKozenyPermeability +======================================= +.. include:: ../../coreComponents/schema/docs/CarmanKozenyPermeability_other.rst + + +.. _DATASTRUCTURE_Catalyst: + +Datastructure: Catalyst +======================= +.. include:: ../../coreComponents/schema/docs/Catalyst_other.rst + + +.. _DATASTRUCTURE_CellElementRegion: + +Datastructure: CellElementRegion +================================ +.. include:: ../../coreComponents/schema/docs/CellElementRegion_other.rst + + +.. _DATASTRUCTURE_CeramicDamage: + +Datastructure: CeramicDamage +============================ +.. include:: ../../coreComponents/schema/docs/CeramicDamage_other.rst + + +.. _DATASTRUCTURE_ChomboIO: + +Datastructure: ChomboIO +======================= +.. include:: ../../coreComponents/schema/docs/ChomboIO_other.rst + + +.. _DATASTRUCTURE_CompositeFunction: + +Datastructure: CompositeFunction +================================ +.. include:: ../../coreComponents/schema/docs/CompositeFunction_other.rst + + +.. _DATASTRUCTURE_CompositionalMultiphaseFVM: + +Datastructure: CompositionalMultiphaseFVM +========================================= +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseFVM_other.rst + + +.. _DATASTRUCTURE_CompositionalMultiphaseFluid: + +Datastructure: CompositionalMultiphaseFluid +=========================================== +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseFluid_other.rst + + +.. _DATASTRUCTURE_CompositionalMultiphaseHybridFVM: + +Datastructure: CompositionalMultiphaseHybridFVM +=============================================== +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseHybridFVM_other.rst + + +.. _DATASTRUCTURE_CompositionalMultiphaseReservoir: + +Datastructure: CompositionalMultiphaseReservoir +=============================================== +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseReservoir_other.rst + + +.. _DATASTRUCTURE_CompositionalMultiphaseReservoirPoromechanics: + +Datastructure: CompositionalMultiphaseReservoirPoromechanics +============================================================ +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseReservoirPoromechanics_other.rst + + +.. _DATASTRUCTURE_CompositionalMultiphaseReservoirPoromechanicsInitialization: + +Datastructure: CompositionalMultiphaseReservoirPoromechanicsInitialization +========================================================================== +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseReservoirPoromechanicsInitialization_other.rst + + +.. _DATASTRUCTURE_CompositionalMultiphaseStatistics: + +Datastructure: CompositionalMultiphaseStatistics +================================================ +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseStatistics_other.rst + + +.. _DATASTRUCTURE_CompositionalMultiphaseWell: + +Datastructure: CompositionalMultiphaseWell +========================================== +.. include:: ../../coreComponents/schema/docs/CompositionalMultiphaseWell_other.rst + + +.. _DATASTRUCTURE_CompositonalTwoPhaseFluidPengRobinson: + +Datastructure: CompositonalTwoPhaseFluidPengRobinson +==================================================== +.. include:: ../../coreComponents/schema/docs/CompositonalTwoPhaseFluidPengRobinson_other.rst + + +.. _DATASTRUCTURE_CompositonalTwoPhaseFluidSoaveRedlichKwong: + +Datastructure: CompositonalTwoPhaseFluidSoaveRedlichKwong +========================================================= +.. include:: ../../coreComponents/schema/docs/CompositonalTwoPhaseFluidSoaveRedlichKwong_other.rst + + +.. _DATASTRUCTURE_CompressibleSinglePhaseFluid: + +Datastructure: CompressibleSinglePhaseFluid +=========================================== +.. include:: ../../coreComponents/schema/docs/CompressibleSinglePhaseFluid_other.rst + + +.. _DATASTRUCTURE_CompressibleSolidCarmanKozenyPermeability: + +Datastructure: CompressibleSolidCarmanKozenyPermeability +======================================================== +.. include:: ../../coreComponents/schema/docs/CompressibleSolidCarmanKozenyPermeability_other.rst + + +.. _DATASTRUCTURE_CompressibleSolidConstantPermeability: + +Datastructure: CompressibleSolidConstantPermeability +==================================================== +.. include:: ../../coreComponents/schema/docs/CompressibleSolidConstantPermeability_other.rst + + +.. _DATASTRUCTURE_CompressibleSolidExponentialDecayPermeability: + +Datastructure: CompressibleSolidExponentialDecayPermeability +============================================================ +.. include:: ../../coreComponents/schema/docs/CompressibleSolidExponentialDecayPermeability_other.rst + + +.. _DATASTRUCTURE_CompressibleSolidParallelPlatesPermeability: + +Datastructure: CompressibleSolidParallelPlatesPermeability +========================================================== +.. include:: ../../coreComponents/schema/docs/CompressibleSolidParallelPlatesPermeability_other.rst + + +.. _DATASTRUCTURE_CompressibleSolidSlipDependentPermeability: + +Datastructure: CompressibleSolidSlipDependentPermeability +========================================================= +.. include:: ../../coreComponents/schema/docs/CompressibleSolidSlipDependentPermeability_other.rst + + +.. _DATASTRUCTURE_CompressibleSolidWillisRichardsPermeability: + +Datastructure: CompressibleSolidWillisRichardsPermeability +========================================================== +.. include:: ../../coreComponents/schema/docs/CompressibleSolidWillisRichardsPermeability_other.rst + + +.. _DATASTRUCTURE_ConstantDiffusion: + +Datastructure: ConstantDiffusion +================================ +.. include:: ../../coreComponents/schema/docs/ConstantDiffusion_other.rst + + +.. _DATASTRUCTURE_ConstantPermeability: + +Datastructure: ConstantPermeability +=================================== +.. include:: ../../coreComponents/schema/docs/ConstantPermeability_other.rst + + +.. _DATASTRUCTURE_Constitutive: + +Datastructure: Constitutive +=========================== +.. include:: ../../coreComponents/schema/docs/Constitutive_other.rst + + +.. _DATASTRUCTURE_ConstitutiveModels: + +Datastructure: ConstitutiveModels +================================= +.. include:: ../../coreComponents/schema/docs/ConstitutiveModels_other.rst + + +.. _DATASTRUCTURE_Coulomb: + +Datastructure: Coulomb +====================== +.. include:: ../../coreComponents/schema/docs/Coulomb_other.rst + + +.. _DATASTRUCTURE_CustomPolarObject: + +Datastructure: CustomPolarObject +================================ +.. include:: ../../coreComponents/schema/docs/CustomPolarObject_other.rst + + +.. _DATASTRUCTURE_Cylinder: + +Datastructure: Cylinder +======================= +.. include:: ../../coreComponents/schema/docs/Cylinder_other.rst + + +.. _DATASTRUCTURE_DamageElasticIsotropic: + +Datastructure: DamageElasticIsotropic +===================================== +.. include:: ../../coreComponents/schema/docs/DamageElasticIsotropic_other.rst + + +.. _DATASTRUCTURE_DamageSpectralElasticIsotropic: + +Datastructure: DamageSpectralElasticIsotropic +============================================= +.. include:: ../../coreComponents/schema/docs/DamageSpectralElasticIsotropic_other.rst + + +.. _DATASTRUCTURE_DamageVolDevElasticIsotropic: + +Datastructure: DamageVolDevElasticIsotropic +=========================================== +.. include:: ../../coreComponents/schema/docs/DamageVolDevElasticIsotropic_other.rst + + +.. _DATASTRUCTURE_DeadOilFluid: + +Datastructure: DeadOilFluid +=========================== +.. include:: ../../coreComponents/schema/docs/DeadOilFluid_other.rst + + +.. _DATASTRUCTURE_DelftEgg: + +Datastructure: DelftEgg +======================= +.. include:: ../../coreComponents/schema/docs/DelftEgg_other.rst + + +.. _DATASTRUCTURE_Dirichlet: + +Datastructure: Dirichlet +======================== +.. include:: ../../coreComponents/schema/docs/Dirichlet_other.rst + + +.. _DATASTRUCTURE_Disc: + +Datastructure: Disc +=================== +.. include:: ../../coreComponents/schema/docs/Disc_other.rst + + +.. _DATASTRUCTURE_DruckerPrager: + +Datastructure: DruckerPrager +============================ +.. include:: ../../coreComponents/schema/docs/DruckerPrager_other.rst + + +.. _DATASTRUCTURE_ElasticFirstOrderSEM: + +Datastructure: ElasticFirstOrderSEM +=================================== +.. include:: ../../coreComponents/schema/docs/ElasticFirstOrderSEM_other.rst + + +.. _DATASTRUCTURE_ElasticIsotropic: + +Datastructure: ElasticIsotropic +=============================== +.. include:: ../../coreComponents/schema/docs/ElasticIsotropic_other.rst + + +.. _DATASTRUCTURE_ElasticIsotropicPressureDependent: + +Datastructure: ElasticIsotropicPressureDependent +================================================ +.. include:: ../../coreComponents/schema/docs/ElasticIsotropicPressureDependent_other.rst + + +.. _DATASTRUCTURE_ElasticOrthotropic: + +Datastructure: ElasticOrthotropic +================================= +.. include:: ../../coreComponents/schema/docs/ElasticOrthotropic_other.rst + + +.. _DATASTRUCTURE_ElasticSEM: + +Datastructure: ElasticSEM +========================= +.. include:: ../../coreComponents/schema/docs/ElasticSEM_other.rst + + +.. _DATASTRUCTURE_ElasticTransverseIsotropic: + +Datastructure: ElasticTransverseIsotropic +========================================= +.. include:: ../../coreComponents/schema/docs/ElasticTransverseIsotropic_other.rst + + +.. _DATASTRUCTURE_ElementRegions: + +Datastructure: ElementRegions +============================= +.. include:: ../../coreComponents/schema/docs/ElementRegions_other.rst + + +.. _DATASTRUCTURE_EmbeddedSurfaceGenerator: + +Datastructure: EmbeddedSurfaceGenerator +======================================= +.. include:: ../../coreComponents/schema/docs/EmbeddedSurfaceGenerator_other.rst + + +.. _DATASTRUCTURE_Events: + +Datastructure: Events +===================== +.. include:: ../../coreComponents/schema/docs/Events_other.rst + + +.. _DATASTRUCTURE_ExponentialDecayPermeability: + +Datastructure: ExponentialDecayPermeability +=========================================== +.. include:: ../../coreComponents/schema/docs/ExponentialDecayPermeability_other.rst + + +.. _DATASTRUCTURE_ExtendedDruckerPrager: + +Datastructure: ExtendedDruckerPrager +==================================== +.. include:: ../../coreComponents/schema/docs/ExtendedDruckerPrager_other.rst + + +.. _DATASTRUCTURE_FieldSpecification: + +Datastructure: FieldSpecification +================================= +.. include:: ../../coreComponents/schema/docs/FieldSpecification_other.rst + + +.. _DATASTRUCTURE_FieldSpecifications: + +Datastructure: FieldSpecifications +================================== +.. include:: ../../coreComponents/schema/docs/FieldSpecifications_other.rst + + +.. _DATASTRUCTURE_File: + +Datastructure: File +=================== +.. include:: ../../coreComponents/schema/docs/File_other.rst + + +.. _DATASTRUCTURE_FiniteElementSpace: + +Datastructure: FiniteElementSpace +================================= +.. include:: ../../coreComponents/schema/docs/FiniteElementSpace_other.rst + + +.. _DATASTRUCTURE_FiniteElements: + +Datastructure: FiniteElements +============================= +.. include:: ../../coreComponents/schema/docs/FiniteElements_other.rst + + +.. _DATASTRUCTURE_FiniteVolume: + +Datastructure: FiniteVolume +=========================== +.. include:: ../../coreComponents/schema/docs/FiniteVolume_other.rst + + +.. _DATASTRUCTURE_FlowProppantTransport: + +Datastructure: FlowProppantTransport +==================================== +.. include:: ../../coreComponents/schema/docs/FlowProppantTransport_other.rst + + +.. _DATASTRUCTURE_FrictionlessContact: + +Datastructure: FrictionlessContact +================================== +.. include:: ../../coreComponents/schema/docs/FrictionlessContact_other.rst + + +.. _DATASTRUCTURE_Functions: + +Datastructure: Functions +======================== +.. include:: ../../coreComponents/schema/docs/Functions_other.rst + + +.. _DATASTRUCTURE_Geometry: + +Datastructure: Geometry +======================= +.. include:: ../../coreComponents/schema/docs/Geometry_other.rst + + +.. _DATASTRUCTURE_HaltEvent: + +Datastructure: HaltEvent +======================== +.. include:: ../../coreComponents/schema/docs/HaltEvent_other.rst + + +.. _DATASTRUCTURE_HybridMimeticDiscretization: + +Datastructure: HybridMimeticDiscretization +========================================== +.. include:: ../../coreComponents/schema/docs/HybridMimeticDiscretization_other.rst + + +.. _DATASTRUCTURE_Hydrofracture: + +Datastructure: Hydrofracture +============================ +.. include:: ../../coreComponents/schema/docs/Hydrofracture_other.rst + + +.. _DATASTRUCTURE_HydrostaticEquilibrium: + +Datastructure: HydrostaticEquilibrium +===================================== +.. include:: ../../coreComponents/schema/docs/HydrostaticEquilibrium_other.rst + + +.. _DATASTRUCTURE_Included: + +Datastructure: Included +======================= +.. include:: ../../coreComponents/schema/docs/Included_other.rst + + +.. _DATASTRUCTURE_InternalMesh: + +Datastructure: InternalMesh +=========================== +.. include:: ../../coreComponents/schema/docs/InternalMesh_other.rst + + +.. _DATASTRUCTURE_InternalWell: + +Datastructure: InternalWell +=========================== +.. include:: ../../coreComponents/schema/docs/InternalWell_other.rst + + +.. _DATASTRUCTURE_InternalWellbore: + +Datastructure: InternalWellbore +=============================== +.. include:: ../../coreComponents/schema/docs/InternalWellbore_other.rst + + +.. _DATASTRUCTURE_JFunctionCapillaryPressure: + +Datastructure: JFunctionCapillaryPressure +========================================= +.. include:: ../../coreComponents/schema/docs/JFunctionCapillaryPressure_other.rst + + +.. _DATASTRUCTURE_LagrangianContact: + +Datastructure: LagrangianContact +================================ +.. include:: ../../coreComponents/schema/docs/LagrangianContact_other.rst + + +.. _DATASTRUCTURE_LaplaceFEM: + +Datastructure: LaplaceFEM +========================= +.. include:: ../../coreComponents/schema/docs/LaplaceFEM_other.rst + + +.. _DATASTRUCTURE_Level0: + +Datastructure: Level0 +===================== +.. include:: ../../coreComponents/schema/docs/Level0_other.rst + + +.. _DATASTRUCTURE_LinearIsotropicDispersion: + +Datastructure: LinearIsotropicDispersion +======================================== +.. include:: ../../coreComponents/schema/docs/LinearIsotropicDispersion_other.rst + + +.. _DATASTRUCTURE_LinearSolverParameters: + +Datastructure: LinearSolverParameters +===================================== +.. include:: ../../coreComponents/schema/docs/LinearSolverParameters_other.rst + + +.. _DATASTRUCTURE_Mesh: + +Datastructure: Mesh +=================== +.. include:: ../../coreComponents/schema/docs/Mesh_other.rst + + +.. _DATASTRUCTURE_MeshBodies: + +Datastructure: MeshBodies +========================= +.. include:: ../../coreComponents/schema/docs/MeshBodies_other.rst + + +.. _DATASTRUCTURE_ModifiedCamClay: + +Datastructure: ModifiedCamClay +============================== +.. include:: ../../coreComponents/schema/docs/ModifiedCamClay_other.rst + + +.. _DATASTRUCTURE_MultiPhaseConstantThermalConductivity: + +Datastructure: MultiPhaseConstantThermalConductivity +==================================================== +.. include:: ../../coreComponents/schema/docs/MultiPhaseConstantThermalConductivity_other.rst + + +.. _DATASTRUCTURE_MultiPhaseVolumeWeightedThermalConductivity: + +Datastructure: MultiPhaseVolumeWeightedThermalConductivity +========================================================== +.. include:: ../../coreComponents/schema/docs/MultiPhaseVolumeWeightedThermalConductivity_other.rst + + +.. _DATASTRUCTURE_MultiphasePoromechanics: + +Datastructure: MultiphasePoromechanics +====================================== +.. include:: ../../coreComponents/schema/docs/MultiphasePoromechanics_other.rst + + +.. _DATASTRUCTURE_MultiphasePoromechanicsInitialization: + +Datastructure: MultiphasePoromechanicsInitialization +==================================================== +.. include:: ../../coreComponents/schema/docs/MultiphasePoromechanicsInitialization_other.rst + + +.. _DATASTRUCTURE_MultiphasePoromechanicsReservoir: + +Datastructure: MultiphasePoromechanicsReservoir +=============================================== +.. include:: ../../coreComponents/schema/docs/MultiphasePoromechanicsReservoir_other.rst + + +.. _DATASTRUCTURE_MultivariableTableFunction: + +Datastructure: MultivariableTableFunction +========================================= +.. include:: ../../coreComponents/schema/docs/MultivariableTableFunction_other.rst + + +.. _DATASTRUCTURE_NonlinearSolverParameters: + +Datastructure: NonlinearSolverParameters +======================================== +.. include:: ../../coreComponents/schema/docs/NonlinearSolverParameters_other.rst + + +.. _DATASTRUCTURE_NullModel: + +Datastructure: NullModel +======================== +.. include:: ../../coreComponents/schema/docs/NullModel_other.rst + + +.. _DATASTRUCTURE_NumericalMethods: + +Datastructure: NumericalMethods +=============================== +.. include:: ../../coreComponents/schema/docs/NumericalMethods_other.rst + + +.. _DATASTRUCTURE_Outputs: + +Datastructure: Outputs +====================== +.. include:: ../../coreComponents/schema/docs/Outputs_other.rst + + +.. _DATASTRUCTURE_PML: + +Datastructure: PML +================== +.. include:: ../../coreComponents/schema/docs/PML_other.rst + + +.. _DATASTRUCTURE_PVTDriver: + +Datastructure: PVTDriver +======================== +.. include:: ../../coreComponents/schema/docs/PVTDriver_other.rst + + +.. _DATASTRUCTURE_PackCollection: + +Datastructure: PackCollection +============================= +.. include:: ../../coreComponents/schema/docs/PackCollection_other.rst + + +.. _DATASTRUCTURE_ParallelPlatesPermeability: + +Datastructure: ParallelPlatesPermeability +========================================= +.. include:: ../../coreComponents/schema/docs/ParallelPlatesPermeability_other.rst + + +.. _DATASTRUCTURE_Parameter: + +Datastructure: Parameter +======================== +.. include:: ../../coreComponents/schema/docs/Parameter_other.rst + + +.. _DATASTRUCTURE_Parameters: + +Datastructure: Parameters +========================= +.. include:: ../../coreComponents/schema/docs/Parameters_other.rst + + +.. _DATASTRUCTURE_ParticleFluid: + +Datastructure: ParticleFluid +============================ +.. include:: ../../coreComponents/schema/docs/ParticleFluid_other.rst + + +.. _DATASTRUCTURE_ParticleMesh: + +Datastructure: ParticleMesh +=========================== +.. include:: ../../coreComponents/schema/docs/ParticleMesh_other.rst + + +.. _DATASTRUCTURE_ParticleRegion: + +Datastructure: ParticleRegion +============================= +.. include:: ../../coreComponents/schema/docs/ParticleRegion_other.rst + + +.. _DATASTRUCTURE_ParticleRegions: + +Datastructure: ParticleRegions +============================== +.. include:: ../../coreComponents/schema/docs/ParticleRegions_other.rst + + +.. _DATASTRUCTURE_PerfectlyPlastic: + +Datastructure: PerfectlyPlastic +=============================== +.. include:: ../../coreComponents/schema/docs/PerfectlyPlastic_other.rst + + +.. _DATASTRUCTURE_Perforation: + +Datastructure: Perforation +========================== +.. include:: ../../coreComponents/schema/docs/Perforation_other.rst + + +.. _DATASTRUCTURE_PeriodicEvent: + +Datastructure: PeriodicEvent +============================ +.. include:: ../../coreComponents/schema/docs/PeriodicEvent_other.rst + + +.. _DATASTRUCTURE_PermeabilityBase: + +Datastructure: PermeabilityBase +=============================== +.. include:: ../../coreComponents/schema/docs/PermeabilityBase_other.rst + + +.. _DATASTRUCTURE_PhaseFieldDamageFEM: + +Datastructure: PhaseFieldDamageFEM +================================== +.. include:: ../../coreComponents/schema/docs/PhaseFieldDamageFEM_other.rst + + +.. _DATASTRUCTURE_PhaseFieldFracture: + +Datastructure: PhaseFieldFracture +================================= +.. include:: ../../coreComponents/schema/docs/PhaseFieldFracture_other.rst + + +.. _DATASTRUCTURE_PorousDamageElasticIsotropic: + +Datastructure: PorousDamageElasticIsotropic +=========================================== +.. include:: ../../coreComponents/schema/docs/PorousDamageElasticIsotropic_other.rst + + +.. _DATASTRUCTURE_PorousDamageSpectralElasticIsotropic: + +Datastructure: PorousDamageSpectralElasticIsotropic +=================================================== +.. include:: ../../coreComponents/schema/docs/PorousDamageSpectralElasticIsotropic_other.rst + + +.. _DATASTRUCTURE_PorousDamageVolDevElasticIsotropic: + +Datastructure: PorousDamageVolDevElasticIsotropic +================================================= +.. include:: ../../coreComponents/schema/docs/PorousDamageVolDevElasticIsotropic_other.rst + + +.. _DATASTRUCTURE_PorousDelftEgg: + +Datastructure: PorousDelftEgg +============================= +.. include:: ../../coreComponents/schema/docs/PorousDelftEgg_other.rst + + +.. _DATASTRUCTURE_PorousDruckerPrager: + +Datastructure: PorousDruckerPrager +================================== +.. include:: ../../coreComponents/schema/docs/PorousDruckerPrager_other.rst + + +.. _DATASTRUCTURE_PorousElasticIsotropic: + +Datastructure: PorousElasticIsotropic +===================================== +.. include:: ../../coreComponents/schema/docs/PorousElasticIsotropic_other.rst + + +.. _DATASTRUCTURE_PorousElasticOrthotropic: + +Datastructure: PorousElasticOrthotropic +======================================= +.. include:: ../../coreComponents/schema/docs/PorousElasticOrthotropic_other.rst + + +.. _DATASTRUCTURE_PorousElasticTransverseIsotropic: + +Datastructure: PorousElasticTransverseIsotropic +=============================================== +.. include:: ../../coreComponents/schema/docs/PorousElasticTransverseIsotropic_other.rst + + +.. _DATASTRUCTURE_PorousExtendedDruckerPrager: + +Datastructure: PorousExtendedDruckerPrager +========================================== +.. include:: ../../coreComponents/schema/docs/PorousExtendedDruckerPrager_other.rst + + +.. _DATASTRUCTURE_PorousModifiedCamClay: + +Datastructure: PorousModifiedCamClay +==================================== +.. include:: ../../coreComponents/schema/docs/PorousModifiedCamClay_other.rst + + +.. _DATASTRUCTURE_PorousViscoDruckerPrager: + +Datastructure: PorousViscoDruckerPrager +======================================= +.. include:: ../../coreComponents/schema/docs/PorousViscoDruckerPrager_other.rst + + +.. _DATASTRUCTURE_PorousViscoExtendedDruckerPrager: + +Datastructure: PorousViscoExtendedDruckerPrager +=============================================== +.. include:: ../../coreComponents/schema/docs/PorousViscoExtendedDruckerPrager_other.rst + + +.. _DATASTRUCTURE_PorousViscoModifiedCamClay: + +Datastructure: PorousViscoModifiedCamClay +========================================= +.. include:: ../../coreComponents/schema/docs/PorousViscoModifiedCamClay_other.rst + + +.. _DATASTRUCTURE_PressurePorosity: + +Datastructure: PressurePorosity +=============================== +.. include:: ../../coreComponents/schema/docs/PressurePorosity_other.rst + + +.. _DATASTRUCTURE_Problem: + +Datastructure: Problem +====================== +.. include:: ../../coreComponents/schema/docs/Problem_other.rst + + +.. _DATASTRUCTURE_ProppantPermeability: + +Datastructure: ProppantPermeability +=================================== +.. include:: ../../coreComponents/schema/docs/ProppantPermeability_other.rst + + +.. _DATASTRUCTURE_ProppantPorosity: + +Datastructure: ProppantPorosity +=============================== +.. include:: ../../coreComponents/schema/docs/ProppantPorosity_other.rst + + +.. _DATASTRUCTURE_ProppantSlurryFluid: + +Datastructure: ProppantSlurryFluid +================================== +.. include:: ../../coreComponents/schema/docs/ProppantSlurryFluid_other.rst + + +.. _DATASTRUCTURE_ProppantSolidProppantPermeability: + +Datastructure: ProppantSolidProppantPermeability +================================================ +.. include:: ../../coreComponents/schema/docs/ProppantSolidProppantPermeability_other.rst + + +.. _DATASTRUCTURE_ProppantTransport: + +Datastructure: ProppantTransport +================================ +.. include:: ../../coreComponents/schema/docs/ProppantTransport_other.rst + + +.. _DATASTRUCTURE_Python: + +Datastructure: Python +===================== +.. include:: ../../coreComponents/schema/docs/Python_other.rst + + +.. _DATASTRUCTURE_ReactiveBrine: + +Datastructure: ReactiveBrine +============================ +.. include:: ../../coreComponents/schema/docs/ReactiveBrine_other.rst + + +.. _DATASTRUCTURE_ReactiveBrineThermal: + +Datastructure: ReactiveBrineThermal +=================================== +.. include:: ../../coreComponents/schema/docs/ReactiveBrineThermal_other.rst + + +.. _DATASTRUCTURE_ReactiveCompositionalMultiphaseOBL: + +Datastructure: ReactiveCompositionalMultiphaseOBL +================================================= +.. include:: ../../coreComponents/schema/docs/ReactiveCompositionalMultiphaseOBL_other.rst + + +.. _DATASTRUCTURE_ReactiveFluidDriver: + +Datastructure: ReactiveFluidDriver +================================== +.. include:: ../../coreComponents/schema/docs/ReactiveFluidDriver_other.rst + + +.. _DATASTRUCTURE_Rectangle: + +Datastructure: Rectangle +======================== +.. include:: ../../coreComponents/schema/docs/Rectangle_other.rst + + +.. _DATASTRUCTURE_RelpermDriver: + +Datastructure: RelpermDriver +============================ +.. include:: ../../coreComponents/schema/docs/RelpermDriver_other.rst + + +.. _DATASTRUCTURE_Restart: + +Datastructure: Restart +====================== +.. include:: ../../coreComponents/schema/docs/Restart_other.rst + + +.. _DATASTRUCTURE_Run: + +Datastructure: Run +================== +.. include:: ../../coreComponents/schema/docs/Run_other.rst + + +.. _DATASTRUCTURE_Silo: + +Datastructure: Silo +=================== +.. include:: ../../coreComponents/schema/docs/Silo_other.rst + + +.. _DATASTRUCTURE_SinglePhaseConstantThermalConductivity: + +Datastructure: SinglePhaseConstantThermalConductivity +===================================================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseConstantThermalConductivity_other.rst + + +.. _DATASTRUCTURE_SinglePhaseFVM: + +Datastructure: SinglePhaseFVM +============================= +.. include:: ../../coreComponents/schema/docs/SinglePhaseFVM_other.rst + + +.. _DATASTRUCTURE_SinglePhaseHybridFVM: + +Datastructure: SinglePhaseHybridFVM +=================================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseHybridFVM_other.rst + + +.. _DATASTRUCTURE_SinglePhasePoromechanics: + +Datastructure: SinglePhasePoromechanics +======================================= +.. include:: ../../coreComponents/schema/docs/SinglePhasePoromechanics_other.rst + + +.. _DATASTRUCTURE_SinglePhasePoromechanicsConformingFractures: + +Datastructure: SinglePhasePoromechanicsConformingFractures +========================================================== +.. include:: ../../coreComponents/schema/docs/SinglePhasePoromechanicsConformingFractures_other.rst + + +.. _DATASTRUCTURE_SinglePhasePoromechanicsEmbeddedFractures: + +Datastructure: SinglePhasePoromechanicsEmbeddedFractures +======================================================== +.. include:: ../../coreComponents/schema/docs/SinglePhasePoromechanicsEmbeddedFractures_other.rst + + +.. _DATASTRUCTURE_SinglePhasePoromechanicsInitialization: + +Datastructure: SinglePhasePoromechanicsInitialization +===================================================== +.. include:: ../../coreComponents/schema/docs/SinglePhasePoromechanicsInitialization_other.rst + + +.. _DATASTRUCTURE_SinglePhasePoromechanicsReservoir: + +Datastructure: SinglePhasePoromechanicsReservoir +================================================ +.. include:: ../../coreComponents/schema/docs/SinglePhasePoromechanicsReservoir_other.rst + + +.. _DATASTRUCTURE_SinglePhaseProppantFVM: + +Datastructure: SinglePhaseProppantFVM +===================================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseProppantFVM_other.rst + + +.. _DATASTRUCTURE_SinglePhaseReservoir: + +Datastructure: SinglePhaseReservoir +=================================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseReservoir_other.rst + + +.. _DATASTRUCTURE_SinglePhaseReservoirPoromechanics: + +Datastructure: SinglePhaseReservoirPoromechanics +================================================ +.. include:: ../../coreComponents/schema/docs/SinglePhaseReservoirPoromechanics_other.rst + + +.. _DATASTRUCTURE_SinglePhaseReservoirPoromechanicsInitialization: + +Datastructure: SinglePhaseReservoirPoromechanicsInitialization +============================================================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseReservoirPoromechanicsInitialization_other.rst + + +.. _DATASTRUCTURE_SinglePhaseStatistics: + +Datastructure: SinglePhaseStatistics +==================================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseStatistics_other.rst + + +.. _DATASTRUCTURE_SinglePhaseWell: + +Datastructure: SinglePhaseWell +============================== +.. include:: ../../coreComponents/schema/docs/SinglePhaseWell_other.rst + + +.. _DATASTRUCTURE_SlipDependentPermeability: + +Datastructure: SlipDependentPermeability +======================================== +.. include:: ../../coreComponents/schema/docs/SlipDependentPermeability_other.rst + + +.. _DATASTRUCTURE_SolidInternalEnergy: + +Datastructure: SolidInternalEnergy +================================== +.. include:: ../../coreComponents/schema/docs/SolidInternalEnergy_other.rst + + +.. _DATASTRUCTURE_SolidMechanicsEmbeddedFractures: + +Datastructure: SolidMechanicsEmbeddedFractures +============================================== +.. include:: ../../coreComponents/schema/docs/SolidMechanicsEmbeddedFractures_other.rst + + +.. _DATASTRUCTURE_SolidMechanicsLagrangianSSLE: + +Datastructure: SolidMechanicsLagrangianSSLE +=========================================== +.. include:: ../../coreComponents/schema/docs/SolidMechanicsLagrangianSSLE_other.rst + + +.. _DATASTRUCTURE_SolidMechanicsStateReset: + +Datastructure: SolidMechanicsStateReset +======================================= +.. include:: ../../coreComponents/schema/docs/SolidMechanicsStateReset_other.rst + + +.. _DATASTRUCTURE_SolidMechanicsStatistics: + +Datastructure: SolidMechanicsStatistics +======================================= +.. include:: ../../coreComponents/schema/docs/SolidMechanicsStatistics_other.rst + + +.. _DATASTRUCTURE_SolidMechanics_LagrangianFEM: + +Datastructure: SolidMechanics_LagrangianFEM +=========================================== +.. include:: ../../coreComponents/schema/docs/SolidMechanics_LagrangianFEM_other.rst + + +.. _DATASTRUCTURE_SolidMechanics_MPM: + +Datastructure: SolidMechanics_MPM +================================= +.. include:: ../../coreComponents/schema/docs/SolidMechanics_MPM_other.rst + + +.. _DATASTRUCTURE_SoloEvent: + +Datastructure: SoloEvent +======================== +.. include:: ../../coreComponents/schema/docs/SoloEvent_other.rst + + +.. _DATASTRUCTURE_SolverStatistics: + +Datastructure: SolverStatistics +=============================== +.. include:: ../../coreComponents/schema/docs/SolverStatistics_other.rst + + +.. _DATASTRUCTURE_Solvers: + +Datastructure: Solvers +====================== +.. include:: ../../coreComponents/schema/docs/Solvers_other.rst + + +.. _DATASTRUCTURE_SourceFlux: + +Datastructure: SourceFlux +========================= +.. include:: ../../coreComponents/schema/docs/SourceFlux_other.rst + + +.. _DATASTRUCTURE_SurfaceElementRegion: + +Datastructure: SurfaceElementRegion +=================================== +.. include:: ../../coreComponents/schema/docs/SurfaceElementRegion_other.rst + + +.. _DATASTRUCTURE_SurfaceGenerator: + +Datastructure: SurfaceGenerator +=============================== +.. include:: ../../coreComponents/schema/docs/SurfaceGenerator_other.rst + + +.. _DATASTRUCTURE_SymbolicFunction: + +Datastructure: SymbolicFunction +=============================== +.. include:: ../../coreComponents/schema/docs/SymbolicFunction_other.rst + + +.. _DATASTRUCTURE_TableCapillaryPressure: + +Datastructure: TableCapillaryPressure +===================================== +.. include:: ../../coreComponents/schema/docs/TableCapillaryPressure_other.rst + + +.. _DATASTRUCTURE_TableFunction: + +Datastructure: TableFunction +============================ +.. include:: ../../coreComponents/schema/docs/TableFunction_other.rst + + +.. _DATASTRUCTURE_TableRelativePermeability: + +Datastructure: TableRelativePermeability +======================================== +.. include:: ../../coreComponents/schema/docs/TableRelativePermeability_other.rst + + +.. _DATASTRUCTURE_TableRelativePermeabilityHysteresis: + +Datastructure: TableRelativePermeabilityHysteresis +================================================== +.. include:: ../../coreComponents/schema/docs/TableRelativePermeabilityHysteresis_other.rst + + +.. _DATASTRUCTURE_Tasks: + +Datastructure: Tasks +==================== +.. include:: ../../coreComponents/schema/docs/Tasks_other.rst + + +.. _DATASTRUCTURE_ThermalCompressibleSinglePhaseFluid: + +Datastructure: ThermalCompressibleSinglePhaseFluid +================================================== +.. include:: ../../coreComponents/schema/docs/ThermalCompressibleSinglePhaseFluid_other.rst + + +.. _DATASTRUCTURE_ThickPlane: + +Datastructure: ThickPlane +========================= +.. include:: ../../coreComponents/schema/docs/ThickPlane_other.rst + + +.. _DATASTRUCTURE_TimeHistory: + +Datastructure: TimeHistory +========================== +.. include:: ../../coreComponents/schema/docs/TimeHistory_other.rst + + +.. _DATASTRUCTURE_Traction: + +Datastructure: Traction +======================= +.. include:: ../../coreComponents/schema/docs/Traction_other.rst + + +.. _DATASTRUCTURE_TriaxialDriver: + +Datastructure: TriaxialDriver +============================= +.. include:: ../../coreComponents/schema/docs/TriaxialDriver_other.rst + + +.. _DATASTRUCTURE_TwoPointFluxApproximation: + +Datastructure: TwoPointFluxApproximation +======================================== +.. include:: ../../coreComponents/schema/docs/TwoPointFluxApproximation_other.rst + + +.. _DATASTRUCTURE_VTK: + +Datastructure: VTK +================== +.. include:: ../../coreComponents/schema/docs/VTK_other.rst + + +.. _DATASTRUCTURE_VTKMesh: + +Datastructure: VTKMesh +====================== +.. include:: ../../coreComponents/schema/docs/VTKMesh_other.rst + + +.. _DATASTRUCTURE_VTKWell: + +Datastructure: VTKWell +====================== +.. include:: ../../coreComponents/schema/docs/VTKWell_other.rst + + +.. _DATASTRUCTURE_VanGenuchtenBakerRelativePermeability: + +Datastructure: VanGenuchtenBakerRelativePermeability +==================================================== +.. include:: ../../coreComponents/schema/docs/VanGenuchtenBakerRelativePermeability_other.rst + + +.. _DATASTRUCTURE_VanGenuchtenCapillaryPressure: + +Datastructure: VanGenuchtenCapillaryPressure +============================================ +.. include:: ../../coreComponents/schema/docs/VanGenuchtenCapillaryPressure_other.rst + + +.. _DATASTRUCTURE_VanGenuchtenStone2RelativePermeability: + +Datastructure: VanGenuchtenStone2RelativePermeability +===================================================== +.. include:: ../../coreComponents/schema/docs/VanGenuchtenStone2RelativePermeability_other.rst + + +.. _DATASTRUCTURE_ViscoDruckerPrager: + +Datastructure: ViscoDruckerPrager +================================= +.. include:: ../../coreComponents/schema/docs/ViscoDruckerPrager_other.rst + + +.. _DATASTRUCTURE_ViscoExtendedDruckerPrager: + +Datastructure: ViscoExtendedDruckerPrager +========================================= +.. include:: ../../coreComponents/schema/docs/ViscoExtendedDruckerPrager_other.rst + + +.. _DATASTRUCTURE_ViscoModifiedCamClay: + +Datastructure: ViscoModifiedCamClay +=================================== +.. include:: ../../coreComponents/schema/docs/ViscoModifiedCamClay_other.rst + + +.. _DATASTRUCTURE_WellControls: + +Datastructure: WellControls +=========================== +.. include:: ../../coreComponents/schema/docs/WellControls_other.rst + + +.. _DATASTRUCTURE_WellElementRegion: + +Datastructure: WellElementRegion +================================ +.. include:: ../../coreComponents/schema/docs/WellElementRegion_other.rst + + +.. _DATASTRUCTURE_WellElementRegionUniqueSubRegion: + +Datastructure: WellElementRegionUniqueSubRegion +=============================================== +.. include:: ../../coreComponents/schema/docs/WellElementRegionUniqueSubRegion_other.rst + + +.. _DATASTRUCTURE_WillisRichardsPermeability: + +Datastructure: WillisRichardsPermeability +========================================= +.. include:: ../../coreComponents/schema/docs/WillisRichardsPermeability_other.rst + + +.. _DATASTRUCTURE_commandLine: + +Datastructure: commandLine +========================== +.. include:: ../../coreComponents/schema/docs/commandLine_other.rst + + +.. _DATASTRUCTURE_crusher: + +Datastructure: crusher +====================== +.. include:: ../../coreComponents/schema/docs/crusher_other.rst + + +.. _DATASTRUCTURE_domain: + +Datastructure: domain +===================== +.. include:: ../../coreComponents/schema/docs/domain_other.rst + + +.. _DATASTRUCTURE_edgeManager: + +Datastructure: edgeManager +========================== +.. include:: ../../coreComponents/schema/docs/edgeManager_other.rst + + +.. _DATASTRUCTURE_elementRegionsGroup: + +Datastructure: elementRegionsGroup +================================== +.. include:: ../../coreComponents/schema/docs/elementRegionsGroup_other.rst + + +.. _DATASTRUCTURE_elementSubRegions: + +Datastructure: elementSubRegions +================================ +.. include:: ../../coreComponents/schema/docs/elementSubRegions_other.rst + + +.. _DATASTRUCTURE_embeddedSurfacesEdgeManager: + +Datastructure: embeddedSurfacesEdgeManager +========================================== +.. include:: ../../coreComponents/schema/docs/embeddedSurfacesEdgeManager_other.rst + + +.. _DATASTRUCTURE_embeddedSurfacesNodeManager: + +Datastructure: embeddedSurfacesNodeManager +========================================== +.. include:: ../../coreComponents/schema/docs/embeddedSurfacesNodeManager_other.rst + + +.. _DATASTRUCTURE_faceManager: + +Datastructure: faceManager +========================== +.. include:: ../../coreComponents/schema/docs/faceManager_other.rst + + +.. _DATASTRUCTURE_lassen: + +Datastructure: lassen +===================== +.. include:: ../../coreComponents/schema/docs/lassen_other.rst + + +.. _DATASTRUCTURE_meshLevels: + +Datastructure: meshLevels +========================= +.. include:: ../../coreComponents/schema/docs/meshLevels_other.rst + + +.. _DATASTRUCTURE_neighborData: + +Datastructure: neighborData +=========================== +.. include:: ../../coreComponents/schema/docs/neighborData_other.rst + + +.. _DATASTRUCTURE_nodeManager: + +Datastructure: nodeManager +========================== +.. include:: ../../coreComponents/schema/docs/nodeManager_other.rst + + +.. _DATASTRUCTURE_particleRegionsGroup: + +Datastructure: particleRegionsGroup +=================================== +.. include:: ../../coreComponents/schema/docs/particleRegionsGroup_other.rst + + +.. _DATASTRUCTURE_particleSubRegions: + +Datastructure: particleSubRegions +================================= +.. include:: ../../coreComponents/schema/docs/particleSubRegions_other.rst + + +.. _DATASTRUCTURE_quartz: + +Datastructure: quartz +===================== +.. include:: ../../coreComponents/schema/docs/quartz_other.rst + + +.. _DATASTRUCTURE_sets: + +Datastructure: sets +=================== +.. include:: ../../coreComponents/schema/docs/sets_other.rst + + +.. _DATASTRUCTURE_wellElementSubRegion: + +Datastructure: wellElementSubRegion +=================================== +.. include:: ../../coreComponents/schema/docs/wellElementSubRegion_other.rst + diff --git a/src/docs/sphinx/buildGuide/Dependencies.rst b/src/docs/sphinx/buildGuide/Dependencies.rst index 03824bb29a4..a921c5835cb 100644 --- a/src/docs/sphinx/buildGuide/Dependencies.rst +++ b/src/docs/sphinx/buildGuide/Dependencies.rst @@ -23,6 +23,7 @@ Name Version Enable option Path variable ============= ========== =========================== ============================= ===================================== Adiak_ 0.2.0 :code:`ENABLE_CALIPER` :code:`ADIAK_DIR` Library for collecting metadata from HPC application runs, and distributing that metadata to subscriber tools. Caliper_ 2.4.0 :code:`ENABLE_CALIPER` :code:`CALIPER_DIR` Instrumentation and performance profiling library. +catalyst_ 2.0..0-rc3 :code:`ENABLE_CATALYST` :code:`CATALYST_DIR` Open source API specification developed for simulations to analyze and visualize data in situ. conduit_ 0.5.0 *mandatory* :code:`CONDUIT_DIR` Simplified Data Exchange for HPC Simulations. CHAI_ 2.2.2 *mandatory* :code:`CHAI_DIR` Copy-hiding array abstraction to automatically migrate data between memory spaces. RAJA_ 0.12.1 *mandatory* :code:`RAJA_DIR` Collection of C++ software abstractions that enable architecture portability for HPC applications. @@ -54,6 +55,7 @@ uncrustify_ 401a409 :code:`ENABLE_UNCRUSTIFY` :code:`UNCRUSTIFY_EXECUTABL .. _Adiak : https://github.com/LLNL/Adiak .. _Caliper: https://github.com/LLNL/Caliper +.. _catalyst: https://gitlab.kitware.com/paraview/catalyst .. _conduit: https://github.com/LLNL/conduit .. _CHAI : https://github.com/LLNL/CHAI .. _RAJA : https://github.com/LLNL/RAJA diff --git a/src/pygeosx/pygeosx.cpp b/src/pygeosx/pygeosx.cpp index 75879623f5c..6bba42d5f48 100644 --- a/src/pygeosx/pygeosx.cpp +++ b/src/pygeosx/pygeosx.cpp @@ -25,6 +25,7 @@ #include "fileIO/python/PyHistoryCollectionType.hpp" #include "fileIO/python/PyHistoryOutputType.hpp" #include "fileIO/python/PyVTKOutputType.hpp" +#include "fileIO/python/PyCatalystOutputType.hpp" #include "mainInterface/initialization.hpp" #include "LvArray/src/python/PyArray.hpp" @@ -430,6 +431,11 @@ PyInit_pygeosx() return nullptr; } + if( !LvArray::python::addTypeToModule( module, geos::python::getPyCatalystOutputType(), "CatalystOutput" ) ) + { + return nullptr; + } + // Add the LvArray submodule. if( !LvArray::python::addPyLvArrayModule( module ) ) {