From 787c2ed0ad487c6f6686ce2e27a3dd38f4a644b3 Mon Sep 17 00:00:00 2001 From: Lionel Untereiner Date: Tue, 25 Jul 2023 15:28:29 +0200 Subject: [PATCH] add files --- CMakeLists.txt | 2 + src/CMakeLists.txt | 69 ++++ src/RESQMLMeshGenerator.cpp | 430 +++++++++++++++++++ src/RESQMLMeshGenerator.hpp | 214 ++++++++++ src/RESQMLOutput.cpp | 149 +++++++ src/RESQMLOutput.hpp | 117 ++++++ src/RESQMLUtilities.cpp | 742 +++++++++++++++++++++++++++++++++ src/RESQMLUtilities.hpp | 79 ++++ src/RESQMLWriterInterface.cpp | 753 ++++++++++++++++++++++++++++++++++ src/RESQMLWriterInterface.hpp | 160 ++++++++ src/fesapi.patch | 11 + tests/CMakeLists.txt | 30 ++ tests/testRESQMLImport.cpp | 129 ++++++ tests/testingPackageCpp.epc | Bin 0 -> 282972 bytes tests/testingPackageCpp.h5 | Bin 0 -> 142191 bytes 15 files changed, 2885 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 src/CMakeLists.txt create mode 100644 src/RESQMLMeshGenerator.cpp create mode 100644 src/RESQMLMeshGenerator.hpp create mode 100644 src/RESQMLOutput.cpp create mode 100644 src/RESQMLOutput.hpp create mode 100644 src/RESQMLUtilities.cpp create mode 100644 src/RESQMLUtilities.hpp create mode 100644 src/RESQMLWriterInterface.cpp create mode 100644 src/RESQMLWriterInterface.hpp create mode 100644 src/fesapi.patch create mode 100644 tests/CMakeLists.txt create mode 100644 tests/testRESQMLImport.cpp create mode 100644 tests/testingPackageCpp.epc create mode 100644 tests/testingPackageCpp.h5 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..cdc17a4 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(src) +# add_subdirectory(tests) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..0f8756e --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,69 @@ + +################################ +# Fesapi +################################ +if(DEFINED FESAPI_DIR) + message(STATUS "FESAPI_DIR = ${FESAPI_DIR}") + + find_and_register(NAME FesapiCpp + INCLUDE_DIRECTORIES ${FESAPI_DIR}/include + LIBRARY_DIRECTORIES ${FESAPI_DIR}/lib + HEADER fesapi/nsDefinitions.h + LIBRARIES FesapiCpp + DEPENDS hdf5) + + set(FESAPI_DIR ON CACHE BOOL "") +else() + message(STATUS "Not using Fesapi") +endif() + +message(STATUS "Adding RESQML (Readers / MeshGenerator) sources and headers") + +# +# Specify all headers +# +set(componentHeaders + RESQMLOutput.hpp + RESQMLWriterInterface.hpp + RESQMLMeshGenerator.hpp + RESQMLUtilities.hpp +) + +# +# Specify all sources +# +set(componentSources + RESQMLUtilities.cpp + RESQMLWriterInterface.cpp + RESQMLMeshGenerator.cpp + RESQMLOutput.cpp +) + +# +# Specify dependencies +# +# set(dependencyList mesh) +set(dependencyList FesapiCpp) + +if(GEOSX_BUILD_SHARED_LIBS) + set(dependencyList ${dependencyList} geosx_core) +else() + set(dependencyList ${dependencyList} ${geosx_core_libs}) +endif() + +message("adding RESQML library") + +blt_add_library(NAME resqml + SOURCES ${componentSources} + HEADERS ${componentHeaders} + DEPENDS_ON ${dependencyList} + OBJECT ${GEOSX_BUILD_OBJ_LIBS} +) + +target_compile_definitions(resqml PUBLIC "HAS_UNCAUGHT_EXCEPTIONS") + +# target_link_libraries(resqml PUBLIC FesapiCpp) +# target_include_directories(resqml PUBLIC ${FESAPI_DIR}/include) +target_include_directories(resqml PUBLIC ${CMAKE_CURRENT_LIST_DIR}) + +geosx_add_code_checks(PREFIX resqml) diff --git a/src/RESQMLMeshGenerator.cpp b/src/RESQMLMeshGenerator.cpp new file mode 100644 index 0000000..4800f4b --- /dev/null +++ b/src/RESQMLMeshGenerator.cpp @@ -0,0 +1,430 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 Total, S.A + * Copyright (c) 2019- GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file RESQMLMeshGenerator.cpp + */ + +#include "RESQMLMeshGenerator.hpp" + + +#include "common/DataTypes.hpp" +#include "common/DataLayouts.hpp" +#include "common/MpiWrapper.hpp" +#include "common/TypeDispatch.hpp" +#include "mesh/MeshBody.hpp" +#include "mesh/generators/CellBlockManager.hpp" +#include "mesh/generators/VTKMeshGeneratorTools.hpp" +#include "RESQMLUtilities.hpp" +#include "mesh/mpiCommunications/CommunicationTools.hpp" + +#include +#include +#include + +#include + +#include +#include +#include + +#include + +namespace geos +{ + +using namespace dataRepository; + +RESQMLMeshGenerator::RESQMLMeshGenerator( string const & name, + Group * const parent ) + : ExternalMeshGeneratorBase( name, parent ), + m_repository( new common::DataObjectRepository()) +{ + registerWrapper( viewKeyStruct::uuidString(), &m_parent_uuid ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "UUID of the mesh" ); + + registerWrapper( viewKeyStruct::titleInFileString(), &m_parent_title ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "Title of the mesh in the EPC file" ); + + registerWrapper( viewKeyStruct::uuidsRegionsToImportString(), &m_uuidsRegionsToImport ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "UUIDs of the RESQML subrepresentations to use as region marker" ); + + registerWrapper( viewKeyStruct::regionAttributeString(), &m_attributeName ). + setInputFlag( InputFlags::OPTIONAL ). + setApplyDefaultValue( "attribute" ). + setDescription( "Name of the VTK cell attribute to use as region marker" ); + + registerWrapper( viewKeyStruct::uuidsFieldsToImportString(), &m_uuidsFieldsToImport ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "UUIDs of the RESQML properties to load as fields" ); + + registerWrapper( viewKeyStruct::fieldsToImportString(), &m_fieldsToImport ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "Names of the RESQML properties to load as fields" ); + + registerWrapper( viewKeyStruct::uuidsSurfacesToImportString(), &m_uuidsSurfacesToImport ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "UUIDs of the RESQML subrepresentations to use as surfaces" ); + + registerWrapper( viewKeyStruct::partitionRefinementString(), &m_partitionRefinement ). + setInputFlag( InputFlags::OPTIONAL ). + setApplyDefaultValue( 1 ). + setDescription( "Number of partitioning refinement iterations (defaults to 1, recommended value)." + "A value of 0 disables graph partitioning and keeps simple kd-tree partitions (not recommended). " + "Values higher than 1 may lead to slightly improved partitioning, but yield diminishing returns." ); + + registerWrapper( viewKeyStruct::partitionMethodString(), &m_partitionMethod ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "Method (library) used to partition the mesh" ); + + registerWrapper( viewKeyStruct::useGlobalIdsString(), &m_useGlobalIds ). + setInputFlag( InputFlags::OPTIONAL ). + setApplyDefaultValue( 0 ). + setDescription( "Controls the use of global IDs in the input file for cells and points." + " If set to 0 (default value), the GlobalId arrays in the input mesh are used if available, and generated otherwise." + " If set to a negative value, the GlobalId arrays in the input mesh are not used, and generated global Ids are automatically generated." + " If set to a positive value, the GlobalId arrays in the input mesh are used and required, and the simulation aborts if they are not available" ); + +} + +void RESQMLMeshGenerator::postProcessInput() +{ + GEOS_LOG_RANK_0( GEOS_FMT( "Reading: {}", m_filePath ) ); + COMMON_NS::EpcDocument pck( m_filePath ); + std::string message = pck.deserializeInto( *m_repository ); + pck.close(); + + GEOS_LOG_RANK_0( GEOS_FMT( "Deserilization messages:\n {}", message ) ); +} + +void RESQMLMeshGenerator::fillCellBlockManager( CellBlockManager & cellBlockManager, array1d< int > const & ) +{ + GEOS_MARK_FUNCTION; + + MPI_Comm const comm = MPI_COMM_GEOSX; + vtkSmartPointer< vtkMultiProcessController > controller = vtk::getController(); + vtkMultiProcessController::SetGlobalController( controller ); + + GEOS_LOG_RANK_0( GEOS_FMT( "{} '{}': reading mesh from {}", catalogName(), getName(), m_filePath ) ); + { + GEOS_LOG_LEVEL_RANK_0( 2, " reading the dataset..." ); + vtkSmartPointer< vtkDataSet > loadedMesh = loadMesh( ); + GEOS_LOG_LEVEL_RANK_0( 2, " redistributing mesh..." ); + m_vtkMesh = vtk::redistributeMesh( loadedMesh, comm, m_partitionMethod, m_partitionRefinement, m_useGlobalIds ); + GEOS_LOG_LEVEL_RANK_0( 2, " finding neighbor ranks..." ); + std::vector< vtkBoundingBox > boxes = vtk::exchangeBoundingBoxes( *m_vtkMesh, comm ); + std::vector< int > const neighbors = vtk::findNeighborRanks( std::move( boxes ) ); + m_spatialPartition.setMetisNeighborList( std::move( neighbors )); + GEOS_LOG_LEVEL_RANK_0( 2, " done!" ); + } + + GEOS_LOG_RANK_0( GEOS_FMT( "{} '{}': generating GEOS mesh data structure", catalogName(), getName() ) ); + + + GEOS_LOG_LEVEL_RANK_0( 2, " preprocessing..." ); + m_cellMap = vtk::buildCellMap( *m_vtkMesh, m_attributeName ); + + GEOS_LOG_LEVEL_RANK_0( 2, " writing nodes..." ); + cellBlockManager.setGlobalLength( writeNodes( getLogLevel(), *m_vtkMesh, m_nodesetNames, cellBlockManager, this->m_translate, this->m_scale ) ); + + GEOS_LOG_LEVEL_RANK_0( 2, " writing cells..." ); + writeCells( getLogLevel(), *m_vtkMesh, m_cellMap, cellBlockManager ); + + GEOS_LOG_LEVEL_RANK_0( 2, " writing surfaces..." ); + writeSurfaces( getLogLevel(), *m_vtkMesh, m_cellMap, cellBlockManager ); + + GEOS_LOG_LEVEL_RANK_0( 2, " building connectivity maps..." ); + cellBlockManager.buildMaps(); + + GEOS_LOG_LEVEL_RANK_0( 2, " done!" ); + vtk::printMeshStatistics( *m_vtkMesh, m_cellMap, comm ); +} + +void RESQMLMeshGenerator::importFieldOnArray( Block block, + string const & blockName, + string const & meshFieldName, + bool isMaterialField, + dataRepository::WrapperBase & wrapper ) const +{ + GEOS_ASSERT_MSG( m_vtkMesh, "Must call generateMesh() before importFields()" ); + + switch( block ) + { + case MeshGeneratorBase::Block::VOLUMIC: + return importVolumicFieldOnArray( blockName, meshFieldName, isMaterialField, wrapper ); + case MeshGeneratorBase::Block::SURFACIC: + case MeshGeneratorBase::Block::LINEIC: + return; + // return importSurfacicFieldOnArray( blockName, meshFieldName, wrapper ); + } +} + +void RESQMLMeshGenerator::freeResources() +{ + m_vtkMesh = nullptr; + m_cellMap.clear(); + m_repository = nullptr; +} + + +vtkSmartPointer< vtkDataSet > +RESQMLMeshGenerator::loadSurfaces( vtkSmartPointer< vtkDataSet > mesh ) +{ + // + std::vector< resqml2::SubRepresentation * > surfaces; + + if( !m_uuidsSurfacesToImport.empty()) + { + for( auto const & uuid : m_uuidsSurfacesToImport ) + { + GEOS_LOG_RANK_0( GEOS_FMT( "{} '{}': reading surface {}", catalogName(), getName(), uuid ) ); + + auto * subrep = m_repository->getDataObjectByUuid< resqml2::SubRepresentation >( uuid ); + if( subrep == nullptr ) + GEOS_ERROR( GEOS_FMT( "There exists no such data object with uuid {}", uuid ) ); + + if( subrep->getElementKindOfPatch( 0, 0 ) != gsoap_eml2_3::eml23__IndexableElement::faces ) + GEOS_ERROR( GEOS_FMT( "The subrep with UUID {} is not a surface", uuid ) ); + + surfaces.push_back( subrep ); + } + } + else + { + auto subrepSet = m_repository->getSubRepresentationSet(); + for( auto *subrep : subrepSet ) + { + if( subrep->getElementKindOfPatch( 0, 0 ) == gsoap_eml2_3::eml23__IndexableElement::faces ) + { + GEOS_LOG_RANK_0( GEOS_FMT( "{} '{}': reading surface {}", catalogName(), getName(), subrep->getUuid() ) ); + surfaces.push_back( subrep ); + } + } + } + + auto * meshWithSurfaces = createSurfaces( mesh, surfaces, m_attributeName ); + + return vtkDataSet::SafeDownCast( meshWithSurfaces ); +} + +vtkSmartPointer< vtkDataSet > +RESQMLMeshGenerator::loadRegions( vtkSmartPointer< vtkDataSet > mesh ) +{ + std::vector< resqml2::SubRepresentation * > regions; + + + if( !m_uuidsRegionsToImport.empty()) + { + for( auto const & region_uuid : m_uuidsRegionsToImport ) + { + GEOS_LOG_RANK_0( GEOS_FMT( "{} '{}': reading region {}", catalogName(), getName(), region_uuid ) ); + + auto * subrep = m_repository->getDataObjectByUuid< resqml2::SubRepresentation >( region_uuid ); + if( subrep == nullptr ) + GEOS_ERROR( GEOS_FMT( "There exists no such data object with uuid {}", region_uuid ) ); + + regions.push_back( subrep ); + } + } + else + { + auto subrepSet = m_repository->getSubRepresentationSet(); + for( auto *subrep : subrepSet ) + { + if( subrep->getElementKindOfPatch( 0, 0 ) == gsoap_eml2_3::eml23__IndexableElement::cells ) + { + GEOS_LOG_RANK_0( GEOS_FMT( "{} '{}': reading region {}", catalogName(), getName(), subrep->getUuid() ) ); + regions.push_back( subrep ); + } + } + } + + mesh = createRegions( mesh, regions, m_attributeName ); + + return mesh; +} + + +vtkSmartPointer< vtkDataSet > +RESQMLMeshGenerator::loadProperties( vtkSmartPointer< vtkDataSet > mesh ) +{ + std::vector< RESQML2_NS::AbstractValuesProperty * > fields_list; + + if( !m_uuidsFieldsToImport.empty()) + { + for( auto const & field_uuid : m_uuidsFieldsToImport ) + { + auto * prop = m_repository->getDataObjectByUuid< RESQML2_NS::AbstractValuesProperty >( field_uuid ); + if( prop == nullptr ) + GEOS_ERROR( GEOS_FMT( "There exists no such data object with uuid {} and title {}", field_uuid ) ); + + GEOS_LOG_RANK_0( GEOS_FMT( "{} '{}': reading property {} - {}", catalogName(), getName(), field_uuid, prop->getTitle() ) ); + + fields_list.push_back( prop ); + } + } + else if( !this->m_fieldsToImport.empty()) + { + auto searchPropery = [&]( string const & field_name ) -> RESQML2_NS::AbstractValuesProperty * + { + for( auto * value_prop : m_repository->getDataObjects< RESQML2_NS::AbstractValuesProperty >()) + { + if( value_prop->getTitle() == field_name ) + { + return value_prop; + } + } + + return nullptr; + }; + + for( auto const & field_name : m_fieldsToImport ) + { + auto * prop = searchPropery( field_name ); + if( prop == nullptr ) + GEOS_ERROR( GEOS_FMT( "There exists no such data object with uuid {} and title {}", field_name ) ); + + GEOS_LOG_RANK_0( GEOS_FMT( "{} '{}': reading property {} - {}", catalogName(), getName(), field_name, prop->getUuid() ) ); + + fields_list.push_back( prop ); + } + } + + // load the properties as fields + for( unsigned int i = 0; i < fields_list.size(); ++i ) + { + mesh = loadProperty( mesh, fields_list[i], this->m_volumicFieldsToImport[i] ); + } + + return mesh; +} + + +vtkSmartPointer< vtkDataSet > +RESQMLMeshGenerator::retrieveUnstructuredGrid() +{ + RESQML2_NS::UnstructuredGridRepresentation * rep{nullptr}; + + if( !m_parent_uuid.empty()) + { + rep = m_repository->getDataObjectByUuid< RESQML2_NS::UnstructuredGridRepresentation >( m_parent_uuid ); + + } + else if( !m_parent_title.empty()) + { + auto grid_set = m_repository->getUnstructuredGridRepresentationSet(); + auto result = std::find_if( std::begin( grid_set ), std::end( grid_set ), [&m_parent_title = m_parent_title]( RESQML2_NS::UnstructuredGridRepresentation *grid ) { + return grid->getTitle() == m_parent_title; + } ); + if( result != std::end( grid_set )) + { + rep = *result; + } + } + else + { + rep = m_repository->getUnstructuredGridRepresentationSet().front(); + } + + if( rep == nullptr ) + GEOS_ERROR( GEOS_FMT( "There exists no such data object with uuid {} or title {} in the epc file", m_parent_uuid, m_parent_title ) ); + + + m_parent_title = rep->getTitle(); + m_parent_uuid = rep->getUuid(); + vtkSmartPointer< vtkUnstructuredGrid > loadedMesh = loadUnstructuredGridRepresentation( rep ); + + GEOS_LOG_RANK_0( GEOS_FMT( "GetNumberOfCells {}", loadedMesh->GetNumberOfCells()) ); + GEOS_LOG_RANK_0( GEOS_FMT( "GetNumberOfPoints {}", loadedMesh->GetNumberOfPoints()) ); + + return vtkDataSet::SafeDownCast( loadedMesh ); +} + +vtkSmartPointer< vtkDataSet > +RESQMLMeshGenerator::loadMesh() +{ + if( MpiWrapper::commRank() == 0 ) + { + GEOS_LOG_LEVEL_RANK_0( 2, " reading the RESQML dataset..." ); + vtkSmartPointer< vtkDataSet > loadedMesh = retrieveUnstructuredGrid( ); + + GEOS_LOG_LEVEL_RANK_0( 2, " (regions) load the RESQML subrepresentations into vtk attributes..." ); + loadedMesh = loadRegions( loadedMesh ); + + GEOS_LOG_LEVEL_RANK_0( 2, " (fields) load the RESQML Properties into vtk attributes..." ); + loadedMesh = loadProperties( loadedMesh ); + + GEOS_LOG_LEVEL_RANK_0( 2, " (surfaces) load the RESQML subrepresentations into the vtk grid..." ); + loadedMesh = loadSurfaces( loadedMesh ); + + GEOS_LOG_LEVEL_RANK_0( 2, " ... end" ); + + GEOS_LOG_LEVEL_RANK_0( 2, " temporary write" ); + vtkNew< vtkUnstructuredGridWriter > writer; + writer->SetFileName( "tmp_output.vtu" ); + writer->SetInputData( loadedMesh ); + writer->Write(); + + return loadedMesh; + } + else + { + return vtkSmartPointer< vtkUnstructuredGrid >::New(); + } +} + +std::tuple< string, string > RESQMLMeshGenerator::getParentRepresentation() const +{ + return {m_parent_uuid, m_parent_title}; +} + +void RESQMLMeshGenerator::importVolumicFieldOnArray( string const & cellBlockName, + string const & meshFieldName, + bool isMaterialField, + dataRepository::WrapperBase & wrapper ) const +{ + for( auto const & typeRegions : m_cellMap ) + { + // Restrict data import to 3D cells + if( getElementDim( typeRegions.first ) == 3 ) + { + for( auto const & regionCells: typeRegions.second ) + { + string const currentCellBlockName = vtk::buildCellBlockName( typeRegions.first, regionCells.first ); + // We don't know how the user mapped cell blocks to regions, so we must check all of them + if( cellBlockName != currentCellBlockName ) + continue; + + vtkDataArray * vtkArray = vtk::findArrayForImport( *m_vtkMesh, meshFieldName ); + if( isMaterialField ) + { + return vtk::importMaterialField( regionCells.second, vtkArray, wrapper ); + } + else + { + return vtk::importRegularField( regionCells.second, vtkArray, wrapper ); + } + } + } + } + + GEOS_ERROR( "Could not import field \"" << meshFieldName << "\" from cell block \"" << cellBlockName << "\"." ); +} + +REGISTER_CATALOG_ENTRY( MeshGeneratorBase, RESQMLMeshGenerator, string const &, Group * const ) + +} // namespace geos \ No newline at end of file diff --git a/src/RESQMLMeshGenerator.hpp b/src/RESQMLMeshGenerator.hpp new file mode 100644 index 0000000..ac0d709 --- /dev/null +++ b/src/RESQMLMeshGenerator.hpp @@ -0,0 +1,214 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 Total, S.A + * Copyright (c) 2019- GEOS Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file RESQMLMeshGenerator.hpp + */ + +#ifndef GEOS_EXTERNALCOMPONENTS_RESQML_RESQMLMESHGENERATOR_HPP +#define GEOS_EXTERNALCOMPONENTS_RESQML_RESQMLMESHGENERATOR_HPP + +// #include "codingUtilities/StringUtilities.hpp" +// #include "codingUtilities/Utilities.hpp" +// #include "mesh/ElementType.hpp" +#include "mesh/generators/ExternalMeshGeneratorBase.hpp" +#include "mesh/generators/VTKUtilities.hpp" +// #include "mesh/FieldIdentifiers.hpp" +#include + +#include "fesapi/common/EpcDocument.h" + +namespace geos +{ + +/** + * @class RESQMLMeshGenerator + * @brief The RESQMLMeshGenerator class provides a class implementation of RESQML generated meshes from the Fesapi library. + */ +class RESQMLMeshGenerator : public ExternalMeshGeneratorBase +{ +public: + + /** + * @brief Main constructor for MeshGenerator base class. + * @param[in] name of the RESQMLMeshGenerator object + * @param[in] parent the parent Group pointer for the MeshGenerator object + */ + RESQMLMeshGenerator( const string & name, + Group * const parent ); + + /** + * @brief Return the name of the RESQMLMeshGenerator in object Catalog. + * @return string that contains the key name to RESQMLMeshGenerator in the Catalog + */ + static string catalogName() { return "RESQMLMesh"; } + + /** + * @brief Generate the mesh using fesapi library + * + * @param[inout] cellBlockManager the CellBlockManager that will receive the meshing information + * @param[in] partition the number of domain in each direction (x,y,z) for InternalMesh only, not used here + * @details blabla + */ + void fillCellBlockManager( CellBlockManager & cellBlockManager, array1d< int > const & partition ) override; + + void importFieldOnArray( Block block, + string const & blockName, + string const & meshFieldName, + bool isMaterialField, + dataRepository::WrapperBase & wrapper ) const override; + + /** + * @brief Free the memory of the temporary objects used to load the file. + */ + void freeResources() override; + + /** + * @brief Get the Parent Representation object + * @return a tuple (uuid, name) of the loaded representation + */ + std::tuple< string, string > getParentRepresentation() const; + +protected: + + /** + * @brief Deserializes the RESQML epc file into a Data Repository. + * This repository is then used to populate the vtk data structures. + */ + void postProcessInput() override; + +private: + + ///@cond DO_NOT_DOCUMENT + struct viewKeyStruct + { + constexpr static char const * uuidString() { return "UUID"; } + constexpr static char const * titleInFileString() { return "titleInFile"; } + constexpr static char const * uuidsRegionsToImportString() { return "UUIDsRegionsToImport"; } + constexpr static char const * regionAttributeString() { return "regionAttribute"; } + constexpr static char const * uuidsFieldsToImportString() { return "UUIDsFieldsToImport"; } + constexpr static char const * fieldsToImportString() { return "fieldsToImport"; } + constexpr static char const * uuidsSurfacesToImportString() { return "UUIDsSurfacesToImport"; } + constexpr static char const * nodesetNamesString() { return "nodesetNames"; } + constexpr static char const * partitionRefinementString() { return "partitionRefinement"; } + constexpr static char const * partitionMethodString() { return "partitionMethod"; } + constexpr static char const * useGlobalIdsString() { return "useGlobalIds"; } + }; + /// @endcond + + + /** + * @brief Generate the mesh using fesapi library for reading RESQML data + * @param[in] domain in the DomainPartition to be written + * @details This method leverages the fesapi library to load meshes into + * vtk data structures. + */ + void generateMesh( DomainPartition & domain ); + + /** + * @brief + * + * @param cellBlockName + * @param meshFieldName + * @param isMaterialField + * @param wrapper + */ + void importVolumicFieldOnArray( string const & cellBlockName, string const & meshFieldName, bool isMaterialField, WrapperBase & wrapper ) const; + + + /** + * @brief Load a list of surfaces from fesapi into CellData of + * a vtkDataSet + * @param[in] mesh The dataset in which load the surfaces + * @return the dataset with the surfaces + */ + vtkSmartPointer< vtkDataSet > loadSurfaces( vtkSmartPointer< vtkDataSet > mesh ); + + /** + * @brief Load a list of regions from fesapi into CellData of + * a vtkDataSet + * @param[in] mesh The dataset in which load the regions + * @return the dataset with the regions + */ + vtkSmartPointer< vtkDataSet > loadRegions( vtkSmartPointer< vtkDataSet > mesh ); + + /** + * @brief Load a list of fields from fesapi into CellData of + * a vtkDataSet + * @param[in] mesh The dataset in which load the fields + * @return the dataset with the fields + */ + vtkSmartPointer< vtkDataSet > loadProperties( vtkSmartPointer< vtkDataSet > mesh ); + + /** + * @brief Looking for the UnstructuredGrid with fesapi and + * Load DataObject into a vtkDataSet + * @return the loaded object into a dataset + */ + vtkSmartPointer< vtkDataSet > retrieveUnstructuredGrid(); + + /** + * @brief Load the RESQML data into the VTK data structure + * @return a vtk mesh + */ + vtkSmartPointer< vtkDataSet > loadMesh(); + + + ///Repository of RESQML objects + common::DataObjectRepository * m_repository; + + /// UUID and title of the mesh + string m_parent_uuid; + string m_parent_title; + + /** + * @brief The VTK mesh to be imported into GEOS. + * @note We keep this smart pointer as a member for use in @p importFields(). + */ + vtkSmartPointer< vtkDataSet > m_vtkMesh; + + /// UUIDs of the subrepresentation to import as regions + string_array m_uuidsRegionsToImport; + + /// Name of VTK dataset attribute used to mark regions + string m_attributeName; + + /// UUIDs of the fields to import + string_array m_uuidsFieldsToImport; + + // Name of the fields to import + string_array m_fieldsToImport; + + /// UUIDs of the surfaces to import + string_array m_uuidsSurfacesToImport; + + /// Names of VTK nodesets to import + string_array m_nodesetNames; + + /// Number of graph partitioning refinement iterations + integer m_partitionRefinement = 0; + + /// Whether global id arrays should be used, if available + integer m_useGlobalIds = 0; + + /// Method (library) used to partition the mesh + vtk::PartitionMethod m_partitionMethod = vtk::PartitionMethod::parmetis; + + /// Lists of VTK cell ids, organized by element type, then by region + vtk::CellMapType m_cellMap; +}; + +} // namespace geos + +#endif /* GEOS_EXTERNALCOMPONENTS_RESQML_RESQMLMESHGENERATOR_HPP */ \ No newline at end of file diff --git a/src/RESQMLOutput.cpp b/src/RESQMLOutput.cpp new file mode 100644 index 0000000..b2e5914 --- /dev/null +++ b/src/RESQMLOutput.cpp @@ -0,0 +1,149 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 RESQMLOutput.cpp + */ + +#include "RESQMLOutput.hpp" +#include "mesh/DomainPartition.hpp" +#include "mesh/MeshManager.hpp" +#include "RESQMLMeshGenerator.hpp" + + + +namespace geos +{ + +using namespace dataRepository; + +RESQMLOutput::RESQMLOutput( string const & name, + Group * const parent ): + OutputBase( name, parent ) + , m_plotFileName( name ) + , m_plotLevel() + , m_onlyPlotSpecifiedFieldNames() + , m_fieldNames( ) + , m_objectName( ) + , m_writer( getOutputDirectory() ) +{ + registerWrapper( viewKeysStruct::plotFileName, &m_plotFileName ). + setDefaultValue( m_plotFileName ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "Name of the file for this output." ); + + registerWrapper( viewKeysStruct::plotLevel, &m_plotLevel ). + setApplyDefaultValue( 1 ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "Level detail plot. Only fields with lower of equal plot level will be output." ); + + registerWrapper( viewKeysStruct::onlyPlotSpecifiedFieldNames, &m_onlyPlotSpecifiedFieldNames ). + setApplyDefaultValue( 0 ). + setInputFlag( 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`" ); + + registerWrapper( viewKeysStruct::fieldNames, &m_fieldNames ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "Names of the fields to output. If this attribute is specified, GEOS outputs all the fields specified by the user, regardless of their `plotLevel`" ); + + registerWrapper( viewKeysStruct::objectName, &m_objectName ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "The name of the object from which to retrieve field values." ); + + registerWrapper( viewKeysStruct::parentMeshUUID, &m_parentMeshUUID ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "The UUID of the grid." ); + + registerWrapper( viewKeysStruct::parentMeshName, &m_parentMeshName ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "The name of the grid." ); +} + +RESQMLOutput::~RESQMLOutput() +{} + +void RESQMLOutput::postProcessInput() +{ + m_writer.setOutputLocation( getOutputDirectory(), m_plotFileName ); + m_writer.setFieldNames( m_fieldNames.toViewConst() ); + m_writer.setOnlyPlotSpecifiedFieldNamesFlag( m_onlyPlotSpecifiedFieldNames ); + +//SupportingRepresentation + + // Use the information of the parent grid provided by the user + if(!m_parentMeshUUID.empty() && !m_parentMeshName.empty()) + { + m_writer.setParentRepresentation( { m_parentMeshUUID, m_parentMeshName } ); + } + else if(!m_objectName.empty())// or search for a RESQML input grid in the simulation deck to fill the blanks + { + MeshManager & meshManager = this->getGroupByPath< MeshManager >( "/Problem/Mesh" ); + RESQMLMeshGenerator * resqmlMeshGenerator = meshManager.getGroupPointer< RESQMLMeshGenerator >( m_objectName ); + + GEOS_THROW_IF( resqmlMeshGenerator == nullptr, + getName() << ": RESQMLMesh not found: " << m_objectName, + InputError ); + + m_writer.setParentRepresentation( resqmlMeshGenerator->getParentRepresentation()); + } + else + { + GEOS_THROW(GEOS_FMT("{}: You must provide either a RESQMLMesh name or the parent grid Name and UUID", getName() ), + InputError ); + } + + m_writer.initializeOutput(); +} + +void RESQMLOutput::reinit() +{ + //m_writer.clearData(); +} + +bool RESQMLOutput::execute( real64 const time_n, + real64 const GEOS_UNUSED_PARAM( dt ), + integer const cycleNumber, + integer const GEOS_UNUSED_PARAM( eventCounter ), + real64 const GEOS_UNUSED_PARAM ( eventProgress ), + DomainPartition & domain ) +{ + if( cycleNumber == 0 ) + { + m_writer.generateSubRepresentations( domain ); + } + + // if( cycleNumber == 0 ) + // { + m_writer.write( time_n, cycleNumber, domain ); + // } + + return false; +} + +void RESQMLOutput::cleanup( real64 const GEOS_UNUSED_PARAM( time_n ), + integer const GEOS_UNUSED_PARAM( cycleNumber ), + integer const GEOS_UNUSED_PARAM( eventCounter ), + real64 const GEOS_UNUSED_PARAM( eventProgress ), + DomainPartition & GEOS_UNUSED_PARAM( domain ) ) +{ + if( MpiWrapper::commRank( ) == 0 ) + { + m_writer.generateOutput(); + } +} + +REGISTER_CATALOG_ENTRY( OutputBase, RESQMLOutput, string const &, Group * const ) + +} /* namespace geos */ \ No newline at end of file diff --git a/src/RESQMLOutput.hpp b/src/RESQMLOutput.hpp new file mode 100644 index 0000000..3edf34b --- /dev/null +++ b/src/RESQMLOutput.hpp @@ -0,0 +1,117 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 RESQMLOutput.hpp + */ + +#ifndef GEOS_FILEIO_OUTPUTS_RESQMLOUTPUT_HPP_ +#define GEOS_FILEIO_OUTPUTS_RESQMLOUTPUT_HPP_ + +#include "fileIO/Outputs/OutputBase.hpp" +#include "RESQMLWriterInterface.hpp" + +namespace geos +{ + +/** + * @brief A class for creating RESQML outputs + */ +class RESQMLOutput : public OutputBase +{ +public: + + /// @copydoc geos::dataRepository::Group::Group(string const & name, Group * const parent) + RESQMLOutput( string const & name, Group * const parent ); + + /// Destructor + virtual ~RESQMLOutput() override; + + /** + * @brief Catalog name interface + * @return This type's catalog name + */ + static string catalogName() { return "RESQML"; } + + + virtual void postProcessInput() override; + + /** + * @brief Writes out a set of properties. + * @copydoc 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 Write one final set of vtk files as the code exits + * @copydoc ExecutableGroup::cleanup() + */ + virtual void cleanup( real64 const time_n, + integer const cycleNumber, + integer const eventCounter, + real64 const eventProgress, + DomainPartition & domain ) override; + + /** + * @brief Performs re-initialization of the datasets accumulated in the PVD writer. + */ + virtual void reinit() override; + + /// @cond DO_NOT_DOCUMENT + struct viewKeysStruct : OutputBase::viewKeysStruct + { + static constexpr auto plotFileName = "plotFileName"; + static constexpr auto plotLevel = "plotLevel"; + static constexpr auto objectName = "objectName"; + static constexpr auto onlyPlotSpecifiedFieldNames = "onlyPlotSpecifiedFieldNames"; + static constexpr auto fieldNames = "fieldNames"; + static constexpr auto parentMeshUUID = "parentMeshUUID"; + static constexpr auto parentMeshName = "parentMeshName"; + } RESQMLOutputViewKeys; + /// @endcond + +private: + + /// Name of the file for this output + string m_plotFileName; + + /// level of detail plot + integer m_plotLevel; + + /// flag to decide whether we only plot the specified field names + integer m_onlyPlotSpecifiedFieldNames; + + /// array of names of the fields to output + array1d< string > m_fieldNames; + + /// Name of the Mesh input node + string m_objectName; + + /// UUID of the parent grid + string m_parentMeshUUID; + + // Name of the parent grid + string m_parentMeshName; + + RESQMLWriterInterface m_writer; +}; + +} /* namespace geos */ + +#endif /* GEOS_FILEIO_OUTPUTS_RESQMLOUTPUT_HPP_ */ \ No newline at end of file diff --git a/src/RESQMLUtilities.cpp b/src/RESQMLUtilities.cpp new file mode 100644 index 0000000..5561256 --- /dev/null +++ b/src/RESQMLUtilities.cpp @@ -0,0 +1,742 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 Total, S.A + * Copyright (c) 2019- GEOS Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file RESQMLUtilities.cpp + */ + +#include "RESQMLUtilities.hpp" + +#include +#include +#include +#include +#include +#include + + +#include "fesapi/resqml2/AbstractLocal3dCrs.h" +#include "fesapi/resqml2/CategoricalProperty.h" +#include "fesapi/resqml2/ContinuousProperty.h" +#include "fesapi/resqml2/DiscreteProperty.h" +#include "fesapi/resqml2/SubRepresentation.h" + +#include + +namespace geos +{ + +//---------------------------------------------------------------------------- +void cellVtkTetra( vtkSmartPointer< vtkUnstructuredGrid > vtk_unstructuredGrid, + const RESQML2_NS::UnstructuredGridRepresentation *unstructuredGridRep, + ULONG64 const *cumulativeFaceCountPerCell, + unsigned char const *cellFaceNormalOutwardlyDirected, + ULONG64 cellIndex ) +{ + unsigned int nodes[4]; + + // Face 0 + ULONG64 const *nodeIndices = unstructuredGridRep->getNodeIndicesOfFaceOfCell( cellIndex, 0 ); + size_t cellFaceIndex = unstructuredGridRep->isFaceCountOfCellsConstant() || cellIndex == 0 + ? cellIndex * 4 + : cumulativeFaceCountPerCell[cellIndex - 1]; + if( cellFaceNormalOutwardlyDirected[cellFaceIndex] == 0 ) + { // The RESQML orientation of face 0 honors the VTK orientation of face 0 i.e. the face 0 normal defined using a right hand rule is + // inwardly directed. + nodes[0] = nodeIndices[0]; + nodes[1] = nodeIndices[1]; + nodes[2] = nodeIndices[2]; + } + else + { // The RESQML orientation of face 0 does not honor the VTK orientation of face 0 + nodes[0] = nodeIndices[2]; + nodes[1] = nodeIndices[1]; + nodes[2] = nodeIndices[0]; + } + + // Face 1 + nodeIndices = unstructuredGridRep->getNodeIndicesOfFaceOfCell( cellIndex, 1 ); + + for( size_t index = 0; index < 3; ++index ) + { + if( std::find( nodes, nodes + 3, nodeIndices[index] ) == nodes + 3 ) + { + nodes[3] = nodeIndices[index]; + break; + } + } + + vtkNew< vtkIdList > tetra; + for( vtkIdType pointId = 0; pointId < 4; ++pointId ) + { + tetra->InsertId( pointId, nodes[pointId] ); + } + vtk_unstructuredGrid->InsertNextCell( VTK_TETRA, tetra ); +} + +//---------------------------------------------------------------------------- +void cellVtkWedgeOrPyramid( vtkSmartPointer< vtkUnstructuredGrid > vtk_unstructuredGrid, + const RESQML2_NS::UnstructuredGridRepresentation *unstructuredGridRep, + ULONG64 const *cumulativeFaceCountPerCell, unsigned char const *cellFaceNormalOutwardlyDirected, + ULONG64 cellIndex ) +{ + // The global index of the first face of the polyhedron in the cellFaceNormalOutwardlyDirected array + const size_t globalFirstFaceIndex = unstructuredGridRep->isFaceCountOfCellsConstant() || cellIndex == 0 + ? cellIndex * 5 + : cumulativeFaceCountPerCell[cellIndex - 1]; + + std::vector< unsigned int > localFaceIndexWith4Nodes; + for( unsigned int localFaceIndex = 0; localFaceIndex < 5; ++localFaceIndex ) + { + if( unstructuredGridRep->getNodeCountOfFaceOfCell( cellIndex, localFaceIndex ) == 4 ) + { + localFaceIndexWith4Nodes.push_back( localFaceIndex ); + } + } + if( localFaceIndexWith4Nodes.size() == 3 ) + { // VTK_WEDGE + std::array< uint64_t, 6 > nodes; + // Set the triangle base of the wedge + unsigned int triangleIndex = 0; + for(; triangleIndex < 5; ++triangleIndex ) + { + const unsigned int localNodeCount = unstructuredGridRep->getNodeCountOfFaceOfCell( cellIndex, triangleIndex ); + if( localNodeCount == 3 ) + { + uint64_t const *nodeIndices = unstructuredGridRep->getNodeIndicesOfFaceOfCell( cellIndex, triangleIndex ); + if( cellFaceNormalOutwardlyDirected[globalFirstFaceIndex + triangleIndex] == 0 ) + { + for( size_t i = 0; i < 3; ++i ) + { + nodes[i] = nodeIndices[2 - i]; + } + } + else + { + // The RESQML orientation of face 0 honors the VTK orientation of face 0 i.e. the face 0 normal defined using a right hand rule is + // outwardly directed. + for( size_t i = 0; i < 3; ++i ) + { + nodes[i] = nodeIndices[i]; + } + } + ++triangleIndex; + break; + } + } + // Find the index of the vertex at the opposite triangle regarding the triangle base + for( unsigned int localFaceIndex = 0; localFaceIndex < 5; ++localFaceIndex ) + { + const unsigned int localNodeCount = unstructuredGridRep->getNodeCountOfFaceOfCell( cellIndex, localFaceIndex ); + if( localNodeCount == 4 ) + { + uint64_t const *nodeIndices = unstructuredGridRep->getNodeIndicesOfFaceOfCell( cellIndex, localFaceIndex ); + if( nodeIndices[0] == nodes[0] ) + { + nodes[3] = nodeIndices[1] == nodes[1] || nodeIndices[1] == nodes[2] + ? nodeIndices[3] : nodeIndices[1]; + break; + } + else if( nodeIndices[1] == nodes[0] ) + { + nodes[3] = nodeIndices[2] == nodes[1] || nodeIndices[2] == nodes[2] + ? nodeIndices[0] : nodeIndices[2]; + break; + } + else if( nodeIndices[2] == nodes[0] ) + { + nodes[3] = nodeIndices[3] == nodes[1] || nodeIndices[3] == nodes[2] + ? nodeIndices[1] : nodeIndices[3]; + break; + } + else if( nodeIndices[3] == nodes[0] ) + { + nodes[3] = nodeIndices[0] == nodes[1] || nodeIndices[0] == nodes[2] + ? nodeIndices[2] : nodeIndices[0]; + break; + } + } + } + // Set the other triangle of the wedge + for(; triangleIndex < 5; ++triangleIndex ) + { + const unsigned int localNodeCount = unstructuredGridRep->getNodeCountOfFaceOfCell( cellIndex, triangleIndex ); + if( localNodeCount == 3 ) + { + uint64_t const *nodeIndices = unstructuredGridRep->getNodeIndicesOfFaceOfCell( cellIndex, triangleIndex ); + if( nodeIndices[0] == nodes[3] ) + { + if( cellFaceNormalOutwardlyDirected[globalFirstFaceIndex + triangleIndex] == 0 ) + { + nodes[4] = nodeIndices[1]; + nodes[5] = nodeIndices[2]; + } + else + { + nodes[4] = nodeIndices[2]; + nodes[5] = nodeIndices[1]; + } + } + else if( nodeIndices[1] == nodes[3] ) + { + if( cellFaceNormalOutwardlyDirected[globalFirstFaceIndex + triangleIndex] == 0 ) + { + nodes[4] = nodeIndices[2]; + nodes[5] = nodeIndices[0]; + } + else + { + nodes[4] = nodeIndices[0]; + nodes[5] = nodeIndices[2]; + } + } + else if( nodeIndices[2] == nodes[3] ) + { + if( cellFaceNormalOutwardlyDirected[globalFirstFaceIndex + triangleIndex] == 0 ) + { + nodes[4] = nodeIndices[0]; + nodes[5] = nodeIndices[1]; + } + else + { + nodes[4] = nodeIndices[1]; + nodes[5] = nodeIndices[0]; + } + } + break; + } + } + + vtkNew< vtkIdList > wedge; + for( int nodesIndex = 0; nodesIndex < 6; ++nodesIndex ) + { + wedge->InsertId( nodesIndex, nodes[nodesIndex] ); + } + vtk_unstructuredGrid->InsertNextCell( VTK_WEDGE, wedge ); + } + else if( localFaceIndexWith4Nodes.size() == 1 ) + { // VTK_PYRAMID + ULONG64 nodes[5]; + + ULONG64 const *nodeIndices = unstructuredGridRep->getNodeIndicesOfFaceOfCell( cellIndex, localFaceIndexWith4Nodes[0] ); + size_t cellFaceIndex = (unstructuredGridRep->isFaceCountOfCellsConstant() || cellIndex == 0 + ? cellIndex * 5 + : cumulativeFaceCountPerCell[cellIndex - 1]) + + localFaceIndexWith4Nodes[0]; + if( cellFaceNormalOutwardlyDirected[cellFaceIndex] == 0 ) + { // The RESQML orientation of the face honors the VTK orientation of face 0 i.e. the face 0 normal defined using a right hand rule is + // inwardly directed. + nodes[0] = nodeIndices[0]; + nodes[1] = nodeIndices[1]; + nodes[2] = nodeIndices[2]; + nodes[3] = nodeIndices[3]; + } + else + { // The RESQML orientation of the face does not honor the VTK orientation of face 0 + nodes[0] = nodeIndices[3]; + nodes[1] = nodeIndices[2]; + nodes[2] = nodeIndices[1]; + nodes[3] = nodeIndices[0]; + } + + // Face with 3 points + nodeIndices = unstructuredGridRep->getNodeIndicesOfFaceOfCell( cellIndex, localFaceIndexWith4Nodes[0] == 0 ? 1 : 0 ); + + for( size_t index = 0; index < 3; ++index ) + { + if( std::find( nodes, nodes + 4, nodeIndices[index] ) == nodes + 4 ) + { + nodes[4] = nodeIndices[index]; + break; + } + } + + vtkNew< vtkIdList > pyramid; + for( int nodesIndex = 0; nodesIndex < 5; ++nodesIndex ) + { + pyramid->InsertId( nodesIndex, nodes[nodesIndex] ); + } + vtk_unstructuredGrid->InsertNextCell( VTK_PYRAMID, pyramid ); + } + else + { + throw std::invalid_argument( "The cell index " + std::to_string( cellIndex ) + " is malformed : 5 faces but not a pyramid, not a wedge." ); + } +} + +//---------------------------------------------------------------------------- +bool cellVtkHexahedron( vtkSmartPointer< vtkUnstructuredGrid > vtk_unstructuredGrid, + const RESQML2_NS::UnstructuredGridRepresentation *unstructuredGridRep, + ULONG64 const *cumulativeFaceCountPerCell, + unsigned char const *cellFaceNormalOutwardlyDirected, + ULONG64 cellIndex ) +{ + for( ULONG64 localFaceIndex = 0; localFaceIndex < 6; ++localFaceIndex ) + { + if( unstructuredGridRep->getNodeCountOfFaceOfCell( cellIndex, localFaceIndex ) != 4 ) + { + return false; + } + } + + ULONG64 nodes[8]; + + ULONG64 const *nodeIndices = unstructuredGridRep->getNodeIndicesOfFaceOfCell( cellIndex, 0 ); + const size_t cellFaceIndex = unstructuredGridRep->isFaceCountOfCellsConstant() || cellIndex == 0 + ? cellIndex * 6 + : cumulativeFaceCountPerCell[cellIndex - 1]; + if( cellFaceNormalOutwardlyDirected[cellFaceIndex] == 0 ) + { // The RESQML orientation of the face honors the VTK orientation of face 0 i.e. the face 0 normal defined using a right hand rule is + // inwardly directed. + nodes[0] = nodeIndices[0]; + nodes[1] = nodeIndices[1]; + nodes[2] = nodeIndices[2]; + nodes[3] = nodeIndices[3]; + } + else + { // The RESQML orientation of the face does not honor the VTK orientation of face 0 + nodes[0] = nodeIndices[3]; + nodes[1] = nodeIndices[2]; + nodes[2] = nodeIndices[1]; + nodes[3] = nodeIndices[0]; + } + + // Find the opposite neighbors of the nodes already got + bool alreadyTreated[4] = {false, false, false, false}; + for( unsigned int localFaceIndex = 1; localFaceIndex < 6; ++localFaceIndex ) + { + nodeIndices = unstructuredGridRep->getNodeIndicesOfFaceOfCell( cellIndex, localFaceIndex ); + for( size_t index = 0; index < 4; ++index ) + { // Loop on face nodes + ULONG64 *itr = std::find( nodes, nodes + 4, nodeIndices[index] ); // Locate a node on face 0 + if( itr != nodes + 4 ) + { + // A top neighbor node can be found + const size_t topNeigborIdx = std::distance( nodes, itr ); + if( !alreadyTreated[topNeigborIdx] ) + { + const size_t previousIndex = index == 0 ? 3 : index - 1; + nodes[topNeigborIdx + 4] = std::find( nodes, nodes + 4, nodeIndices[previousIndex] ) != nodes + 4 // If previous index is also in + // face 0 + ? nodeIndices[index == 3 ? 0 : index + 1] // Put next index + : nodeIndices[previousIndex]; // Put previous index + alreadyTreated[topNeigborIdx] = true; + } + } + } + if( localFaceIndex > 2 && std::find( alreadyTreated, alreadyTreated + 4, false ) == alreadyTreated + 4 ) + { + // All top neighbor nodes have been found. No need to continue + // A minimum of four faces is necessary in order to find all top neighbor nodes. + break; + } + } + + vtkNew< vtkIdList > hexahedron; + for( int nodesIndex = 0; nodesIndex < 8; ++nodesIndex ) + { + hexahedron->InsertId( nodesIndex, nodes[nodesIndex] ); + } + vtk_unstructuredGrid->InsertNextCell( VTK_HEXAHEDRON, hexahedron ); + return true; +} + +//---------------------------------------------------------------------------- +bool cellVtkPentagonalPrism( vtkSmartPointer< vtkUnstructuredGrid > vtk_unstructuredGrid, + const RESQML2_NS::UnstructuredGridRepresentation *unstructuredGridRep, + ULONG64 cellIndex ) +{ + unsigned int faceTo5Nodes = 0; + ULONG64 nodes[10]; + for( ULONG64 localFaceIndex = 0; localFaceIndex < 7; ++localFaceIndex ) + { + const unsigned int localNodeCount = unstructuredGridRep->getNodeCountOfFaceOfCell( cellIndex, localFaceIndex ); + if( localNodeCount == 5 ) + { + ULONG64 const *nodeIndices = unstructuredGridRep->getNodeIndicesOfFaceOfCell( cellIndex, localFaceIndex ); + for( unsigned int i = 0; i < localNodeCount; ++i ) + { + nodes[faceTo5Nodes * 5 + i] = nodeIndices[i]; + } + ++faceTo5Nodes; + } + } + if( faceTo5Nodes == 2 ) + { + vtkNew< vtkIdList > pentagonalPrism; + for( int nodesIndex = 0; nodesIndex < 10; ++nodesIndex ) + { + pentagonalPrism->InsertId( nodesIndex, nodes[nodesIndex] ); + } + vtk_unstructuredGrid->InsertNextCell( VTK_PENTAGONAL_PRISM, pentagonalPrism ); + return true; + } + return false; +} + +//---------------------------------------------------------------------------- +bool cellVtkHexagonalPrism( vtkSmartPointer< vtkUnstructuredGrid > vtk_unstructuredGrid, + const RESQML2_NS::UnstructuredGridRepresentation *unstructuredGridRep, + ULONG64 cellIndex ) +{ + unsigned int faceTo6Nodes = 0; + ULONG64 nodes[12]; + for( ULONG64 localFaceIndex = 0; localFaceIndex < 8; ++localFaceIndex ) + { + const unsigned int localNodeCount = unstructuredGridRep->getNodeCountOfFaceOfCell( cellIndex, localFaceIndex ); + if( localNodeCount == 6 ) + { + ULONG64 const *nodeIndices = unstructuredGridRep->getNodeIndicesOfFaceOfCell( cellIndex, localFaceIndex ); + for( unsigned int i = 0; i < localNodeCount; ++i ) + { + nodes[faceTo6Nodes * 6 + i] = nodeIndices[i]; + } + ++faceTo6Nodes; + } + } + if( faceTo6Nodes == 2 ) + { + vtkNew< vtkIdList > hexagonalPrism; + for( int nodesIndex = 0; nodesIndex < 12; ++nodesIndex ) + { + hexagonalPrism->InsertId( nodesIndex, nodes[nodesIndex] ); + } + vtk_unstructuredGrid->InsertNextCell( VTK_HEXAGONAL_PRISM, hexagonalPrism ); + return true; + } + return false; +} + + +int readContinuousProperty( RESQML2_NS::AbstractValuesProperty * valuesProperty, string name, vtkCellData * outDS ) +{ + const unsigned int elementCountPerValue = valuesProperty->getElementCountPerValue(); + const unsigned int totalHDFElementcount = valuesProperty->getValuesCountOfPatch( 0 ); + + double * valueIndices = new double[totalHDFElementcount]; // deleted by VTK cellData vtkSmartPointer + + valuesProperty->getDoubleValuesOfPatch( 0, valueIndices ); + + //TODO find a better way to handle NaN data + for( unsigned int x = 0; x < totalHDFElementcount; ++x ) + { + if( std::isnan( valueIndices[x] )) + { + valueIndices[x] = 0.00000001; + } + } + + vtkNew< vtkDoubleArray > cellData; + cellData->SetArray( valueIndices, totalHDFElementcount, 0, vtkAbstractArray::VTK_DATA_ARRAY_DELETE ); + cellData->SetName( name.c_str()); + cellData->SetNumberOfComponents( elementCountPerValue ); + + outDS->AddArray( cellData ); + + return 1; +} + +int readDiscreteOrCategoricalProperty( RESQML2_NS::AbstractValuesProperty * valuesProperty, string name, vtkCellData * outDS ) +{ + const unsigned int elementCountPerValue = valuesProperty->getElementCountPerValue(); + const unsigned int totalHDFElementcount = valuesProperty->getValuesCountOfPatch( 0 ); + + int * valueIndices = new int[totalHDFElementcount]; // deleted by VTK cellData vtkSmartPointer + + valuesProperty->getIntValuesOfPatch( 0, valueIndices ); + + //TODO handle NaN ? + + vtkNew< vtkIntArray > cellData; + cellData->SetArray( valueIndices, totalHDFElementcount, 0, vtkAbstractArray::VTK_DATA_ARRAY_DELETE ); + cellData->SetName( name.c_str()); + cellData->SetNumberOfComponents( elementCountPerValue ); + + outDS->AddArray( cellData ); + + return 1; +} + + +vtkSmartPointer< vtkUnstructuredGrid > +loadUnstructuredGridRepresentation( RESQML2_NS::UnstructuredGridRepresentation *grid ) +{ + auto vtk_unstructuredGrid = vtkSmartPointer< vtkUnstructuredGrid >::New(); + + vtk_unstructuredGrid->Allocate( grid->getCellCount()); + + + uint64_t pointCount = grid->getXyzPointCountOfAllPatches(); + + // POINTS + double *allXyzPoints = new double[pointCount * 3]; // Will be deleted by VTK; + grid->getXyzPointsOfAllPatches( allXyzPoints ); //getXyzPointsOfAllPatchesInGlobalCrs + + const size_t coordCount = pointCount * 3; + + if( grid->getLocalCrs( 0 ) != nullptr ) + { + if( !grid->getLocalCrs( 0 )->isPartial()) + { + const double zIndice = grid->getLocalCrs( 0 )->isDepthOriented() ? -1 : 1; + + for( size_t zCoordIndex = 2; zCoordIndex < coordCount; zCoordIndex += 3 ) + { + allXyzPoints[zCoordIndex] *= zIndice; + } + } + } + + vtkNew< vtkDoubleArray > vtkUnderlyingArray; + vtkUnderlyingArray->SetNumberOfComponents( 3 ); + // Take ownership of the underlying C array + vtkUnderlyingArray->SetArray( allXyzPoints, coordCount, vtkAbstractArray::VTK_DATA_ARRAY_DELETE ); + + vtkNew< vtkPoints > vtkPts; + vtkPts->SetData( vtkUnderlyingArray ); + + vtk_unstructuredGrid->SetPoints( vtkPts ); + grid->loadGeometry(); + // CELLS + const unsigned int nodeCount = grid->getNodeCount(); + std::unique_ptr< vtkIdType[] > pointIds( new vtkIdType[nodeCount] ); + for( unsigned int i = 0; i < nodeCount; ++i ) + { + pointIds[i] = i; + } + const ULONG64 cellCount = grid->getCellCount(); + // This pointer is owned and managed by FESAPI + ULONG64 const *cumulativeFaceCountPerCell = grid->isFaceCountOfCellsConstant() + ? nullptr + : grid->getCumulativeFaceCountPerCell(); + + const uint64_t faceCount = cumulativeFaceCountPerCell == nullptr + ? cellCount * grid->getConstantFaceCountOfCells() + : cumulativeFaceCountPerCell[cellCount - 1]; + + std::unique_ptr< unsigned char[] > cellFaceNormalOutwardlyDirected( new unsigned char[faceCount] ); + + grid->getCellFaceIsRightHanded( cellFaceNormalOutwardlyDirected.get()); + + auto * crs = grid->getLocalCrs( 0 ); + if( !crs->isPartial() && crs->isDepthOriented()) + { + for( size_t i = 0; i < faceCount; ++i ) + { + cellFaceNormalOutwardlyDirected[i] = !cellFaceNormalOutwardlyDirected[i]; + } + } + + for( ULONG64 cellIndex = 0; cellIndex < cellCount; ++cellIndex ) + { + bool isOptimizedCell = false; + + + const ULONG64 localFaceCount = grid->getFaceCountOfCell( cellIndex ); + + if( localFaceCount == 4 ) + { // VTK_TETRA + cellVtkTetra( vtk_unstructuredGrid, grid, cumulativeFaceCountPerCell, cellFaceNormalOutwardlyDirected.get(), cellIndex ); + isOptimizedCell = true; + } + else if( localFaceCount == 5 ) + { // VTK_WEDGE or VTK_PYRAMID + cellVtkWedgeOrPyramid( vtk_unstructuredGrid, grid, cumulativeFaceCountPerCell, cellFaceNormalOutwardlyDirected.get(), cellIndex ); + isOptimizedCell = true; + } + else if( localFaceCount == 6 ) + { // VTK_HEXAHEDRON + isOptimizedCell = cellVtkHexahedron( vtk_unstructuredGrid, grid, cumulativeFaceCountPerCell, cellFaceNormalOutwardlyDirected.get(), cellIndex ); + } + else if( localFaceCount == 7 ) + { // VTK_PENTAGONAL_PRISM + isOptimizedCell = cellVtkPentagonalPrism( vtk_unstructuredGrid, grid, cellIndex ); + } + else if( localFaceCount == 8 ) + { // VTK_HEXAGONAL_PRISM + isOptimizedCell = cellVtkHexagonalPrism( vtk_unstructuredGrid, grid, cellIndex ); + } + + if( !isOptimizedCell ) + { + vtkNew< vtkIdList > idList; + + // For polyhedron cell, a special ptIds input format is required : (numCellFaces, numFace0Pts, id1, id2, id3, numFace1Pts, id1, id2, + // id3, ...) + idList->InsertNextId( localFaceCount ); + for( ULONG64 localFaceIndex = 0; localFaceIndex < localFaceCount; ++localFaceIndex ) + { + const unsigned int localNodeCount = grid->getNodeCountOfFaceOfCell( cellIndex, localFaceIndex ); + idList->InsertNextId( localNodeCount ); + ULONG64 const *nodeIndices = grid->getNodeIndicesOfFaceOfCell( cellIndex, localFaceIndex ); + for( unsigned int i = 0; i < localNodeCount; ++i ) + { + idList->InsertNextId( nodeIndices[i] ); + } + } + + vtk_unstructuredGrid->InsertNextCell( VTK_POLYHEDRON, idList ); + } + } + + grid->unloadGeometry(); + + return vtk_unstructuredGrid; +} + +vtkSmartPointer< vtkDataSet > +loadProperty( vtkSmartPointer< vtkDataSet > dataset, RESQML2_NS::AbstractValuesProperty *valuesProperty, string fieldNameInGEOS ) +{ + const gsoap_eml2_3::eml23__IndexableElement element = valuesProperty->getAttachmentKind(); + + if( element != gsoap_eml2_3::eml23__IndexableElement::cells ) + { + GEOS_ERROR( GEOS_FMT( "Property indexable element must be cells. Error with {}", valuesProperty->getUuid() ) ); + } + + std::string typeProperty = valuesProperty->getXmlTag(); + if( typeProperty == RESQML2_NS::ContinuousProperty::XML_TAG ) + { + readContinuousProperty( valuesProperty, fieldNameInGEOS, dataset->GetCellData() ); + } + else if( typeProperty == RESQML2_NS::DiscreteProperty::XML_TAG || + typeProperty == RESQML2_NS::CategoricalProperty::XML_TAG ) + { + readDiscreteOrCategoricalProperty( valuesProperty, fieldNameInGEOS, dataset->GetCellData() ); + } + else + { + GEOS_ERROR( GEOS_FMT( "Property {} not supported...", valuesProperty->getUuid() ) ); + } + + return dataset; +} + +vtkSmartPointer< vtkDataSet > +createRegions( vtkSmartPointer< vtkDataSet > dataset, std::vector< RESQML2_NS::SubRepresentation * > regions, string attributeName ) +{ + int region_id = 0; + + vtkIntArray * arr = vtkIntArray::New(); + arr->SetName( attributeName.c_str()); + arr->SetNumberOfComponents( 1 ); + arr->SetNumberOfTuples( dataset->GetNumberOfCells()); + arr->FillValue( region_id ); + + vtkDataArrayAccessor< vtkIntArray > attribute( arr ); + + for( std::size_t i = 0; i < regions.size(); ++i ) + { + region_id+=1; + + RESQML2_NS::SubRepresentation * region = regions[i]; + + if( region->getElementKindOfPatch( 0, 0 ) != gsoap_eml2_3::eml23__IndexableElement::faces ) + { + uint64_t elementCountOfPatch = region->getElementCountOfPatch( 0 ); + std::unique_ptr< uint64_t[] > elementIndices( new uint64_t[elementCountOfPatch] ); + region->getElementIndicesOfPatch( 0, 0, elementIndices.get() ); + + for( std::size_t j = 0; j < elementCountOfPatch; ++j ) + { + attribute.Set( vtkIdType( elementIndices[j] ), 0, region_id ); + } + } + } + dataset->GetCellData()->AddArray( arr ); + + return dataset; +} + +vtkUnstructuredGrid * +createSurfaces( vtkSmartPointer< vtkDataSet > dataset, std::vector< RESQML2_NS::SubRepresentation * > surfaces, string regionAttributeName ) +{ + vtkUnstructuredGrid * grid = vtkUnstructuredGrid::SafeDownCast( dataset ); + + vtkCellData * cell_data = grid->GetCellData(); + auto * region_ids = vtkIntArray::SafeDownCast( cell_data->GetAbstractArray( regionAttributeName.c_str())); + auto * min_max = region_ids->GetRange(); + int region_id = min_max[1]; + + for( std::size_t i = 0; i < surfaces.size(); ++i ) + { + RESQML2_NS::SubRepresentation * surface = surfaces[i]; + + // FACES + auto *supportingGrid = dynamic_cast< RESQML2_NS::UnstructuredGridRepresentation * >(surface->getSupportingRepresentation( 0 )); + + const uint64_t gridFaceCount = supportingGrid->getFaceCount(); + std::unique_ptr< uint64_t[] > nodeCountOfFaces( new uint64_t[gridFaceCount] ); + supportingGrid->getCumulativeNodeCountPerFace( nodeCountOfFaces.get()); + + std::unique_ptr< uint64_t[] > nodeIndices( new uint64_t[nodeCountOfFaces[gridFaceCount-1]] ); + supportingGrid->getNodeIndicesOfFaces( nodeIndices.get()); + + const uint64_t subFaceCount = surface->getElementCountOfPatch( 0 ); + std::unique_ptr< uint64_t[] > elementIndices( new uint64_t[subFaceCount] ); + surface->getElementIndicesOfPatch( 0, 0, elementIndices.get()); + + region_id += 1; + for( uint64_t subFaceIndex =0; subFaceIndex < subFaceCount; ++subFaceIndex ) + { + uint64_t faceIndex = elementIndices[subFaceIndex]; + auto first_indiceValue = faceIndex == 0 ? 0 : nodeCountOfFaces[faceIndex - 1]; + uint64_t nodeCount_OfFaceIndex = nodeCountOfFaces[faceIndex] - first_indiceValue; + + vtkIdType cell_type = VTK_POLYGON; + if( nodeCount_OfFaceIndex == 3 ) + { + cell_type = VTK_TRIANGLE; + } + else if( nodeCount_OfFaceIndex == 4 ) + { + cell_type = VTK_QUAD; + } + + vtkNew< vtkIdList > idList; + for( uint64_t nodeIndex = 0; nodeIndex < nodeCount_OfFaceIndex; ++nodeIndex, ++first_indiceValue ) + { + idList->InsertId( nodeIndex, nodeIndices[first_indiceValue] ); + } + + vtkIdType newCellId = grid->InsertNextCell( cell_type, idList ); + + for( int arrayIdx = 0; arrayIdx < cell_data->GetNumberOfArrays(); ++arrayIdx ) + { + auto * abArray = cell_data->GetAbstractArray( arrayIdx ); + if( abArray->GetName()==regionAttributeName ) + { + vtkIntArray * ar = vtkArrayDownCast< vtkIntArray >( abArray ); + ar->InsertValue( newCellId, region_id ); + } + else + { + int numComps = abArray->GetNumberOfComponents(); + vtkDoubleArray * ar = vtkArrayDownCast< vtkDoubleArray >( abArray ); + if( ar != nullptr ) + { + for( int comp = 0; comp < numComps; ++comp ) + { + ar->InsertTypedComponent( newCellId, comp, -9999. ); + } + } + } + } + } + } + + return grid; +} + +} // namespace geos \ No newline at end of file diff --git a/src/RESQMLUtilities.hpp b/src/RESQMLUtilities.hpp new file mode 100644 index 0000000..8b9be14 --- /dev/null +++ b/src/RESQMLUtilities.hpp @@ -0,0 +1,79 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 Total, S.A + * Copyright (c) 2019- GEOS Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file RESQMLUtilities.hpp + */ + +#ifndef GEOS_EXTERNALCOMPONENTS_RESQML_RESQMLUTILITIES_HPP +#define GEOS_EXTERNALCOMPONENTS_RESQML_RESQMLUTILITIES_HPP + +#include "common/DataTypes.hpp" + +#include +#include +#include + +#include "fesapi/resqml2/UnstructuredGridRepresentation.h" + + +namespace geos +{ + +/** + * @brief Load a RESQML UnstructuredGriRepresentation in a vtkUnstructuredGrid + * + * @param[in] grid The RESQML UnstructuredGriRepresentation + * @return The loaded dataset + */ +vtkSmartPointer< vtkUnstructuredGrid > +loadUnstructuredGridRepresentation( RESQML2_NS::UnstructuredGridRepresentation *grid ); + +/** + * @brief Load a Property in an existing dataset + * + * @param[in] dataset The existing dataset + * @param[in] valuesProperty The RESQML Property + * @param[in] fieldNameInGEOS The name of property in GEOS + * @return The dataset with the loaded property + */ +vtkSmartPointer< vtkDataSet > +loadProperty( vtkSmartPointer< vtkDataSet > dataset, RESQML2_NS::AbstractValuesProperty *valuesProperty, string fieldNameInGEOS ); + +/** + * @brief Create a cell array of regions with an array of RESQML SubRepresentations + * + * @param dataset The existing dataset + * @param regions The array of RESQML SubRepresentations + * @param attributeName The name of the vtk cell array + * @return The dataset with the loaded regions + */ +vtkSmartPointer< vtkDataSet > +createRegions( vtkSmartPointer< vtkDataSet > dataset, std::vector< RESQML2_NS::SubRepresentation * > regions, string attributeName ); + +/** + * @brief Create as many surfaces in a dataset as RESQML SubRepresentations + * + * @param dataset The existing dataset + * @param surfaces The array of RESQML SubRepresentations + * @param regionAttributeName The name of the region array name + * @return The dataset with the loaded surfaces + */ +vtkUnstructuredGrid * +createSurfaces( vtkSmartPointer< vtkDataSet > dataset, std::vector< RESQML2_NS::SubRepresentation * > surfaces, string regionAttributeName ); + + +} // namespace geos + +#endif /* GEOS_EXTERNALCOMPONENTS_RESQML_RESQMLUTILITIES_HPP */ \ No newline at end of file diff --git a/src/RESQMLWriterInterface.cpp b/src/RESQMLWriterInterface.cpp new file mode 100644 index 0000000..4dcf42d --- /dev/null +++ b/src/RESQMLWriterInterface.cpp @@ -0,0 +1,753 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 "RESQMLWriterInterface.hpp" + +#include "common/Logger.hpp" +#include "common/TypeDispatch.hpp" +#include "dataRepository/Group.hpp" +#include "fileIO/Outputs/OutputUtilities.hpp" +#include "mesh/DomainPartition.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#include "fesapi/eml2/AbstractHdfProxy.h" +#include "fesapi/eml2/TimeSeries.h" +#include "fesapi/resqml2_0_1/PropertyKind.h" +#include "fesapi/tools/TimeTools.h" +#include "fesapi/resqml2_0_1/ContinuousProperty.h" +#include "fesapi/resqml2_0_1/DiscreteProperty.h" + +// System includes +#include +#include + +namespace geos +{ + +/// @brief Non standard UUID generation function +/// placeholder to avoid linking to boost +namespace uuid +{ +static std::random_device rd; +static std::mt19937 gen( rd()); +static std::uniform_int_distribution<> dis( 0, 15 ); +static std::uniform_int_distribution<> dis2( 8, 11 ); + +string generate_uuid_v4() +{ + std::stringstream ss; + int i; + ss << std::hex; + for( i = 0; i < 8; i++ ) + { + ss << dis( gen ); + } + ss << "-"; + for( i = 0; i < 4; i++ ) + { + ss << dis( gen ); + } + ss << "-4"; + for( i = 0; i < 3; i++ ) + { + ss << dis( gen ); + } + ss << "-"; + ss << dis2( gen ); + for( i = 0; i < 3; i++ ) + { + ss << dis( gen ); + } + ss << "-"; + for( i = 0; i < 12; i++ ) + { + ss << dis( gen ); + } + ; + return ss.str(); +} +} // namespace uuid + +using namespace dataRepository; + +/** + * @brief Build/expand a list of strings used as default component labels on + * demand. + * @param size number of labels requested + * @return a span over range of strings (stored permanently in memory) + */ +static Span< string const > getDefaultLabels( localIndex const size ) +{ + static std::vector< string > labels; + localIndex oldSize = LvArray::integerConversion< localIndex >( labels.size()); + std::generate_n( std::back_inserter( labels ), size - oldSize, + [&] { return std::to_string( oldSize++ ); } ); + return {labels.begin(), labels.begin() + size}; +} + +/** + * @brief Checks consistency of user-provided per-dimension labels (must match + * the size of array). + * @param wrapper the array wrapper + * @param dim dimension index to check + */ +template< typename T, int NDIM, typename PERM > +void checkLabels( Wrapper< Array< T, NDIM, PERM > > const & wrapper, int const dim ) +{ + GEOS_ERROR_IF_NE_MSG( + LvArray::integerConversion< localIndex >( wrapper.getDimLabels( dim ).size()), + wrapper.reference().size( dim ), + "VTK writer: component names are set, but don't match the array size.\n" + "This is likely a bug in physics module (solver or constitutive model)." ); +} + +/** + * @brief Get a list of component labels for a particular dimension of an array. + * @param wrapper array wrapper + * @param dim dimension index + * @return a span over range of strings representing labels + */ +template< typename T, int NDIM, typename PERM > +static Span< string const > +getDimLabels( Wrapper< Array< T, NDIM, PERM > > const & wrapper, int const dim ) +{ + Span< string const > const labels = wrapper.getDimLabels( dim ); + if( labels.empty()) + { + return getDefaultLabels( wrapper.reference().size( dim )); + } + checkLabels( wrapper, dim ); + return labels; +} + +/** + * @brief Build a multidimensional component name out of distinct dimension-wise + * labels. + * @tparam Ts types of indices + * @tparam Is dummy template argument required for positional expansion of the + * pack + * @param dimLabels per-dimension component labels + * @param indices per-dimension component indices + * @return combined component name + */ +template< typename ... Ts, integer... Is > +static string makeComponentName( std::vector< string >(&dimLabels)[sizeof...(Ts)], + std::integer_sequence< integer, Is... >, + Ts const &... indices ) +{ + return stringutilities::concat( '/', dimLabels[Is][indices] ... ); +} + +/** + * @brief Specialized component metadata handler for 1D arrays. + * @param data VTK typed data array + */ +template< typename T, typename PERM > +static void setComponentMetadata( Wrapper< Array< T, 1, PERM > > const &, + vtkAOSDataArrayTemplate< T > *data ) +{ + data->SetNumberOfComponents( 1 ); +} + +/** + * @brief Specialized component metadata handler for 2D arrays. + * @param wrapper GEOS typed wrapper over source array + * @param data VTK typed data array + * + * This exists because we want to keep default VTK handling for unlabeled + * components (i.e. X/Y/Z for 1-3 components, numeric indices for higher) for + * the time being. This function can be removed if we force each physics package + * to always set its labels. + */ +template< typename T, typename PERM > +static void setComponentMetadata( Wrapper< Array< T, 2, PERM > > const & wrapper, + vtkAOSDataArrayTemplate< T > *data ) +{ + auto const view = wrapper.referenceAsView(); + data->SetNumberOfComponents( view.size( 1 )); + + Span< string const > const labels = wrapper.getDimLabels( 1 ); + if( !labels.empty()) + { + checkLabels( wrapper, 1 ); + for( localIndex i = 0; i < view.size( 1 ); ++i ) + { + data->SetComponentName( i, labels[i].c_str()); + } + } +} + +/** + * @brief Produces a temporary array slice from a view that can be looped over. + * @param view the source view + * @return a fake slice that does not point to real data but has correct + * dims/strides. + * @note The slice is only valid as long as the @p view is in scope. + * Values in the slice may be uninitialized and should not be used. + */ +template< typename T, int NDIM, int USD > +static ArraySlice< T const, NDIM - 1, USD - 1 > +makeTemporarySlice( ArrayView< T const, NDIM, USD > const & view ) +{ + // The following works in all compilers, but technically invokes undefined + // behavior: return ArraySlice< T, NDIM - 1, USD - 1 >( nullptr, view.dims() + + // 1, view.strides() + 1 ); + localIndex const numComp = + LvArray::indexing::multiplyAll< NDIM - 1 >( view.dims() + 1 ); + static array1d< T > arr; + arr.template resizeWithoutInitializationOrDestruction( numComp ); + return ArraySlice< T const, NDIM - 1, USD - 1 >( arr.data(), view.dims() + 1, + view.strides() + 1 ); +} + +/** + * @brief Generic component metadata handler for multidimensional arrays. + * @param wrapper GEOS typed wrapper over source array + * @param data VTK typed data array + */ +template< typename T, int NDIM, typename PERM > +static void setComponentMetadata( Wrapper< Array< T, NDIM, PERM > > const & wrapper, + vtkAOSDataArrayTemplate< T > *data ) +{ + data->SetNumberOfComponents( wrapper.numArrayComp()); + + std::vector< string > labels[NDIM - 1]; + for( integer dim = 1; dim < NDIM; ++dim ) + { + Span< string const > dimLabels = getDimLabels( wrapper, dim ); + labels[dim - 1].assign( dimLabels.begin(), dimLabels.end()); + } + + auto const view = wrapper.referenceAsView(); + auto const slice = view.size( 0 ) > 0 ? view[0] : makeTemporarySlice( view ); + + integer compIndex = 0; + LvArray::forValuesInSliceWithIndices( slice, [&]( T const &, + auto const... indices ) { + using idx_seq = std::make_integer_sequence< integer, sizeof...(indices) >; + data->SetComponentName( + compIndex++, makeComponentName( labels, idx_seq{}, indices ... ).c_str()); + } ); +} + +RESQMLWriterInterface::RESQMLWriterInterface( string name ) + : VTKPolyDataWriterInterface( name ), + m_outputRepository( new COMMON_NS::DataObjectRepository()), + m_propertyKind( nullptr ) +{ } + +void RESQMLWriterInterface::initializeOutput() +{ + // if( MpiWrapper::commRank() == 0) + string propertyKind = uuid::generate_uuid_v4(); + MpiWrapper::broadcast( propertyKind, 0 ); + + m_propertyKind = m_outputRepository->createPropertyKind( + propertyKind, "propType1", "F2I", + gsoap_resqml2_0_1::resqml20__ResqmlUom::m, + gsoap_resqml2_0_1::resqml20__ResqmlPropertyKind::length ); + + string timeSeries = uuid::generate_uuid_v4(); + MpiWrapper::broadcast( timeSeries, 0 ); + + m_timeSeries = + m_outputRepository->createTimeSeries( timeSeries, "Testing time series" ); + + // Create default MPI Proxy + string hdfProxy = uuid::generate_uuid_v4(); + MpiWrapper::broadcast( hdfProxy, 0 ); + + EML2_NS::AbstractHdfProxy *m_hdfProxy = m_outputRepository->createHdfProxy( + hdfProxy, "Parallel Hdf Proxy", m_outputDir, m_outputName + ".h5", + COMMON_NS::DataObjectRepository::openingMode::OVERWRITE ); + m_outputRepository->setDefaultHdfProxy( m_hdfProxy ); + + // TODO need local3dCrs ? + // local3dCrs = repo.createLocalDepth3dCrs("", "Default local CRS", .0, .0, + // .0, .0, gsoap_resqml2_0_1::eml20__LengthUom::m, 23031, + // gsoap_resqml2_0_1::eml20__LengthUom::m, "Unknown", false); + // repo.setDefaultCrs(local3dCrs); +} + +void RESQMLWriterInterface::generateOutput() const +{ + string outputFilename = joinPath( m_outputDir, m_outputName ) + ".epc"; + GEOS_LOG_RANK_0( GEOS_FMT( "Creating: {}", outputFilename )); + COMMON_NS::EpcDocument pck( outputFilename ); + GEOS_LOG_RANK_0( GEOS_FMT( "Start serialization of {} in {}", pck.getName(), + pck.getStorageDirectory().empty() + ? "working directory." + : pck.getStorageDirectory())); + pck.serializeFrom( *m_outputRepository ); +} + +void RESQMLWriterInterface::generateSubRepresentation( + ElementRegionManager const & elemManager, string const & field ) +{ + + std::vector< globalIndex > data; + + elemManager.forElementRegions< CellElementRegion >( + [&]( CellElementRegion const & region ) { + region.forElementSubRegions( + [&]( ElementSubRegionBase const & elementSubRegion ) { + if( elementSubRegion.hasWrapper( field )) + { + arrayView1d< globalIndex const > const & localToGlobal = + elementSubRegion.localToGlobalMap(); + arrayView1d< integer const > const & elemGhostRank = + elementSubRegion.ghostRank(); + + for( localIndex k = 0; k < elementSubRegion.size(); ++k ) + { + if( elemGhostRank[k] < 0 ) + { + data.push_back( localToGlobal[k] ); + } + } + } + } ); + } ); + + // Exchange the sizes of the data across all ranks. + array1d< int > dataSizes( MpiWrapper::commSize()); + MpiWrapper::allGather( LvArray::integerConversion< int >( data.size()), dataSizes, + MPI_COMM_GEOSX ); + + /// `totalDataSize` contains the total data size across all the MPI ranks. + int const totalDataSize = + std::accumulate( dataSizes.begin(), dataSizes.end(), 0 ); + + // Generate the RESQML SubRepresentation (XML Part) + string subrep = uuid::generate_uuid_v4(); + MpiWrapper::broadcast( subrep, 0 ); + + RESQML2_NS::SubRepresentation *subrep_allranks = + m_outputRepository->createSubRepresentation( subrep, + field + " Subrepresentation" ); + subrep_allranks->pushBackSupportingRepresentation( m_parent ); + + // Alternate way + subrep_allranks->pushBackSubRepresentationPatch( gsoap_eml2_3::eml23__IndexableElement::cells, totalDataSize ); + int const rankOffset = + std::accumulate( dataSizes.begin(), std::next( dataSizes.begin(), MpiWrapper::commRank()), 0 ); + subrep_allranks->setElementIndices( reinterpret_cast< uint64_t * >(data.data()), data.size(), rankOffset ); + + //record the object pointer for each field + m_subrepresentations.insert( {field, subrep_allranks} ); + + //record the start index of the data of each rank for each field + m_countPerProp.insert( {field, dataSizes} ); +} + +void RESQMLWriterInterface::generateSubRepresentations( + DomainPartition const & domain ) +{ + + domain.forMeshBodies( [&]( MeshBody const & meshBody ) { + meshBody.forMeshLevels( [&]( MeshLevel const & meshLevel ) { + // TODO very strange but keeps only the mesh with name starting with level + if( meshLevel.isShallowCopy()) + { + return; + } + + ElementRegionManager const & elemManager = meshLevel.getElemManager(); + elemManager.forElementRegions< CellElementRegion >( + [&]( CellElementRegion const & region ) { + region.forElementSubRegions( + [&]( ElementSubRegionBase const & subRegion ) { + for( auto const & wrapperIter : subRegion.wrappers()) + { + if( isFieldPlotEnabled( *wrapperIter.second )) + { + m_regularFields.insert( wrapperIter.first ); + } + } + } ); + } ); + + for( string const & field : m_regularFields ) + { + generateSubRepresentation( elemManager, field ); + } + } ); + } ); +} + +void RESQMLWriterInterface::write( real64 const time, + integer const GEOS_UNUSED_PARAM( cycle ), + DomainPartition const & domain ) +{ + m_property_uuid.clear(); + auto as_duration = + std::chrono::duration_cast< std::chrono::system_clock::duration >( + std::chrono::duration< real64 >( time )); + // duration seconds from start of epoch + std::chrono::system_clock::time_point time_point( as_duration ); + time_t timestamp = std::chrono::system_clock::to_time_t( time_point ); + + m_timeSeries->pushBackTimestamp( timestamp ); + + // loop over all mesh levels and mesh bodies + domain.forMeshBodies( [&]( MeshBody const & meshBody ) { + meshBody.forMeshLevels( [&]( MeshLevel const & meshLevel ) { + if( meshLevel.isShallowCopy()) + { + return; + } + + for( string const & field : m_regularFields ) + { + + ElementRegionManager const & elemManager = meshLevel.getElemManager(); + + // 1. init data buffer for each rank + vtkSmartPointer< vtkDataArray > data; + + localIndex numElements = 0; + bool first = true; + int numDims = 0; + elemManager.forElementRegions< CellElementRegion >( + [&]( CellElementRegion const & region ) { + region.forElementSubRegions( + [&]( ElementSubRegionBase const & subRegion ) { + if( subRegion.hasWrapper( field )) + { + numElements += (subRegion.size() - subRegion.getNumberOfGhosts()); + WrapperBase const & wrapper = subRegion.getWrapperBase( field ); + if( first ) + { + types::dispatch( + types::StandardArrays{}, wrapper.getTypeId(), true, + [&]( auto array ) { + using ArrayType = decltype(array); + using T = typename ArrayType::ValueType; + auto typedData = vtkAOSDataArrayTemplate< T >::New(); + data.TakeReference( typedData ); + setComponentMetadata( Wrapper< ArrayType >::cast( wrapper ), + typedData ); + } ); + first = false; + numDims = wrapper.numArrayDims(); + } + else + { + // Sanity check + GEOS_ERROR_IF_NE_MSG( + wrapper.numArrayDims(), numDims, + "VTK writer: sanity check failed for " + << field << " (inconsistent array dimensions)" ); + GEOS_ERROR_IF_NE_MSG( + wrapper.numArrayComp(), data->GetNumberOfComponents(), + "VTK writer: sanity check failed for " + << field << " (inconsistent array sizes)" ); + } + } + } ); + } ); + + data->SetNumberOfTuples( numElements ); + data->SetName( field.c_str()); + + + //RESQML Property same for all ranks + string property = uuid::generate_uuid_v4(); + MpiWrapper::broadcast( property, 0 ); + + if( data->GetDataType() == VTK_FLOAT || + data->GetDataType() == VTK_DOUBLE) + { + RESQML2_0_1_NS::ContinuousProperty *contProp1 = + m_outputRepository->createContinuousProperty( + m_subrepresentations[field], property, field, data->GetNumberOfComponents(), + gsoap_eml2_3::eml23__IndexableElement::cells, + gsoap_resqml2_0_1::resqml20__ResqmlUom::m, + gsoap_resqml2_0_1::resqml20__ResqmlPropertyKind::length ); + + contProp1->setTimeSeries( m_timeSeries ); + contProp1->setSingleTimestamp( timestamp ); + + m_property_uuid[field] = contProp1; + } + else + { + RESQML2_NS::DiscreteProperty *discProp1 = + m_outputRepository->createDiscreteProperty( + m_subrepresentations[field], property, field, data->GetNumberOfComponents(), + gsoap_eml2_3::eml23__IndexableElement::cells, + gsoap_resqml2_0_1::resqml20__ResqmlPropertyKind::length); + + discProp1->setTimeSeries( m_timeSeries ); + discProp1->setSingleTimestamp( timestamp ); + + m_property_uuid[field] = discProp1; + } + + globalIndex maxCount = + m_subrepresentations[field]->getElementCountOfPatch( 0 ); + + + if( data->GetNumberOfComponents() == 1 ) // scalar data + { + if( data->GetDataType() == VTK_DOUBLE ) + { + m_property_uuid[field]->pushBackHdf5Array1dOfValues( + COMMON_NS::AbstractObject::numericalDatatypeEnum::DOUBLE, + maxCount ); + } + else if( data->GetDataType() == VTK_FLOAT ) + { + m_property_uuid[field]->pushBackHdf5Array1dOfValues( + COMMON_NS::AbstractObject::numericalDatatypeEnum::FLOAT, + maxCount ); + } + else if( data->GetDataType() == VTK_INT ) + { + m_property_uuid[field]->pushBackHdf5Array1dOfValues( + COMMON_NS::AbstractObject::numericalDatatypeEnum::INT32, + maxCount ); + } + else if( data->GetDataType() == VTK_LONG ) + { + #if VTK_SIZEOF_LONG == 4 + m_property_uuid[field]->pushBackHdf5Array1dOfValues( + COMMON_NS::AbstractObject::numericalDatatypeEnum::INT32, + maxCount ); + #elif VTK_SIZEOF_LONG == 8 + m_property_uuid[field]->pushBackHdf5Array1dOfValues( + COMMON_NS::AbstractObject::numericalDatatypeEnum::INT64, + maxCount ); + #endif + } + else if( data->GetDataType() == VTK_LONG_LONG) + { + m_property_uuid[field]->pushBackHdf5Array1dOfValues( + COMMON_NS::AbstractObject::numericalDatatypeEnum::INT64, + maxCount ); + } + else + { + GEOS_LOG_RANK_0(GEOS_FMT("data type {} for property {} not handled yet", data->GetDataTypeAsString(), data->GetName())); + } + } + else // numDims >= 2 vectorial data + { + if( data->GetDataType() == VTK_DOUBLE ) + { + m_property_uuid[field]->pushBackHdf5Array2dOfValues( + COMMON_NS::AbstractObject::numericalDatatypeEnum::DOUBLE, + data->GetNumberOfComponents(), maxCount ); + } + else if( data->GetDataType() == VTK_FLOAT ) + { + m_property_uuid[field]->pushBackHdf5Array2dOfValues( + COMMON_NS::AbstractObject::numericalDatatypeEnum::FLOAT, + data->GetNumberOfComponents(), maxCount ); + } + else if( data->GetDataType() == VTK_INT ) + { + m_property_uuid[field]->pushBackHdf5Array2dOfValues( + COMMON_NS::AbstractObject::numericalDatatypeEnum::INT32, + data->GetNumberOfComponents(), maxCount ); + } + else if( data->GetDataType() == VTK_LONG ) + { + #if VTK_SIZEOF_LONG == 4 + m_property_uuid[field]->pushBackHdf5Array2dOfValues( + COMMON_NS::AbstractObject::numericalDatatypeEnum::INT32, + data->GetNumberOfComponents(), maxCount ); + #elif VTK_SIZEOF_LONG == 8 + m_property_uuid[field]->pushBackHdf5Array2dOfValues( + COMMON_NS::AbstractObject::numericalDatatypeEnum::INT64, + data->GetNumberOfComponents(), maxCount ); + #endif + } + else if( data->GetDataType() == VTK_LONG_LONG) + { + m_property_uuid[field]->pushBackHdf5Array2dOfValues( + COMMON_NS::AbstractObject::numericalDatatypeEnum::INT64, + data->GetNumberOfComponents(), maxCount ); + } + else + { + GEOS_LOG_RANK_0(GEOS_FMT("data type {} for property {} not handled yet", data->GetDataTypeAsString(), data->GetName())); + } + } + + // 2. Fill data buffer for each rank + localIndex offset = 0; + elemManager.forElementRegions< CellElementRegion >( + [&]( CellElementRegion const & region ) { + region.forElementSubRegions( + [&]( ElementSubRegionBase const & elementSubRegion ) { + if( elementSubRegion.hasWrapper( field )) + { + arrayView1d< integer const > const & elemGhostRank = + elementSubRegion.ghostRank(); + WrapperBase const & wrapper = elementSubRegion.getWrapperBase( field ); + types::dispatch( + types::StandardArrays{}, wrapper.getTypeId(), true, + [&]( auto array ) { + using ArrayType = decltype(array); + using T = typename ArrayType::ValueType; + vtkAOSDataArrayTemplate< T > *typedData = + vtkAOSDataArrayTemplate< T >::FastDownCast( + data.GetPointer()); + auto const sourceArray = Wrapper< ArrayType >::cast( wrapper ) + .reference() + .toViewConst(); + + forAll< parallelHostPolicy >( + sourceArray.size( 0 ), + [sourceArray, offset, typedData, + &elemGhostRank]( localIndex const i ) { + if( elemGhostRank[i] < 0 ) + { + LvArray::forValuesInSlice( + sourceArray[i], + [&, compIndex = 0]( T const & value ) mutable { + typedData->SetTypedComponent( + offset + i, compIndex++, value ); + } ); + } + } ); + } ); + offset += (elementSubRegion.size() - elementSubRegion.getNumberOfGhosts()); + } + } ); + } ); + + // 3. Write data buffer in each rank + auto dataSizes = m_countPerProp[field]; + int const rankOffset = + std::accumulate( dataSizes.begin(), std::next( dataSizes.begin(), MpiWrapper::commRank()), 0 ); + + if( data->GetNumberOfComponents() == 1 ) + { + + if( data->GetDataType() == VTK_DOUBLE ) + { + m_property_uuid[field]->setValuesOfDoubleHdf5Array1dOfValues( + static_cast< double * >(data->GetVoidPointer( 0 )), + data->GetNumberOfTuples(), + rankOffset ); + } + else if( data->GetDataType() == VTK_FLOAT ) + { + m_property_uuid[field]->setValuesOfFloatHdf5Array1dOfValues( + static_cast< float * >(data->GetVoidPointer( 0 )), + data->GetNumberOfTuples(), + rankOffset ); + } + else if( data->GetDataType() == VTK_INT ) + { + m_property_uuid[field]->setValuesOfInt32Hdf5Array1dOfValues( + static_cast< int * >(data->GetVoidPointer( 0 )), + data->GetNumberOfTuples(), + rankOffset ); + } + else if( data->GetDataType() == VTK_LONG ) + { + #if VTK_SIZEOF_LONG == 4 + m_property_uuid[field]->setValuesOfInt32Hdf5Array1dOfValues( + static_cast< long * >(data->GetVoidPointer( 0 )), + data->GetNumberOfTuples(), + rankOffset ); + #elif VTK_SIZEOF_LONG == 8 + m_property_uuid[field]->setValuesOfInt64Hdf5Array1dOfValues( + static_cast< long * >(data->GetVoidPointer( 0 )), + data->GetNumberOfTuples(), + rankOffset ); + #endif + } + else if( data->GetDataType() == VTK_LONG_LONG) + { + m_property_uuid[field]->setValuesOfInt64Hdf5Array1dOfValues( + static_cast< int64_t * >(data->GetVoidPointer( 0 )), + data->GetNumberOfTuples(), + rankOffset ); + } + } + else + { + if( data->GetDataType() == VTK_DOUBLE ) + { + m_property_uuid[field]->setValuesOfDoubleHdf5Array2dOfValues( + static_cast< double * >(data->GetVoidPointer( 0 )), + data->GetNumberOfComponents(), + data->GetNumberOfTuples(), + 0, + rankOffset ); + } + else if( data->GetDataType() == VTK_FLOAT ) + { + m_property_uuid[field]->setValuesOfFloatHdf5Array2dOfValues( + static_cast< float * >(data->GetVoidPointer( 0 )), + data->GetNumberOfComponents(), + data->GetNumberOfTuples(), + 0, + rankOffset ); + } + else if( data->GetDataType() == VTK_INT ) + { + m_property_uuid[field]->setValuesOfInt32Hdf5Array2dOfValues( + static_cast< int * >(data->GetVoidPointer( 0 )), + data->GetNumberOfComponents(), + data->GetNumberOfTuples(), + 0, + rankOffset ); + } + else if( data->GetDataType() == VTK_LONG ) + { + #if VTK_SIZEOF_LONG == 4 + m_property_uuid[field]->setValuesOfInt32Hdf5Array2dOfValues( + static_cast< long * >(data->GetVoidPointer( 0 )), + data->GetNumberOfComponents(), + data->GetNumberOfTuples(), + 0, + rankOffset ); + #elif VTK_SIZEOF_LONG == 8 + m_property_uuid[field]->setValuesOfInt64Hdf5Array2dOfValues( + static_cast< long * >(data->GetVoidPointer( 0 )), + data->GetNumberOfComponents(), + data->GetNumberOfTuples(), + 0, + rankOffset ); + #endif + } + else if( data->GetDataType() == VTK_LONG_LONG) + { + m_property_uuid[field]->setValuesOfInt64Hdf5Array2dOfValues( + static_cast< int64_t * >(data->GetVoidPointer( 0 )), + data->GetNumberOfComponents(), + data->GetNumberOfTuples(), + 0, + rankOffset ); + } + } + } + } ); + } ); +} + +} // namespace geos \ No newline at end of file diff --git a/src/RESQMLWriterInterface.hpp b/src/RESQMLWriterInterface.hpp new file mode 100644 index 0000000..5cabff5 --- /dev/null +++ b/src/RESQMLWriterInterface.hpp @@ -0,0 +1,160 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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. + * ------------------------------------------------------------------------------------------------------------ + */ + +#ifndef GEOS_EXTERNALCOMPONENTS_RESQML_RESQMLWRITERINTERFACE_HPP_ +#define GEOS_EXTERNALCOMPONENTS_RESQML_RESQMLWRITERINTERFACE_HPP_ + +#include "fileIO/vtk/VTKPolyDataWriterInterface.hpp" +#include "dataRepository/Group.hpp" + +#include "fesapi/common/EpcDocument.h" +#include "fesapi/common/DataObjectRepository.h" + + +#include "fesapi/resqml2_0_1/UnstructuredGridRepresentation.h" +#include "fesapi/resqml2/SubRepresentation.h" + +#include + +#include +#include +namespace geos +{ + +// using namespace dataRepository; + +class RESQMLWriterInterface : private vtk::VTKPolyDataWriterInterface +{ +public: + /** + * @brief Constructor + * @param[in] outputName folder name in which all the epc and h5 files will be written + */ + explicit RESQMLWriterInterface( string outputName ); + + + /** + * @brief Sets the plot level + * @details All fields have an associated plot level. If it is <= to \p plotLevel, + * the field will be output. + * @param[in] plotLevel the limit plotlevel + */ + void setPlotLevel( integer plotLevel ) + { + m_plotLevel = dataRepository::toPlotLevel( plotLevel ); + } + + /** + * @brief Set the output directory name + * @param[in] outputDir global output directory location + * @param[in] outputName name of the VTK output subdirectory and corresponding PVD file + */ + void setOutputLocation( string outputDir, string outputName ) + { + m_outputDir = std::move( outputDir ); + m_outputName = std::move( outputName ); + } + + /** + * @brief Set the flag to decide whether we only plot the fields specified by fieldNames, or if we also plot fields based on plotLevel + * @param[in] onlyPlotSpecifiedFieldNames the flag + */ + void setOnlyPlotSpecifiedFieldNamesFlag( integer const onlyPlotSpecifiedFieldNames ) + { + m_onlyPlotSpecifiedFieldNames = onlyPlotSpecifiedFieldNames; + } + + /** + * @brief Set the names of the fields to output + * @param[in] fieldNames the fields to output + */ + void setFieldNames( arrayView1d< string const > const & fieldNames ) + { + this->m_fieldNames.insert( fieldNames.begin(), fieldNames.end() ); + } + + /** + * @brief Set the parameters to create the Parent Representation object + * @param[in] parent A tuple of strings (UUID, Name) + */ + void setParentRepresentation( const std::tuple< string, string > & parent ) + { + m_parent = m_outputRepository->createPartial< RESQML2_0_1_NS::UnstructuredGridRepresentation >( std::get< 0 >( parent ), std::get< 1 >( parent )); + } + + /** + * @brief Main method of this class. Write all the files for one time step. + * @param[in] time the time step to be written + * @param[in] cycle the current cycle of event + * @param[in] domain the computation domain of this rank + */ + void write( real64 time, integer cycle, DomainPartition const & domain ); + + /** + * @brief Generates the output .epc and .hdf5 files from the data in the output repository + */ + void generateOutput() const; + + /** + * @brief Initialize HDFProxy to write numerical data + */ + void initializeOutput(); + + /** + * @brief Generate a subrepresentation to map a property to the initial grid + * @param[in] domain the computation domain of this rank + */ + void generateSubRepresentations( DomainPartition const & domain ); + +private: + + /** + * @brief Generate a subRepresentation for a field + * @param[in] elemManager ElementRegion being written + * @param[in] field field associated to the elements + */ + void generateSubRepresentation( ElementRegionManager const & elemManager, + string const & field ); + +private: + + /// Output repository of RESQML data objects + COMMON_NS::DataObjectRepository * m_outputRepository; + + /// Property kind of output properties + RESQML2_0_1_NS::PropertyKind * m_propertyKind; + + /// Time Series object to link to the output properties + EML2_NS::TimeSeries * m_timeSeries; + + /// Parent representation of output properties + RESQML2_0_1_NS::UnstructuredGridRepresentation * m_parent; + + /// Index the properties to reuse them accross the multiple regions subgroups + std::map< string, RESQML2_NS::AbstractValuesProperty * > m_property_uuid; + + /// Permutation vector for each field + std::map< string, array1d< int > > m_countPerProp; + + /// Regular fields to output + std::unordered_set< string > m_regularFields; + + /// Keep track of subrepresentation throw the time: field name -> Subrep + std::map< string, RESQML2_NS::SubRepresentation * > m_subrepresentations; + +}; + +} + +#endif // GEOS_EXTERNALCOMPONENTS_RESQML_RESQMLWRITERINTERFACE_HPP_ \ No newline at end of file diff --git a/src/fesapi.patch b/src/fesapi.patch new file mode 100644 index 0000000..7301045 --- /dev/null +++ b/src/fesapi.patch @@ -0,0 +1,11 @@ +--- src/common/DataObjectRepository.h 2023-07-24 17:46:49.000000000 +0200 ++++ src/common/DataObjectRepository.h.patch 2023-07-24 21:35:30.775018191 +0200 +@@ -758,7 +758,7 @@ + * @returns A pointer to the new EPC external part reference. + */ + template +- NumericalValueBase* createEpcExternalPartReference(const std::string & guid, const std::string & title) ++ NumericalValueBase* createEpcExternalPartReference(const std::string & guid, const std::string & ) + { + NumericalValueBase* result = new NumericalValueBase(getGsoapContext(), guid); + addDataObject(result); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..8f3e23e --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,30 @@ +# +# Specify list of tests +# + +set( dependencyList gtest FesapiCpp ) + +if ( GEOSX_BUILD_SHARED_LIBS ) + set (dependencyList ${dependencyList} geosx_core) +else() + set (dependencyList ${dependencyList} ${geosx_core_libs} ) +endif() + +set(myNewComponentTests + testRESQMLImport.cpp + ) + +# +# Add gtest C++ based tests +# +foreach(test ${myNewComponentTests}) + get_filename_component( test_name ${test} NAME_WE ) + blt_add_executable( NAME ${test_name} + SOURCES ${test} + OUTPUT_DIR ${TEST_OUTPUT_DIRECTORY} + DEPENDS_ON ${dependencyList} ) + + blt_add_test( NAME ${test_name} + COMMAND ${test_name} + ) +endforeach() diff --git a/tests/testRESQMLImport.cpp b/tests/testRESQMLImport.cpp new file mode 100644 index 0000000..ad59120 --- /dev/null +++ b/tests/testRESQMLImport.cpp @@ -0,0 +1,129 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 "codingUtilities/UnitTestUtilities.hpp" +#include "dataRepository/xmlWrapper.hpp" +#include "mainInterface/GeosxState.hpp" +#include "mainInterface/initialization.hpp" +#include "mesh/MeshManager.hpp" +#include "mesh/generators/CellBlockManagerABC.hpp" +#include "mesh/generators/CellBlockABC.hpp" + +// special CMake-generated include +#include "tests/meshDirName.hpp" + +// TPL includes +#include +#include + +using namespace geos; +using namespace geos::testing; +using namespace geos::dataRepository; + +void TestRESQMLMeshNode( string const & meshNode ) +{ + xmlWrapper::xmlDocument xmlDocument; + xmlDocument.load_buffer( meshNode.c_str(), meshNode.size() ); + xmlWrapper::xmlNode xmlMeshNode = xmlDocument.child( "Mesh" ); + + conduit::Node node; + Group root( "root", node ); + + MeshManager meshManager( "mesh", &root ); + meshManager.processInputFileRecursive( xmlMeshNode ); + meshManager.postProcessInputRecursive(); + DomainPartition domain( "domain", &root ); + meshManager.generateMeshes( domain ); +} + +template< class V > +void TestMeshImport( string const & meshFilePath, V const & validate ) +{ + string const meshNode = GEOS_FMT( R"()", meshFilePath ); + xmlWrapper::xmlDocument xmlDocument; + xmlDocument.load_buffer( meshNode.c_str(), meshNode.size() ); + xmlWrapper::xmlNode xmlMeshNode = xmlDocument.child( "Mesh" ); + + conduit::Node node; + Group root( "root", node ); + + MeshManager meshManager( "mesh", &root ); + meshManager.processInputFileRecursive( xmlMeshNode ); + meshManager.postProcessInputRecursive(); + DomainPartition domain( "domain", &root ); + meshManager.generateMeshes( domain ); + + validate( domain.getMeshBody( "mesh" ).getGroup< CellBlockManagerABC >( keys::cellManager ) ); +} + +TEST( RESQMLNode, meshName ) +{ + string const meshFilePath = testMeshDir + "/testingPackageCpp.epc"; + string const meshName = "One tetrahedron + prism grid"; + string const meshUUID = "9283cd33-5e52-4110-b7b1-616abde2b303"; + { + string const meshNode = GEOS_FMT( R"()", meshName, meshUUID, meshFilePath ); + TestRESQMLMeshNode( meshNode ); + } + + // { + // string const region1 = "323001d0-468c-41d7-abec-7d12c3c9428b"; + // string const region2 = "f6d23b9c-e45d-4638-9601-ae3b682129a0"; + // string const meshNode = GEOSX_FMT( R"()", meshName, meshUUID, region1, region2, meshFilePath ); + // TestRESQMLMeshNode( meshNode ); + // } + //test avec region: + //test region automatiques + // { + // string const meshNode = GEOSX_FMT( R"()", meshName, meshUUID, meshFilePath ); + // TestRESQMLMeshNode( meshNode ); + // } + +} + +TEST( RESQMLImport, testingPackage ) +{ + auto validate = []( CellBlockManagerABC const & cellBlockManager ) -> void + { + // `testingPackage.epc` is made of 2 elements. + // - Element 0 is a tetrahedron. + // - Element 1 is a prism. + // It contains 7 nodes, 12 edges, 8 faces. + ASSERT_EQ( cellBlockManager.numNodes(), 7 ); + ASSERT_EQ( cellBlockManager.numEdges(), 12 ); + ASSERT_EQ( cellBlockManager.numFaces(), 8 ); + ASSERT_EQ( cellBlockManager.numSubGroups(), 2 ); + SortedArray< localIndex > const & allNodes = cellBlockManager.getNodeSets().at( "all" ); + ASSERT_EQ( allNodes.size(), 7 ); + }; + + string const epc = testMeshDir + "/testingPackageCpp.epc"; + TestMeshImport( epc, validate ); +} + + +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/tests/testingPackageCpp.epc b/tests/testingPackageCpp.epc new file mode 100644 index 0000000000000000000000000000000000000000..09c63bec21370fd57d74fdcaeedd5834a8ee9ead GIT binary patch literal 282972 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 z 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 literal 0 HcmV?d00001