From fcc3389c00ea05a89db238e7fb74a6434aad8c3e Mon Sep 17 00:00:00 2001 From: Randolph Settgast Date: Thu, 1 Aug 2024 15:37:54 -0700 Subject: [PATCH 01/42] change MPI_COMM_GEOSX to MPI_COMM_GEOS everywhere (#3259) --- .../codingUtilities/UnitTestUtilities.hpp | 2 +- src/coreComponents/common/DataTypes.cpp | 4 +- src/coreComponents/common/DataTypes.hpp | 4 +- src/coreComponents/common/MpiWrapper.hpp | 38 +++++++------- .../common/initializeEnvironment.cpp | 14 ++--- .../dataRepository/ConduitRestart.cpp | 2 +- .../dataRepository/Utilities.cpp | 2 +- src/coreComponents/events/EventManager.cpp | 2 +- .../fileIO/Outputs/ChomboIO.cpp | 2 +- .../fileIO/Outputs/OutputBase.cpp | 2 +- .../fileIO/Outputs/SiloOutput.cpp | 6 +-- .../fileIO/Outputs/TimeHistoryOutput.cpp | 14 ++--- src/coreComponents/fileIO/silo/SiloFile.cpp | 46 ++++++++-------- src/coreComponents/fileIO/silo/SiloFile.hpp | 2 +- .../fileIO/timeHistory/HDFHistoryIO.hpp | 4 +- .../fileIO/vtk/VTKPolyDataWriterInterface.cpp | 2 +- .../TwoPointFluxApproximation.cpp | 2 +- .../linearAlgebra/DofManager.cpp | 2 +- .../interfaces/petsc/PetscInterface.cpp | 2 +- .../interfaces/petsc/PetscMatrix.cpp | 2 +- .../interfaces/petsc/PetscPreconditioner.cpp | 4 +- .../interfaces/trilinos/EpetraMatrix.cpp | 4 +- .../interfaces/trilinos/EpetraVector.cpp | 2 +- .../unitTests/testExternalSolvers.cpp | 4 +- .../unitTests/testKrylovSolvers.cpp | 16 +++--- .../linearAlgebra/unitTests/testMatrices.cpp | 28 +++++----- .../linearAlgebra/unitTests/testVectors.cpp | 10 ++-- .../utilities/LAIHelperFunctions.hpp | 14 ++--- .../mainInterface/GeosxState.cpp | 2 +- .../mainInterface/ProblemManager.cpp | 2 +- src/coreComponents/mesh/DomainPartition.cpp | 8 +-- .../mesh/ElementRegionManager.cpp | 2 +- .../mesh/EmbeddedSurfaceNodeManager.cpp | 4 +- src/coreComponents/mesh/ObjectManagerBase.cpp | 8 +-- src/coreComponents/mesh/ParticleManager.cpp | 2 +- src/coreComponents/mesh/ParticleRegion.cpp | 2 +- .../mesh/ParticleSubRegionBase.cpp | 2 +- .../mesh/WellElementSubRegion.cpp | 8 +-- .../mesh/generators/InternalMeshGenerator.cpp | 2 +- .../mesh/generators/VTKMeshGenerator.cpp | 2 +- .../mesh/generators/VTKUtilities.cpp | 18 +++---- .../mesh/generators/WellGeneratorBase.cpp | 2 +- .../mpiCommunications/CommunicationTools.cpp | 20 +++---- .../NeighborCommunicator.cpp | 8 +-- .../NeighborCommunicator.hpp | 2 +- .../mpiCommunications/SpatialPartition.cpp | 16 +++--- .../physicsSolvers/SolverBase.cpp | 8 +-- .../physicsSolvers/SolverBaseKernels.hpp | 6 +-- .../contact/ContactSolverBase.cpp | 2 +- ...lidMechanicsAugmentedLagrangianContact.cpp | 16 +++--- .../SolidMechanicsEmbeddedFractures.cpp | 14 ++--- .../fluidFlow/FlowSolverBase.cpp | 8 +-- .../ReactiveCompositionalMultiphaseOBL.cpp | 4 +- .../CoupledReservoirAndWellsBase.hpp | 4 +- .../multiphysics/HydrofractureSolver.cpp | 6 +-- .../multiphysics/PoromechanicsSolver.hpp | 2 +- ...ePhasePoromechanicsConformingFractures.cpp | 4 +- ...glePhasePoromechanicsEmbeddedFractures.cpp | 4 +- .../simplePDE/PhaseFieldDamageFEM.cpp | 8 +-- .../SolidMechanicsLagrangianFEM.cpp | 12 ++--- .../solidMechanics/SolidMechanicsMPM.cpp | 52 +++++++++---------- .../SolidMechanicsStatistics.cpp | 4 +- .../EmbeddedSurfaceGenerator.cpp | 4 +- ...mbeddedSurfacesParallelSynchronization.cpp | 12 ++--- .../ParallelTopologyChange.cpp | 8 +-- .../surfaceGeneration/SurfaceGenerator.cpp | 2 +- .../isotropic/AcousticWaveEquationSEM.cpp | 6 +-- .../isotropic/ElasticWaveEquationSEM.cpp | 2 +- .../unitTests/fileIOTests/testHDFFile.cpp | 2 +- .../fluidFlowTests/testCompFlowUtils.hpp | 2 +- .../fluidFlowTests/testSingleFlowUtils.hpp | 2 +- .../linearAlgebraTests/testDofManager.cpp | 8 +-- .../testDofManagerUtils.hpp | 2 +- .../testLAIHelperFunctions.cpp | 4 +- .../meshTests/testNeighborCommunicator.cpp | 6 +-- 75 files changed, 280 insertions(+), 280 deletions(-) diff --git a/src/coreComponents/codingUtilities/UnitTestUtilities.hpp b/src/coreComponents/codingUtilities/UnitTestUtilities.hpp index a947b37ac58..3b82f6b0f34 100644 --- a/src/coreComponents/codingUtilities/UnitTestUtilities.hpp +++ b/src/coreComponents/codingUtilities/UnitTestUtilities.hpp @@ -64,7 +64,7 @@ namespace testing template< typename T > T expected( T expectedSerial, std::initializer_list< T > expectedParallel, - MPI_Comm const & comm = MPI_COMM_GEOSX ) + MPI_Comm const & comm = MPI_COMM_GEOS ) { int const mpiSize = MpiWrapper::commSize( comm ); if( mpiSize == 1 ) diff --git a/src/coreComponents/common/DataTypes.cpp b/src/coreComponents/common/DataTypes.cpp index 4672907c1ad..d4b86ea96a7 100644 --- a/src/coreComponents/common/DataTypes.cpp +++ b/src/coreComponents/common/DataTypes.cpp @@ -26,9 +26,9 @@ namespace geos { #ifdef GEOS_USE_MPI -MPI_Comm MPI_COMM_GEOSX; +MPI_Comm MPI_COMM_GEOS; #else -int MPI_COMM_GEOSX = 0; +int MPI_COMM_GEOS = 0; #endif diff --git a/src/coreComponents/common/DataTypes.hpp b/src/coreComponents/common/DataTypes.hpp index f6f19ad383f..70758781410 100644 --- a/src/coreComponents/common/DataTypes.hpp +++ b/src/coreComponents/common/DataTypes.hpp @@ -107,9 +107,9 @@ NEW_TYPE dynamicCast( EXISTING_TYPE & val ) /// Global MPI communicator used by GEOSX. #ifdef GEOS_USE_MPI -extern MPI_Comm MPI_COMM_GEOSX; +extern MPI_Comm MPI_COMM_GEOS; #else -extern int MPI_COMM_GEOSX; +extern int MPI_COMM_GEOS; #endif /** diff --git a/src/coreComponents/common/MpiWrapper.hpp b/src/coreComponents/common/MpiWrapper.hpp index d0ae08dc1af..12633b63632 100644 --- a/src/coreComponents/common/MpiWrapper.hpp +++ b/src/coreComponents/common/MpiWrapper.hpp @@ -139,7 +139,7 @@ struct MpiWrapper */ ///@{ - static void barrier( MPI_Comm const & MPI_PARAM( comm )=MPI_COMM_GEOSX ); + static void barrier( MPI_Comm const & MPI_PARAM( comm )=MPI_COMM_GEOS ); static int cartCoords( MPI_Comm comm, int rank, int maxdims, int coords[] ); @@ -150,9 +150,9 @@ struct MpiWrapper static void commFree( MPI_Comm & comm ); - static int commRank( MPI_Comm const & MPI_PARAM( comm )=MPI_COMM_GEOSX ); + static int commRank( MPI_Comm const & MPI_PARAM( comm )=MPI_COMM_GEOS ); - static int commSize( MPI_Comm const & MPI_PARAM( comm )=MPI_COMM_GEOSX ); + static int commSize( MPI_Comm const & MPI_PARAM( comm )=MPI_COMM_GEOS ); static bool commCompare( MPI_Comm const & comm1, MPI_Comm const & comm2 ); @@ -337,12 +337,12 @@ struct MpiWrapper * @param[out] allValues The values recived from each rank. */ template< typename T > - static void allGather( T const myValue, array1d< T > & allValues, MPI_Comm comm = MPI_COMM_GEOSX ); + static void allGather( T const myValue, array1d< T > & allValues, MPI_Comm comm = MPI_COMM_GEOS ); template< typename T > static int allGather( arrayView1d< T const > const & sendbuf, array1d< T > & recvbuf, - MPI_Comm comm = MPI_COMM_GEOSX ); + MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Strongly typed wrapper around MPI_Allreduce. @@ -354,7 +354,7 @@ struct MpiWrapper * @return The return value of the underlying call to MPI_Allreduce(). */ template< typename T > - static int allReduce( T const * sendbuf, T * recvbuf, int count, MPI_Op op, MPI_Comm comm = MPI_COMM_GEOSX ); + static int allReduce( T const * sendbuf, T * recvbuf, int count, MPI_Op op, MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Convenience wrapper for the MPI_Allreduce function. @@ -365,7 +365,7 @@ struct MpiWrapper * @return The value of reduction across all ranks */ template< typename T > - static T allReduce( T const & value, Reduction const op, MPI_Comm comm = MPI_COMM_GEOSX ); + static T allReduce( T const & value, Reduction const op, MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Convenience wrapper for the MPI_Allreduce function. Version for sequences. @@ -376,7 +376,7 @@ struct MpiWrapper * @param comm The communicator. */ template< typename T > - static void allReduce( Span< T const > src, Span< T > dst, Reduction const op, MPI_Comm comm = MPI_COMM_GEOSX ); + static void allReduce( Span< T const > src, Span< T > dst, Reduction const op, MPI_Comm comm = MPI_COMM_GEOS ); /** @@ -389,7 +389,7 @@ struct MpiWrapper * @return The return value of the underlying call to MPI_Reduce(). */ template< typename T > - static int reduce( T const * sendbuf, T * recvbuf, int count, MPI_Op op, int root, MPI_Comm comm = MPI_COMM_GEOSX ); + static int reduce( T const * sendbuf, T * recvbuf, int count, MPI_Op op, int root, MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Convenience wrapper for the MPI_Reduce function. @@ -400,7 +400,7 @@ struct MpiWrapper * @return The value of reduction (only significant at root) */ template< typename T > - static T reduce( T const & value, Reduction const op, int root, MPI_Comm comm = MPI_COMM_GEOSX ); + static T reduce( T const & value, Reduction const op, int root, MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Convenience wrapper for the MPI_Reduce function. Version for sequences. @@ -411,7 +411,7 @@ struct MpiWrapper * @param comm The communicator. */ template< typename T > - static void reduce( Span< T const > src, Span< T > dst, Reduction const op, int root, MPI_Comm comm = MPI_COMM_GEOSX ); + static void reduce( Span< T const > src, Span< T > dst, Reduction const op, int root, MPI_Comm comm = MPI_COMM_GEOS ); template< typename T > @@ -439,7 +439,7 @@ struct MpiWrapper * @param srcRank The rank that is sending the \p value. */ template< typename T > - static void broadcast( T & value, int srcRank = 0, MPI_Comm comm = MPI_COMM_GEOSX ); + static void broadcast( T & value, int srcRank = 0, MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Strongly typed wrapper around MPI_Gather(). @@ -549,7 +549,7 @@ struct MpiWrapper * @return a pair where first is the prefix sum, second is the full sum */ template< typename U, typename T > - static U prefixSum( T const value, MPI_Comm comm = MPI_COMM_GEOSX ); + static U prefixSum( T const value, MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Convenience function for a MPI_Allreduce using a MPI_SUM operation. @@ -557,7 +557,7 @@ struct MpiWrapper * @return The sum of all \p value across the ranks. */ template< typename T > - static T sum( T const & value, MPI_Comm comm = MPI_COMM_GEOSX ); + static T sum( T const & value, MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Convenience function for a MPI_Allreduce using a MPI_SUM operation. @@ -566,7 +566,7 @@ struct MpiWrapper * @return The sum of all \p value across the ranks. */ template< typename T > - static void sum( Span< T const > src, Span< T > dst, MPI_Comm comm = MPI_COMM_GEOSX ); + static void sum( Span< T const > src, Span< T > dst, MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Convenience function for a MPI_Allreduce using a MPI_MIN operation. @@ -574,7 +574,7 @@ struct MpiWrapper * @return The minimum of all \p value across the ranks. */ template< typename T > - static T min( T const & value, MPI_Comm comm = MPI_COMM_GEOSX ); + static T min( T const & value, MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Convenience function for a MPI_Allreduce using a MPI_MIN operation. @@ -583,7 +583,7 @@ struct MpiWrapper * @return The minimum of all \p value across the ranks. */ template< typename T > - static void min( Span< T const > src, Span< T > dst, MPI_Comm comm = MPI_COMM_GEOSX ); + static void min( Span< T const > src, Span< T > dst, MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Convenience function for a MPI_Allreduce using a MPI_MAX operation. @@ -591,7 +591,7 @@ struct MpiWrapper * @return The maximum of all \p value across the ranks. */ template< typename T > - static T max( T const & value, MPI_Comm comm = MPI_COMM_GEOSX ); + static T max( T const & value, MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Convenience function for a MPI_Allreduce using a MPI_MAX operation. @@ -600,7 +600,7 @@ struct MpiWrapper * @return The maximum of all \p value across the ranks. */ template< typename T > - static void max( Span< T const > src, Span< T > dst, MPI_Comm comm = MPI_COMM_GEOSX ); + static void max( Span< T const > src, Span< T > dst, MPI_Comm comm = MPI_COMM_GEOS ); }; namespace internal diff --git a/src/coreComponents/common/initializeEnvironment.cpp b/src/coreComponents/common/initializeEnvironment.cpp index 4d69cc878fa..61624d55420 100644 --- a/src/coreComponents/common/initializeEnvironment.cpp +++ b/src/coreComponents/common/initializeEnvironment.cpp @@ -65,7 +65,7 @@ namespace geos void setupLogger() { #ifdef GEOS_USE_MPI - logger::InitializeLogger( MPI_COMM_GEOSX ); + logger::InitializeLogger( MPI_COMM_GEOS ); #else logger::InitializeLogger(); #endif @@ -126,19 +126,19 @@ void setupMPI( int argc, char * argv[] ) MpiWrapper::init( &argc, &argv ); } - MPI_COMM_GEOSX = MpiWrapper::commDup( MPI_COMM_WORLD ); + MPI_COMM_GEOS = MpiWrapper::commDup( MPI_COMM_WORLD ); - if( MpiWrapper::commRank( MPI_COMM_GEOSX ) == 0 ) + if( MpiWrapper::commRank( MPI_COMM_GEOS ) == 0 ) { // Can't use logging macros prior to logger init - std::cout << "Num ranks: " << MpiWrapper::commSize( MPI_COMM_GEOSX ) << std::endl; + std::cout << "Num ranks: " << MpiWrapper::commSize( MPI_COMM_GEOS ) << std::endl; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void finalizeMPI() { - MpiWrapper::commFree( MPI_COMM_GEOSX ); + MpiWrapper::commFree( MPI_COMM_GEOS ); MpiWrapper::finalize(); } @@ -154,7 +154,7 @@ void setupCaliper( cali::ConfigManager & caliperManager, #if defined( GEOS_USE_ADIAK ) #if defined( GEOS_USE_MPI ) - adiak::init( &MPI_COMM_GEOSX ); + adiak::init( &MPI_COMM_GEOS ); #else adiak::init( nullptr ); #endif @@ -289,7 +289,7 @@ static void addUmpireHighWaterMarks() string allocatorNameMinChars = string( MAX_NAME_LENGTH, '\0' ); // Make sure that each rank is looking at the same allocator. - MpiWrapper::allReduce( allocatorNameFixedSize.c_str(), &allocatorNameMinChars.front(), MAX_NAME_LENGTH, MPI_MIN, MPI_COMM_GEOSX ); + MpiWrapper::allReduce( allocatorNameFixedSize.c_str(), &allocatorNameMinChars.front(), MAX_NAME_LENGTH, MPI_MIN, MPI_COMM_GEOS ); if( allocatorNameFixedSize != allocatorNameMinChars ) { GEOS_WARNING( "Not all ranks have an allocator named " << allocatorNameFixedSize << ", cannot compute high water mark." ); diff --git a/src/coreComponents/dataRepository/ConduitRestart.cpp b/src/coreComponents/dataRepository/ConduitRestart.cpp index 64e5e9e2bb3..c94a1724e52 100644 --- a/src/coreComponents/dataRepository/ConduitRestart.cpp +++ b/src/coreComponents/dataRepository/ConduitRestart.cpp @@ -52,7 +52,7 @@ string writeRootFile( conduit::Node & root, string const & rootPath ) conduit::relay::io::save( root, completeRootPath + ".root", "hdf5" ); } - MpiWrapper::barrier( MPI_COMM_GEOSX ); + MpiWrapper::barrier( MPI_COMM_GEOS ); return GEOS_FMT( "{}/rank_{:07}.hdf5", completeRootPath.data(), MpiWrapper::commRank() ); } diff --git a/src/coreComponents/dataRepository/Utilities.cpp b/src/coreComponents/dataRepository/Utilities.cpp index 6908a4b4525..d8c6d9e1c34 100644 --- a/src/coreComponents/dataRepository/Utilities.cpp +++ b/src/coreComponents/dataRepository/Utilities.cpp @@ -77,7 +77,7 @@ void printMemoryAllocation( Group const & group, integer const indent, real64 co globalAllocations.data(), numValues, 0, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); // reduce data across ranks (min, max, sum) if( MpiWrapper::commRank()==0 ) diff --git a/src/coreComponents/events/EventManager.cpp b/src/coreComponents/events/EventManager.cpp index 5eb161801ca..6dc12b5624d 100644 --- a/src/coreComponents/events/EventManager.cpp +++ b/src/coreComponents/events/EventManager.cpp @@ -166,7 +166,7 @@ bool EventManager::run( DomainPartition & domain ) #ifdef GEOS_USE_MPI // Find the min dt across processes real64 dt_global; - MPI_Allreduce( &m_dt, &dt_global, 1, MPI_DOUBLE, MPI_MIN, MPI_COMM_GEOSX ); + MPI_Allreduce( &m_dt, &dt_global, 1, MPI_DOUBLE, MPI_MIN, MPI_COMM_GEOS ); m_dt = dt_global; #endif } diff --git a/src/coreComponents/fileIO/Outputs/ChomboIO.cpp b/src/coreComponents/fileIO/Outputs/ChomboIO.cpp index bc3de58385f..0923d603e4c 100644 --- a/src/coreComponents/fileIO/Outputs/ChomboIO.cpp +++ b/src/coreComponents/fileIO/Outputs/ChomboIO.cpp @@ -88,7 +88,7 @@ bool ChomboIO::execute( real64 const GEOS_UNUSED_PARAM( time_n ), GEOS_LOG_LEVEL_RANK_0( 1, "Initializing chombo coupling" ); - m_coupler = new ChomboCoupler( MPI_COMM_GEOSX, m_outputPath, m_inputPath, domain.getMeshBody( 0 ).getBaseDiscretization() ); + m_coupler = new ChomboCoupler( MPI_COMM_GEOS, m_outputPath, m_inputPath, domain.getMeshBody( 0 ).getBaseDiscretization() ); } diff --git a/src/coreComponents/fileIO/Outputs/OutputBase.cpp b/src/coreComponents/fileIO/Outputs/OutputBase.cpp index 15f170e4fca..a09086396f4 100644 --- a/src/coreComponents/fileIO/Outputs/OutputBase.cpp +++ b/src/coreComponents/fileIO/Outputs/OutputBase.cpp @@ -79,7 +79,7 @@ void OutputBase::setupDirectoryStructure() { string childDirectory = m_childDirectory; - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); if( rank == 0 ) { if( !childDirectory.empty()) diff --git a/src/coreComponents/fileIO/Outputs/SiloOutput.cpp b/src/coreComponents/fileIO/Outputs/SiloOutput.cpp index 4d257cedf6a..1ade6b9955c 100644 --- a/src/coreComponents/fileIO/Outputs/SiloOutput.cpp +++ b/src/coreComponents/fileIO/Outputs/SiloOutput.cpp @@ -124,9 +124,9 @@ bool SiloOutput::execute( real64 const time_n, SiloFile silo; - int const size = MpiWrapper::commSize( MPI_COMM_GEOSX ); - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); - MpiWrapper::barrier( MPI_COMM_GEOSX ); + int const size = MpiWrapper::commSize( MPI_COMM_GEOS ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); + MpiWrapper::barrier( MPI_COMM_GEOS ); integer const numFiles = parallelThreads() == 0 ? size : parallelThreads(); diff --git a/src/coreComponents/fileIO/Outputs/TimeHistoryOutput.cpp b/src/coreComponents/fileIO/Outputs/TimeHistoryOutput.cpp index ecbd5a3ad8f..a99528b0057 100644 --- a/src/coreComponents/fileIO/Outputs/TimeHistoryOutput.cpp +++ b/src/coreComponents/fileIO/Outputs/TimeHistoryOutput.cpp @@ -89,12 +89,12 @@ void TimeHistoryOutput::initCollectorParallel( DomainPartition const & domain, H }; registerBufferCalls( collector ); - MpiWrapper::barrier( MPI_COMM_GEOSX ); + MpiWrapper::barrier( MPI_COMM_GEOS ); for( localIndex metaIdx = 0; metaIdx < collector.numMetaDataCollectors(); ++metaIdx ) { registerBufferCalls( collector.getMetaDataCollector( metaIdx ), collector.getTargetName() + " " ); - MpiWrapper::barrier( MPI_COMM_GEOSX ); + MpiWrapper::barrier( MPI_COMM_GEOS ); } // Do the time output last so its at the end of the m_io list, since writes are parallel @@ -111,7 +111,7 @@ void TimeHistoryOutput::initCollectorParallel( DomainPartition const & domain, H m_io.back()->init( !freshInit ); } - MpiWrapper::barrier( MPI_COMM_GEOSX ); + MpiWrapper::barrier( MPI_COMM_GEOS ); } void TimeHistoryOutput::initializePostInitialConditionsPostSubGroups() @@ -119,13 +119,13 @@ void TimeHistoryOutput::initializePostInitialConditionsPostSubGroups() { // check whether to truncate or append to the file up front so we don't have to bother during later accesses string const outputDirectory = getOutputDirectory(); - if( MpiWrapper::commRank( MPI_COMM_GEOSX ) == 0 ) + if( MpiWrapper::commRank( MPI_COMM_GEOS ) == 0 ) { makeDirsForPath( outputDirectory ); } - MpiWrapper::barrier( MPI_COMM_GEOSX ); + MpiWrapper::barrier( MPI_COMM_GEOS ); string const outputFile = joinPath( outputDirectory, m_filename ); - HDFFile( outputFile, (m_recordCount == 0), true, MPI_COMM_GEOSX ); + HDFFile( outputFile, (m_recordCount == 0), true, MPI_COMM_GEOS ); } DomainPartition & domain = this->getGroupByPath< DomainPartition >( "/Problem/domain" ); @@ -182,7 +182,7 @@ void TimeHistoryOutput::cleanup( real64 const time_n, DomainPartition & domain ) { execute( time_n, 0.0, cycleNumber, eventCounter, eventProgress, domain ); - MpiWrapper::barrier( MPI_COMM_GEOSX ); + MpiWrapper::barrier( MPI_COMM_GEOS ); // remove any unused trailing space reserved to write additional histories for( auto & th_io : m_io ) { diff --git a/src/coreComponents/fileIO/silo/SiloFile.cpp b/src/coreComponents/fileIO/silo/SiloFile.cpp index cb2882bb36f..73c5533c44e 100644 --- a/src/coreComponents/fileIO/silo/SiloFile.cpp +++ b/src/coreComponents/fileIO/silo/SiloFile.cpp @@ -283,7 +283,7 @@ void SiloFile::makeSiloDirectories() int rank=0; #ifdef GEOS_USE_MPI - MPI_Comm_rank( MPI_COMM_GEOSX, &rank ); + MPI_Comm_rank( MPI_COMM_GEOS, &rank ); #endif if( rank==0 ) @@ -305,12 +305,12 @@ void SiloFile::initialize( int const MPI_PARAM( numGroups ) ) #else m_numGroups = 1; #endif - MpiWrapper::bcast( &m_numGroups, 1, 0, MPI_COMM_GEOSX ); -// MPI_Bcast( const_cast(&m_driver), 1, MPI_INT, 0, MPI_COMM_GEOSX); + MpiWrapper::bcast( &m_numGroups, 1, 0, MPI_COMM_GEOS ); +// MPI_Bcast( const_cast(&m_driver), 1, MPI_INT, 0, MPI_COMM_GEOS); // Initialize PMPIO, pass a pointer to the driver type as the user data. m_baton = PMPIO_Init( m_numGroups, PMPIO_WRITE, - MPI_COMM_GEOSX, + MPI_COMM_GEOS, 1, PMPIO_DefaultCreate, PMPIO_DefaultOpen, @@ -348,7 +348,7 @@ void SiloFile::waitForBatonWrite( int const domainNumber, int rank = 0; #ifdef GEOS_USE_MPI - MPI_Comm_rank( MPI_COMM_GEOSX, &rank ); + MPI_Comm_rank( MPI_COMM_GEOS, &rank ); #endif int const groupRank = PMPIO_GroupRank( m_baton, rank ); @@ -382,7 +382,7 @@ void SiloFile::waitForBaton( int const domainNumber, string const & restartFileN int rank = 0; #ifdef GEOS_USE_MPI - MPI_Comm_rank( MPI_COMM_GEOSX, &rank ); + MPI_Comm_rank( MPI_COMM_GEOS, &rank ); #endif int const groupRank = PMPIO_GroupRank( m_baton, rank ); @@ -416,7 +416,7 @@ void SiloFile::handOffBaton() int rank = 0; #ifdef GEOS_USE_MPI - MPI_Comm_rank( MPI_COMM_GEOSX, &rank ); + MPI_Comm_rank( MPI_COMM_GEOS, &rank ); #endif if( rank==0 ) { @@ -578,7 +578,7 @@ void SiloFile::writeMeshObject( string const & meshName, // write multimesh object int rank = 0; #ifdef GEOS_USE_MPI - MPI_Comm_rank( MPI_COMM_GEOSX, &rank ); + MPI_Comm_rank( MPI_COMM_GEOS, &rank ); #endif if( rank == 0 ) { @@ -653,7 +653,7 @@ void SiloFile::writeBeamMesh( string const & meshName, { int rank = 0; #ifdef GEOS_USE_MPI - MPI_Comm_rank( MPI_COMM_GEOSX, &rank ); + MPI_Comm_rank( MPI_COMM_GEOS, &rank ); #endif if( rank == 0 ) { @@ -686,7 +686,7 @@ void SiloFile::writePointMesh( string const & meshName, { int rank = 0; #ifdef GEOS_USE_MPI - MPI_Comm_rank( MPI_COMM_GEOSX, &rank ); + MPI_Comm_rank( MPI_COMM_GEOS, &rank ); #endif if( rank == 0 ) { @@ -814,12 +814,12 @@ void SiloFile::writeMaterialMapsFullStorage( ElementRegionBase const & elemRegio // write multimesh object int rank = 0; #ifdef GEOS_USE_MPI - MPI_Comm_rank( MPI_COMM_GEOSX, &rank ); + MPI_Comm_rank( MPI_COMM_GEOS, &rank ); #endif if( rank == 0 ) { - int const size = MpiWrapper::commSize( MPI_COMM_GEOSX ); + int const size = MpiWrapper::commSize( MPI_COMM_GEOS ); array1d< string > vBlockNames( size ); std::vector< char * > BlockNames( size ); @@ -983,8 +983,8 @@ void SiloFile::writeMaterialVarDefinition( string const & subDir, void SiloFile::clearEmptiesFromMultiObjects( int const cycleNum ) { - int const size = MpiWrapper::commSize( MPI_COMM_GEOSX ); - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const size = MpiWrapper::commSize( MPI_COMM_GEOS ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); string sendbufferVars; string sendbufferMesh; @@ -1015,7 +1015,7 @@ void SiloFile::clearEmptiesFromMultiObjects( int const cycleNum ) integer_array rcounts( size ); integer_array displs( size ); - MpiWrapper::gather( &sizeOfSendBufferVars, 1, rcounts.data(), 1, 0, MPI_COMM_GEOSX ); + MpiWrapper::gather( &sizeOfSendBufferVars, 1, rcounts.data(), 1, 0, MPI_COMM_GEOS ); int sizeOfReceiveBuffer = 0; displs[0] = 0; @@ -1032,10 +1032,10 @@ void SiloFile::clearEmptiesFromMultiObjects( int const cycleNum ) rcounts.data(), displs.data(), 0, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); - MpiWrapper::gather( &sizeOfSendBufferMesh, 1, rcounts.data(), 1, 0, MPI_COMM_GEOSX ); + MpiWrapper::gather( &sizeOfSendBufferMesh, 1, rcounts.data(), 1, 0, MPI_COMM_GEOS ); int sizeOfReceiveBufferMesh = 0; displs[0] = 0; @@ -1052,7 +1052,7 @@ void SiloFile::clearEmptiesFromMultiObjects( int const cycleNum ) rcounts.data(), displs.data(), 0, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); @@ -2112,7 +2112,7 @@ void SiloFile::writeMultiXXXX( const DBObjectType type, int size = 1; #ifdef GEOS_USE_MPI - MPI_Comm_size( MPI_COMM_GEOSX, &size ); + MPI_Comm_size( MPI_COMM_GEOS, &size ); #endif string_array vBlockNames( size ); @@ -2260,7 +2260,7 @@ void SiloFile::writeDataField( string const & meshName, // write multimesh object int rank = 0; #ifdef GEOS_USE_MPI - MPI_Comm_rank( MPI_COMM_GEOSX, &rank ); + MPI_Comm_rank( MPI_COMM_GEOS, &rank ); #endif if( rank == 0 ) { @@ -2529,7 +2529,7 @@ void SiloFile::writeDataField( string const & meshName, // write multimesh object int rank = 0; #ifdef GEOS_USE_MPI - MPI_Comm_rank( MPI_COMM_GEOSX, &rank ); + MPI_Comm_rank( MPI_COMM_GEOS, &rank ); #endif if( rank == 0 ) { @@ -2817,7 +2817,7 @@ void SiloFile::writeMaterialDataField( string const & meshName, // write multimesh object int rank = 0; #ifdef GEOS_USE_MPI - MPI_Comm_rank( MPI_COMM_GEOSX, &rank ); + MPI_Comm_rank( MPI_COMM_GEOS, &rank ); #endif if( rank == 0 ) { @@ -3127,7 +3127,7 @@ void SiloFile::writeStressVarDefinition( string const & MatDir ) void SiloFile::writeVectorVarDefinition( string const & fieldName, string const & subDirectory ) { - if( MpiWrapper::commRank( MPI_COMM_GEOSX ) == 0 ) + if( MpiWrapper::commRank( MPI_COMM_GEOS ) == 0 ) { DBSetDir( m_dbBaseFilePtr, subDirectory.c_str() ); DBtoc * const siloTOC = DBGetToc ( m_dbBaseFilePtr ); diff --git a/src/coreComponents/fileIO/silo/SiloFile.hpp b/src/coreComponents/fileIO/silo/SiloFile.hpp index bd85ff8462a..21b7c40d916 100644 --- a/src/coreComponents/fileIO/silo/SiloFile.hpp +++ b/src/coreComponents/fileIO/silo/SiloFile.hpp @@ -122,7 +122,7 @@ class SiloFile */ void makeSubDirectory( string const & subdir, string const & rootdir ) { - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); // char dirname[100]; if( rank == 0 ) diff --git a/src/coreComponents/fileIO/timeHistory/HDFHistoryIO.hpp b/src/coreComponents/fileIO/timeHistory/HDFHistoryIO.hpp index 6b873f20427..9a2b70c2def 100644 --- a/src/coreComponents/fileIO/timeHistory/HDFHistoryIO.hpp +++ b/src/coreComponents/fileIO/timeHistory/HDFHistoryIO.hpp @@ -53,7 +53,7 @@ class HDFHistoryIO : public BufferedHistoryIO localIndex writeHead = 0, localIndex initAlloc = 1, localIndex overallocMultiple = 2, - MPI_Comm comm = MPI_COMM_GEOSX ); + MPI_Comm comm = MPI_COMM_GEOS ); /** * @brief Constructor @@ -69,7 +69,7 @@ class HDFHistoryIO : public BufferedHistoryIO localIndex writeHead = 0, localIndex initAlloc = 1, localIndex overallocMultiple = 2, - MPI_Comm comm = MPI_COMM_GEOSX ): + MPI_Comm comm = MPI_COMM_GEOS ): HDFHistoryIO( filename, spec.getRank(), spec.getDims(), diff --git a/src/coreComponents/fileIO/vtk/VTKPolyDataWriterInterface.cpp b/src/coreComponents/fileIO/vtk/VTKPolyDataWriterInterface.cpp index f4c8b0ff21d..29df130fb63 100644 --- a/src/coreComponents/fileIO/vtk/VTKPolyDataWriterInterface.cpp +++ b/src/coreComponents/fileIO/vtk/VTKPolyDataWriterInterface.cpp @@ -1306,7 +1306,7 @@ void VTKPolyDataWriterInterface::write( real64 const time, { makeDirsForPath( stepSubDirFull ); } - MpiWrapper::barrier( MPI_COMM_GEOSX ); + MpiWrapper::barrier( MPI_COMM_GEOS ); // loop over all mesh levels and mesh bodies domain.forMeshBodies( [&]( MeshBody const & meshBody ) diff --git a/src/coreComponents/finiteVolume/TwoPointFluxApproximation.cpp b/src/coreComponents/finiteVolume/TwoPointFluxApproximation.cpp index 1b85d4f67a9..d2a03d3c0f7 100644 --- a/src/coreComponents/finiteVolume/TwoPointFluxApproximation.cpp +++ b/src/coreComponents/finiteVolume/TwoPointFluxApproximation.cpp @@ -955,7 +955,7 @@ void TwoPointFluxApproximation::computeAquiferStencil( DomainPartition & domain, globalSumFaceAreas.data(), localSumFaceAreas.size(), MpiWrapper::getMpiOp( MpiWrapper::Reduction::Sum ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); // Step 3: compute the face area fraction for each connection, and insert into boundary stencil diff --git a/src/coreComponents/linearAlgebra/DofManager.cpp b/src/coreComponents/linearAlgebra/DofManager.cpp index 34b0855bf88..9e0cbe78f8d 100644 --- a/src/coreComponents/linearAlgebra/DofManager.cpp +++ b/src/coreComponents/linearAlgebra/DofManager.cpp @@ -1790,7 +1790,7 @@ void DofManager::makeRestrictor( std::vector< SubComponent > const & selection, void DofManager::printFieldInfo( std::ostream & os ) const { - if( MpiWrapper::commRank( MPI_COMM_GEOSX ) == 0 ) + if( MpiWrapper::commRank( MPI_COMM_GEOS ) == 0 ) { localIndex const numFields = LvArray::integerConversion< localIndex >( m_fields.size() ); diff --git a/src/coreComponents/linearAlgebra/interfaces/petsc/PetscInterface.cpp b/src/coreComponents/linearAlgebra/interfaces/petsc/PetscInterface.cpp index baceac5a6fc..f851ffdc48c 100644 --- a/src/coreComponents/linearAlgebra/interfaces/petsc/PetscInterface.cpp +++ b/src/coreComponents/linearAlgebra/interfaces/petsc/PetscInterface.cpp @@ -33,7 +33,7 @@ void PetscInterface::initialize() { PetscOptionsSetValue( nullptr, "-no_signal_handler", "" ); PetscOptionsSetValue( nullptr, "-on_error_abort", "" ); - PETSC_COMM_WORLD = MPI_COMM_GEOSX; + PETSC_COMM_WORLD = MPI_COMM_GEOS; PetscInitializeNoArguments(); } diff --git a/src/coreComponents/linearAlgebra/interfaces/petsc/PetscMatrix.cpp b/src/coreComponents/linearAlgebra/interfaces/petsc/PetscMatrix.cpp index 09830dfa800..7844bd4e849 100644 --- a/src/coreComponents/linearAlgebra/interfaces/petsc/PetscMatrix.cpp +++ b/src/coreComponents/linearAlgebra/interfaces/petsc/PetscMatrix.cpp @@ -734,7 +734,7 @@ void PetscMatrix::separateComponentFilter( PetscMatrix & dst, GEOS_LAI_CHECK_ERROR( MatRestoreRow( m_mat, row, &numEntries, nullptr, &vals ) ); } - dst.create( tempMatView.toViewConst(), numLocalCols(), MPI_COMM_GEOSX ); + dst.create( tempMatView.toViewConst(), numLocalCols(), MPI_COMM_GEOS ); dst.setDofManager( dofManager() ); } diff --git a/src/coreComponents/linearAlgebra/interfaces/petsc/PetscPreconditioner.cpp b/src/coreComponents/linearAlgebra/interfaces/petsc/PetscPreconditioner.cpp index ec8e588a3bb..21aa5df6e77 100644 --- a/src/coreComponents/linearAlgebra/interfaces/petsc/PetscPreconditioner.cpp +++ b/src/coreComponents/linearAlgebra/interfaces/petsc/PetscPreconditioner.cpp @@ -49,7 +49,7 @@ void convertRigidBodyModes( LinearSolverParameters const & params, GEOS_LAI_CHECK_ERROR( VecSetBlockSize( nullvecs[i], params.dofsPerNode ) ); GEOS_LAI_CHECK_ERROR( VecSetUp( nullvecs[i] ) ); } - GEOS_LAI_CHECK_ERROR( MatNullSpaceCreate( MPI_COMM_GEOSX, PETSC_FALSE, numRBM, nullvecs.data(), &nullsp ) ); + GEOS_LAI_CHECK_ERROR( MatNullSpaceCreate( MPI_COMM_GEOS, PETSC_FALSE, numRBM, nullvecs.data(), &nullsp ) ); for( localIndex i = 0; i < numRBM; ++i ) { GEOS_LAI_CHECK_ERROR( VecDestroy( &nullvecs[i] ) ); @@ -222,7 +222,7 @@ void createPetscAMG( LinearSolverParameters const & params, // Sanity checks GEOS_LAI_ASSERT_EQ( n_local, 1 ); - GEOS_LAI_ASSERT_EQ( first_local, MpiWrapper::commRank( MPI_COMM_GEOSX ) ); + GEOS_LAI_ASSERT_EQ( first_local, MpiWrapper::commRank( MPI_COMM_GEOS ) ); // Set up local block ILU preconditioner PC prec_local; diff --git a/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraMatrix.cpp b/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraMatrix.cpp index 6b5b5fd68ec..bca0578a432 100644 --- a/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraMatrix.cpp +++ b/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraMatrix.cpp @@ -575,7 +575,7 @@ void EpetraMatrix::separateComponentFilter( EpetraMatrix & dst, } } ); - dst.create( tempMatView.toViewConst(), numLocalCols(), MPI_COMM_GEOSX ); + dst.create( tempMatView.toViewConst(), numLocalCols(), MPI_COMM_GEOS ); dst.setDofManager( dofManager() ); } @@ -1042,7 +1042,7 @@ MPI_Comm EpetraMatrix::comm() const #ifdef GEOS_USE_MPI return dynamicCast< Epetra_MpiComm const & >( m_matrix->RowMap().Comm() ).Comm(); #else - return MPI_COMM_GEOSX; + return MPI_COMM_GEOS; #endif } diff --git a/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraVector.cpp b/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraVector.cpp index 2993d566997..02016e5ffd0 100644 --- a/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraVector.cpp +++ b/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraVector.cpp @@ -293,7 +293,7 @@ MPI_Comm EpetraVector::comm() const #ifdef GEOS_USE_MPI return dynamicCast< Epetra_MpiComm const & >( m_vec->Map().Comm() ).Comm(); #else - return MPI_COMM_GEOSX; + return MPI_COMM_GEOS; #endif } diff --git a/src/coreComponents/linearAlgebra/unitTests/testExternalSolvers.cpp b/src/coreComponents/linearAlgebra/unitTests/testExternalSolvers.cpp index 0f8b959c1a4..6ea6b405c09 100644 --- a/src/coreComponents/linearAlgebra/unitTests/testExternalSolvers.cpp +++ b/src/coreComponents/linearAlgebra/unitTests/testExternalSolvers.cpp @@ -151,7 +151,7 @@ class SolverTestLaplace2D : public SolverTestBase< LAI > void SetUp() override { globalIndex constexpr n = 100; - geos::testing::compute2DLaplaceOperator( MPI_COMM_GEOSX, n, this->matrix ); + geos::testing::compute2DLaplaceOperator( MPI_COMM_GEOS, n, this->matrix ); // Condition number for the Laplacian matrix estimate: 4 * n^2 / pi^2 this->cond_est = 4.0 * n * n / std::pow( M_PI, 2 ); @@ -232,7 +232,7 @@ class SolverTestElasticity2D : public SolverTestBase< LAI > void SetUp() override { globalIndex constexpr n = 100; - geos::testing::compute2DElasticityOperator( MPI_COMM_GEOSX, 1.0, 1.0, n, n, 10000., 0.2, this->matrix ); + geos::testing::compute2DElasticityOperator( MPI_COMM_GEOS, 1.0, 1.0, n, n, 10000., 0.2, this->matrix ); this->cond_est = 1e4; // not a true condition number estimate, but enough to pass tests } }; diff --git a/src/coreComponents/linearAlgebra/unitTests/testKrylovSolvers.cpp b/src/coreComponents/linearAlgebra/unitTests/testKrylovSolvers.cpp index be7045939b9..2ec7b8f0e8d 100644 --- a/src/coreComponents/linearAlgebra/unitTests/testKrylovSolvers.cpp +++ b/src/coreComponents/linearAlgebra/unitTests/testKrylovSolvers.cpp @@ -125,13 +125,13 @@ class KrylovSolverTest : public KrylovSolverTestBase< typename LAI::ParallelMatr { // Compute matrix and preconditioner globalIndex constexpr n = 100; - geos::testing::compute2DLaplaceOperator( MPI_COMM_GEOSX, n, this->matrix ); + geos::testing::compute2DLaplaceOperator( MPI_COMM_GEOS, n, this->matrix ); this->precond.setup( this->matrix ); // Set up vectors - this->sol_true.create( this->matrix.numLocalCols(), MPI_COMM_GEOSX ); - this->sol_comp.create( this->matrix.numLocalCols(), MPI_COMM_GEOSX ); - this->rhs_true.create( this->matrix.numLocalRows(), MPI_COMM_GEOSX ); + this->sol_true.create( this->matrix.numLocalCols(), MPI_COMM_GEOS ); + this->sol_comp.create( this->matrix.numLocalCols(), MPI_COMM_GEOS ); + this->rhs_true.create( this->matrix.numLocalRows(), MPI_COMM_GEOS ); // Condition number for the Laplacian matrix estimate: 4 * n^2 / pi^2 this->cond_est = 1.5 * 4.0 * n * n / std::pow( M_PI, 2 ); @@ -198,7 +198,7 @@ class KrylovSolverBlockTest : public KrylovSolverTestBase< BlockOperatorWrapper< void SetUp() override { globalIndex constexpr n = 100; - geos::testing::compute2DLaplaceOperator( MPI_COMM_GEOSX, n, laplace2D ); + geos::testing::compute2DLaplaceOperator( MPI_COMM_GEOS, n, laplace2D ); // We are going to assembly the following dummy system // [L 0] [x_true] = [b_0] @@ -218,9 +218,9 @@ class KrylovSolverBlockTest : public KrylovSolverTestBase< BlockOperatorWrapper< for( localIndex i = 0; i < 2; ++i ) { - this->sol_true.block( i ).create( laplace2D.numLocalCols(), MPI_COMM_GEOSX ); - this->sol_comp.block( i ).create( laplace2D.numLocalCols(), MPI_COMM_GEOSX ); - this->rhs_true.block( i ).create( laplace2D.numLocalRows(), MPI_COMM_GEOSX ); + this->sol_true.block( i ).create( laplace2D.numLocalCols(), MPI_COMM_GEOS ); + this->sol_comp.block( i ).create( laplace2D.numLocalCols(), MPI_COMM_GEOS ); + this->rhs_true.block( i ).create( laplace2D.numLocalRows(), MPI_COMM_GEOS ); } // Condition number for the Laplacian matrix estimate: 4 * n^2 / pi^2 diff --git a/src/coreComponents/linearAlgebra/unitTests/testMatrices.cpp b/src/coreComponents/linearAlgebra/unitTests/testMatrices.cpp index d9345d44d3a..16df69c7dae 100644 --- a/src/coreComponents/linearAlgebra/unitTests/testMatrices.cpp +++ b/src/coreComponents/linearAlgebra/unitTests/testMatrices.cpp @@ -37,8 +37,8 @@ TYPED_TEST_P( MatrixTest, MatrixFunctions ) using Matrix = typename TypeParam::ParallelMatrix; // Get the MPI rank - int numranks = MpiWrapper::commSize( MPI_COMM_GEOSX ); - int rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int numranks = MpiWrapper::commSize( MPI_COMM_GEOS ); + int rank = MpiWrapper::commRank( MPI_COMM_GEOS ); std::cout << "*** Rank: " << rank << std::endl; @@ -48,7 +48,7 @@ TYPED_TEST_P( MatrixTest, MatrixFunctions ) { // Test matrix-matrix product: C = A*B Matrix A; - geos::testing::compute2DLaplaceOperator( MPI_COMM_GEOSX, 2 * numranks, A ); + geos::testing::compute2DLaplaceOperator( MPI_COMM_GEOS, 2 * numranks, A ); Matrix B( A ); A.multiply( B, C ); @@ -58,10 +58,10 @@ TYPED_TEST_P( MatrixTest, MatrixFunctions ) // Define some vectors, matrices Vector vec1, vec2, vec3; Matrix mat1, mat2, mat3, mat4; - mat1.createWithLocalSize( 2, 2, MPI_COMM_GEOSX ); // 2*numranks x 2*numranks - mat2.createWithGlobalSize( 2, 2, MPI_COMM_GEOSX ); // 2x2 - mat3.createWithLocalSize( 2, 3, 3, MPI_COMM_GEOSX ); // 2*numranks x 3*numranks - mat4.createWithGlobalSize( 3, 4, 3, MPI_COMM_GEOSX ); // 3x4 + mat1.createWithLocalSize( 2, 2, MPI_COMM_GEOS ); // 2*numranks x 2*numranks + mat2.createWithGlobalSize( 2, 2, MPI_COMM_GEOS ); // 2x2 + mat3.createWithLocalSize( 2, 3, 3, MPI_COMM_GEOS ); // 2*numranks x 3*numranks + mat4.createWithGlobalSize( 3, 4, 3, MPI_COMM_GEOS ); // 3x4 // Testing create, globalRows, globalCols EXPECT_EQ( mat1.numGlobalRows(), 2 * numranks ); @@ -125,7 +125,7 @@ TYPED_TEST_P( MatrixTest, MatrixFunctions ) } // Testing add/set/insert array1d Matrix mat6; - mat6.createWithGlobalSize( 4, 4, MPI_COMM_GEOSX ); + mat6.createWithGlobalSize( 4, 4, MPI_COMM_GEOS ); array1d< real64 > vals6( 3 ); array1d< real64 > vals7( 3 ); array1d< globalIndex > inds6( 3 ); @@ -152,7 +152,7 @@ TYPED_TEST_P( MatrixTest, MatrixFunctions ) // Testing add/set/insert array2d Matrix mat7; - mat7.createWithGlobalSize( 4, 4, MPI_COMM_GEOSX ); + mat7.createWithGlobalSize( 4, 4, MPI_COMM_GEOS ); array1d< globalIndex > rows( 2 ); array1d< globalIndex > cols( 2 ); array2d< real64 > vals8( 2, 2 ); @@ -184,8 +184,8 @@ TYPED_TEST_P( MatrixTest, MatrixFunctions ) mat1.close(); // Testing vector multiply, matrix multiply, MatrixMatrixMultiply - vec1.createWithGlobalSize( 2, MPI_COMM_GEOSX ); - vec2.createWithGlobalSize( 2, MPI_COMM_GEOSX ); + vec1.createWithGlobalSize( 2, MPI_COMM_GEOS ); + vec2.createWithGlobalSize( 2, MPI_COMM_GEOS ); vec1.set( 1 ); vec1.close(); globalIndex inds4[2] = { 0, 1 }; @@ -230,7 +230,7 @@ TYPED_TEST_P( MatrixTest, MatrixMatrixOperations ) globalIndex const n = 100; Matrix A; - geos::testing::compute2DLaplaceOperator( MPI_COMM_GEOSX, n, A ); + geos::testing::compute2DLaplaceOperator( MPI_COMM_GEOS, n, A ); Matrix A_squared; A.multiply( A, A_squared ); @@ -246,14 +246,14 @@ TYPED_TEST_P( MatrixTest, RectangularMatrixOperations ) { using Matrix = typename TypeParam::ParallelMatrix; - int const mpiSize = MpiWrapper::commSize( MPI_COMM_GEOSX ); + int const mpiSize = MpiWrapper::commSize( MPI_COMM_GEOS ); // Set a size that allows to run with arbitrary number of processes globalIndex const nRows = std::max( 100, mpiSize ); globalIndex const nCols = 2 * nRows; Matrix A; - A.createWithGlobalSize( nRows, nCols, 2, MPI_COMM_GEOSX ); + A.createWithGlobalSize( nRows, nCols, 2, MPI_COMM_GEOS ); A.open(); for( globalIndex i = A.ilower(); i < A.iupper(); ++i ) diff --git a/src/coreComponents/linearAlgebra/unitTests/testVectors.cpp b/src/coreComponents/linearAlgebra/unitTests/testVectors.cpp index c0eee9a66a3..4ee83088342 100644 --- a/src/coreComponents/linearAlgebra/unitTests/testVectors.cpp +++ b/src/coreComponents/linearAlgebra/unitTests/testVectors.cpp @@ -34,11 +34,11 @@ void createAndAssemble( localIndex const startSize, VEC & x ) // - startSize on rank 0; // - startSize + 1 on rank 1; // - etc. - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); localIndex const localSize = rank + startSize; globalIndex const rankOffset = rank * ( rank - 1 ) / 2 + rank * startSize; - x.create( localSize, MPI_COMM_GEOSX ); + x.create( localSize, MPI_COMM_GEOS ); arrayView1d< real64 > const values = x.open(); forAll< POLICY >( localSize, [=] GEOS_HOST_DEVICE ( localIndex const i ) { @@ -127,7 +127,7 @@ TYPED_TEST_P( VectorTest, create ) { using Vector = typename TypeParam::ParallelVector; - MPI_Comm const comm = MPI_COMM_GEOSX; + MPI_Comm const comm = MPI_COMM_GEOS; int const rank = MpiWrapper::commRank( comm ); int const nproc = MpiWrapper::commSize( comm ); @@ -179,7 +179,7 @@ TYPED_TEST_P( VectorTest, moveConstruction ) Vector y( std::move( x ) ); EXPECT_TRUE( y.ready() ); - EXPECT_TRUE( MpiWrapper::commCompare( y.comm(), MPI_COMM_GEOSX ) ); + EXPECT_TRUE( MpiWrapper::commCompare( y.comm(), MPI_COMM_GEOS ) ); EXPECT_EQ( y.localSize(), localSize ); EXPECT_EQ( y.globalSize(), globalSize ); compareValues( y.values(), values ); @@ -207,7 +207,7 @@ TYPED_TEST_P( VectorTest, setAllValues ) real64 const value = 1.23; Vector x; - x.create( localSize, MPI_COMM_GEOSX ); + x.create( localSize, MPI_COMM_GEOS ); x.set( value ); arrayView1d< real64 const > const values = x.values(); diff --git a/src/coreComponents/linearAlgebra/utilities/LAIHelperFunctions.hpp b/src/coreComponents/linearAlgebra/utilities/LAIHelperFunctions.hpp index a8c29320c28..9c1d67aa20b 100644 --- a/src/coreComponents/linearAlgebra/utilities/LAIHelperFunctions.hpp +++ b/src/coreComponents/linearAlgebra/utilities/LAIHelperFunctions.hpp @@ -75,7 +75,7 @@ void createPermutationMatrix( NodeManager const & nodeManager, */ localIndex const numLocalRows = nodeManager.getNumberOfLocalIndices() * nDofPerNode; - permutationMatrix.createWithLocalSize( numLocalRows, numLocalRows, 1, MPI_COMM_GEOSX ); + permutationMatrix.createWithLocalSize( numLocalRows, numLocalRows, 1, MPI_COMM_GEOS ); arrayView1d< globalIndex const > const & dofNumber = nodeManager.getReference< globalIndex_array >( dofKey ); arrayView1d< globalIndex const > const & localToGlobal = nodeManager.localToGlobalMap(); @@ -127,7 +127,7 @@ void createPermutationMatrix( ElementRegionManager const & elemManager, numLocalRows += elementSubRegion.getNumberOfLocalIndices() * nDofPerCell; } } ); - permutationMatrix.createWithLocalSize( numLocalRows, numLocalRows, 1, MPI_COMM_GEOSX ); + permutationMatrix.createWithLocalSize( numLocalRows, numLocalRows, 1, MPI_COMM_GEOS ); permutationMatrix.open(); elemManager.forElementSubRegions< ElementSubRegionBase >( [&]( ElementSubRegionBase const & elementSubRegion ) @@ -250,7 +250,7 @@ void computeRigidBodyModes( MeshLevel const & mesh, rigidBodyModes.resize( numRidigBodyModes ); for( localIndex k = 0; k < numComponents; ++k ) { - rigidBodyModes[k].create( numNodes * numComponents, MPI_COMM_GEOSX ); + rigidBodyModes[k].create( numNodes * numComponents, MPI_COMM_GEOS ); arrayView1d< real64 > const values = rigidBodyModes[k].open(); forAll< parallelHostPolicy >( numNodes, [=]( localIndex const i ) { @@ -264,7 +264,7 @@ void computeRigidBodyModes( MeshLevel const & mesh, case 2: { localIndex const k = 2; - rigidBodyModes[k].create( numNodes*numComponents, MPI_COMM_GEOSX ); + rigidBodyModes[k].create( numNodes*numComponents, MPI_COMM_GEOS ); { arrayView1d< real64 > const values = rigidBodyModes[k].open(); forAll< parallelHostPolicy >( numNodes, [=]( localIndex const i ) @@ -285,7 +285,7 @@ void computeRigidBodyModes( MeshLevel const & mesh, case 3: { localIndex k = 3; - rigidBodyModes[k].create( numNodes*numComponents, MPI_COMM_GEOSX ); + rigidBodyModes[k].create( numNodes*numComponents, MPI_COMM_GEOS ); { arrayView1d< real64 > const values = rigidBodyModes[k].open(); forAll< parallelHostPolicy >( numNodes, [=]( localIndex const i ) @@ -303,7 +303,7 @@ void computeRigidBodyModes( MeshLevel const & mesh, rigidBodyModes[k].scale( 1.0 / rigidBodyModes[k].norm2() ); ++k; - rigidBodyModes[k].create( numNodes*numComponents, MPI_COMM_GEOSX ); + rigidBodyModes[k].create( numNodes*numComponents, MPI_COMM_GEOS ); { arrayView1d< real64 > const values = rigidBodyModes[k].open(); forAll< parallelHostPolicy >( numNodes, [=]( localIndex const i ) @@ -321,7 +321,7 @@ void computeRigidBodyModes( MeshLevel const & mesh, rigidBodyModes[k].scale( 1.0 / rigidBodyModes[k].norm2() ); ++k; - rigidBodyModes[k].create( numNodes*numComponents, MPI_COMM_GEOSX ); + rigidBodyModes[k].create( numNodes*numComponents, MPI_COMM_GEOS ); { arrayView1d< real64 > const values = rigidBodyModes[k].open(); forAll< parallelHostPolicy >( numNodes, [=]( localIndex const i ) diff --git a/src/coreComponents/mainInterface/GeosxState.cpp b/src/coreComponents/mainInterface/GeosxState.cpp index 6339221e4b7..ba5c54a1a16 100644 --- a/src/coreComponents/mainInterface/GeosxState.cpp +++ b/src/coreComponents/mainInterface/GeosxState.cpp @@ -166,7 +166,7 @@ void GeosxState::applyInitialConditions() } m_state = State::READY_TO_RUN; - MpiWrapper::barrier( MPI_COMM_GEOSX ); + MpiWrapper::barrier( MPI_COMM_GEOS ); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/coreComponents/mainInterface/ProblemManager.cpp b/src/coreComponents/mainInterface/ProblemManager.cpp index bd6852fafaf..90a57dcb56e 100644 --- a/src/coreComponents/mainInterface/ProblemManager.cpp +++ b/src/coreComponents/mainInterface/ProblemManager.cpp @@ -526,7 +526,7 @@ void ProblemManager::postInputInitialization() if( repartition ) { partition.setPartitions( xpar, ypar, zpar ); - int const mpiSize = MpiWrapper::commSize( MPI_COMM_GEOSX ); + int const mpiSize = MpiWrapper::commSize( MPI_COMM_GEOS ); // Case : Using MPI domain decomposition and partition are not defined (mainly for external mesh readers) if( mpiSize > 1 && xpar == 1 && ypar == 1 && zpar == 1 ) { diff --git a/src/coreComponents/mesh/DomainPartition.cpp b/src/coreComponents/mesh/DomainPartition.cpp index 9016bbd2b5f..381e5d2f1bd 100644 --- a/src/coreComponents/mesh/DomainPartition.cpp +++ b/src/coreComponents/mesh/DomainPartition.cpp @@ -90,10 +90,10 @@ void DomainPartition::setupBaseLevelMeshGlobalInfo() MPI_Comm cartcomm; { int reorder = 0; - MpiWrapper::cartCreate( MPI_COMM_GEOSX, 3, partition.getPartitions().data(), partition.m_Periodic.data(), reorder, &cartcomm ); + MpiWrapper::cartCreate( MPI_COMM_GEOS, 3, partition.getPartitions().data(), partition.m_Periodic.data(), reorder, &cartcomm ); GEOS_ERROR_IF( cartcomm == MPI_COMM_NULL, "Fail to run MPI_Cart_create and establish communications" ); } - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); int nsdof = 3; MpiWrapper::cartCoords( cartcomm, rank, nsdof, partition.m_coords.data() ); @@ -125,7 +125,7 @@ void DomainPartition::setupBaseLevelMeshGlobalInfo() for( std::size_t i = 0; i < m_neighbors.size(); ++i ) { - MpiWrapper::iSend( firstNeighborRanks.toView(), m_neighbors[ i ].neighborRank(), neighborsTag, MPI_COMM_GEOSX, &requests[ i ] ); + MpiWrapper::iSend( firstNeighborRanks.toView(), m_neighbors[ i ].neighborRank(), neighborsTag, MPI_COMM_GEOS, &requests[ i ] ); } // This set will contain the second (neighbor of) neighbors ranks. @@ -134,7 +134,7 @@ void DomainPartition::setupBaseLevelMeshGlobalInfo() array1d< int > neighborOfNeighborRanks; for( std::size_t i = 0; i < m_neighbors.size(); ++i ) { - MpiWrapper::recv( neighborOfNeighborRanks, m_neighbors[ i ].neighborRank(), neighborsTag, MPI_COMM_GEOSX, MPI_STATUS_IGNORE ); + MpiWrapper::recv( neighborOfNeighborRanks, m_neighbors[ i ].neighborRank(), neighborsTag, MPI_COMM_GEOS, MPI_STATUS_IGNORE ); // Insert the neighbors of the current neighbor into the set of second neighbors. secondNeighborRanks.insert( neighborOfNeighborRanks.begin(), neighborOfNeighborRanks.end() ); diff --git a/src/coreComponents/mesh/ElementRegionManager.cpp b/src/coreComponents/mesh/ElementRegionManager.cpp index e4d3e9479c4..2259ae3bb6c 100644 --- a/src/coreComponents/mesh/ElementRegionManager.cpp +++ b/src/coreComponents/mesh/ElementRegionManager.cpp @@ -63,7 +63,7 @@ void ElementRegionManager::setMaxGlobalIndex() m_localMaxGlobalIndex = std::max( m_localMaxGlobalIndex, subRegion.maxGlobalIndex() ); } ); - m_maxGlobalIndex = MpiWrapper::max( m_localMaxGlobalIndex, MPI_COMM_GEOSX ); + m_maxGlobalIndex = MpiWrapper::max( m_localMaxGlobalIndex, MPI_COMM_GEOS ); } diff --git a/src/coreComponents/mesh/EmbeddedSurfaceNodeManager.cpp b/src/coreComponents/mesh/EmbeddedSurfaceNodeManager.cpp index e1604631a07..67c8085469a 100644 --- a/src/coreComponents/mesh/EmbeddedSurfaceNodeManager.cpp +++ b/src/coreComponents/mesh/EmbeddedSurfaceNodeManager.cpp @@ -203,7 +203,7 @@ localIndex EmbeddedSurfaceNodeManager::packNewNodesGlobalMapsImpl( buffer_unit_t // this doesn't link without the string()...no idea why. packedSize += bufferOps::Pack< DO_PACKING >( buffer, string( viewKeyStruct::localToGlobalMapString() ) ); - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); packedSize += bufferOps::Pack< DO_PACKING >( buffer, rank ); localIndex const numPackedIndices = packList.size(); @@ -250,7 +250,7 @@ localIndex EmbeddedSurfaceNodeManager::unpackNewNodesGlobalMaps( buffer_unit_typ unpackedSize += bufferOps::Unpack( buffer, localToGlobalString ); GEOS_ERROR_IF( localToGlobalString != viewKeyStruct::localToGlobalMapString(), "ObjectManagerBase::unpack(): label incorrect" ); - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); int sendingRank; unpackedSize += bufferOps::Unpack( buffer, sendingRank ); diff --git a/src/coreComponents/mesh/ObjectManagerBase.cpp b/src/coreComponents/mesh/ObjectManagerBase.cpp index 8cd4a22441c..bfb00223f7d 100644 --- a/src/coreComponents/mesh/ObjectManagerBase.cpp +++ b/src/coreComponents/mesh/ObjectManagerBase.cpp @@ -240,7 +240,7 @@ localIndex ObjectManagerBase::packImpl( buffer_unit_type * & buffer, localIndex packedSize = 0; packedSize += bufferOps::Pack< DO_PACKING >( buffer, this->getName() ); - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); packedSize += bufferOps::Pack< DO_PACKING >( buffer, rank ); localIndex const numPackedIndices = packList.size(); @@ -523,7 +523,7 @@ localIndex ObjectManagerBase::packGlobalMapsImpl( buffer_unit_type * & buffer, arrayView1d< localIndex const > const & packList, integer const recursive ) const { - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); localIndex packedSize = bufferOps::Pack< DO_PACKING >( buffer, this->getName() ); @@ -585,7 +585,7 @@ localIndex ObjectManagerBase::unpackGlobalMaps( buffer_unit_type const * & buffe integer const recursive ) { GEOS_MARK_FUNCTION; - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); localIndex unpackedSize = 0; string groupName; @@ -858,7 +858,7 @@ void ObjectManagerBase::eraseObject( std::set< localIndex > const & indicesToEra void ObjectManagerBase::setMaxGlobalIndex() { - m_maxGlobalIndex = MpiWrapper::max( m_localMaxGlobalIndex, MPI_COMM_GEOSX ); + m_maxGlobalIndex = MpiWrapper::max( m_localMaxGlobalIndex, MPI_COMM_GEOS ); } void ObjectManagerBase::cleanUpMap( std::set< localIndex > const & targetIndices, diff --git a/src/coreComponents/mesh/ParticleManager.cpp b/src/coreComponents/mesh/ParticleManager.cpp index 6b7aa2c1705..7a168d02168 100644 --- a/src/coreComponents/mesh/ParticleManager.cpp +++ b/src/coreComponents/mesh/ParticleManager.cpp @@ -81,7 +81,7 @@ void ParticleManager::setMaxGlobalIndex() &m_maxGlobalIndex, 1, MPI_MAX, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } Group * ParticleManager::createChild( string const & childKey, string const & childName ) diff --git a/src/coreComponents/mesh/ParticleRegion.cpp b/src/coreComponents/mesh/ParticleRegion.cpp index cd15eba6388..c7c1fac268e 100644 --- a/src/coreComponents/mesh/ParticleRegion.cpp +++ b/src/coreComponents/mesh/ParticleRegion.cpp @@ -49,7 +49,7 @@ void ParticleRegion::generateMesh( Group & particleBlocks ) subRegion.copyFromParticleBlock( source ); // Set the rank of particles on each subregion - int const mpiRank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const mpiRank = MpiWrapper::commRank( MPI_COMM_GEOS ); subRegion.setParticleRank( mpiRank ); // Set the number of vertices of the particles on each subregion diff --git a/src/coreComponents/mesh/ParticleSubRegionBase.cpp b/src/coreComponents/mesh/ParticleSubRegionBase.cpp index 8df97780b93..1e0a5d0b5aa 100644 --- a/src/coreComponents/mesh/ParticleSubRegionBase.cpp +++ b/src/coreComponents/mesh/ParticleSubRegionBase.cpp @@ -155,7 +155,7 @@ void ParticleSubRegionBase::setActiveParticleIndices() forAll< serialPolicy >( this->size(), [&, particleRank] GEOS_HOST ( localIndex const p ) // This must be on host since we're dealing with // a sorted array. Parallelize with atomics? { - if( particleRank[p] == MpiWrapper::commRank( MPI_COMM_GEOSX ) ) + if( particleRank[p] == MpiWrapper::commRank( MPI_COMM_GEOS ) ) { m_activeParticleIndices.insert( p ); } diff --git a/src/coreComponents/mesh/WellElementSubRegion.cpp b/src/coreComponents/mesh/WellElementSubRegion.cpp index 5dd03f5d1c5..4f0f5eb9695 100644 --- a/src/coreComponents/mesh/WellElementSubRegion.cpp +++ b/src/coreComponents/mesh/WellElementSubRegion.cpp @@ -545,7 +545,7 @@ void WellElementSubRegion::checkPartitioningValidity( LineBlockABC const & lineB for( globalIndex iownerRank : rankSetsByStatus[WellElemStatus::LOCAL] ) { - if( MpiWrapper::commRank( MPI_COMM_GEOSX ) != iownerRank ) + if( MpiWrapper::commRank( MPI_COMM_GEOS ) != iownerRank ) { elemStatusGlobal[iwelemGlobal] = WellElemStatus::REMOTE; } @@ -563,7 +563,7 @@ void WellElementSubRegion::checkPartitioningValidity( LineBlockABC const & lineB if( rankCount == 0 ) { // update the elemStatusGlobal array for all ranks - if( MpiWrapper::commRank( MPI_COMM_GEOSX ) != iownerRank ) + if( MpiWrapper::commRank( MPI_COMM_GEOS ) != iownerRank ) { elemStatusGlobal[iwelemGlobal] = WellElemStatus::REMOTE; } @@ -571,7 +571,7 @@ void WellElementSubRegion::checkPartitioningValidity( LineBlockABC const & lineB else // (rankCount > 0) { // remove the duplicate elements - if( MpiWrapper::commRank( MPI_COMM_GEOSX ) == iownerRank ) + if( MpiWrapper::commRank( MPI_COMM_GEOS ) == iownerRank ) { localElems.remove( iwelemGlobal ); } @@ -846,7 +846,7 @@ void WellElementSubRegion::reconstructLocalConnectivity() bool WellElementSubRegion::isLocallyOwned() const { - return m_topRank == MpiWrapper::commRank( MPI_COMM_GEOSX ); + return m_topRank == MpiWrapper::commRank( MPI_COMM_GEOS ); } diff --git a/src/coreComponents/mesh/generators/InternalMeshGenerator.cpp b/src/coreComponents/mesh/generators/InternalMeshGenerator.cpp index d8340b7b94b..2069984feec 100644 --- a/src/coreComponents/mesh/generators/InternalMeshGenerator.cpp +++ b/src/coreComponents/mesh/generators/InternalMeshGenerator.cpp @@ -606,7 +606,7 @@ void InternalMeshGenerator::fillCellBlockManager( CellBlockManager & cellBlockMa elemCenterCoords[dim].data(), m_numElemsTotal[dim], MPI_MAX, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } // Find starting/ending index diff --git a/src/coreComponents/mesh/generators/VTKMeshGenerator.cpp b/src/coreComponents/mesh/generators/VTKMeshGenerator.cpp index 1fe06c4aebc..ddcae6a3198 100644 --- a/src/coreComponents/mesh/generators/VTKMeshGenerator.cpp +++ b/src/coreComponents/mesh/generators/VTKMeshGenerator.cpp @@ -82,7 +82,7 @@ void VTKMeshGenerator::fillCellBlockManager( CellBlockManager & cellBlockManager // TODO refactor void MeshGeneratorBase::generateMesh( DomainPartition & domain ) GEOS_MARK_FUNCTION; - MPI_Comm const comm = MPI_COMM_GEOSX; + MPI_Comm const comm = MPI_COMM_GEOS; vtkSmartPointer< vtkMultiProcessController > controller = vtk::getController(); vtkMultiProcessController::SetGlobalController( controller ); diff --git a/src/coreComponents/mesh/generators/VTKUtilities.cpp b/src/coreComponents/mesh/generators/VTKUtilities.cpp index 757e9d92518..a2cfae5da17 100644 --- a/src/coreComponents/mesh/generators/VTKUtilities.cpp +++ b/src/coreComponents/mesh/generators/VTKUtilities.cpp @@ -142,7 +142,7 @@ std::vector< T > collectUniqueValues( std::vector< T > const & data ) { // 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 ); + MpiWrapper::allGather( LvArray::integerConversion< int >( data.size() ), dataSizes, MPI_COMM_GEOS ); // `totalDataSize` contains the total data size across all the MPI ranks. int const totalDataSize = std::accumulate( dataSizes.begin(), dataSizes.end(), 0 ); @@ -153,7 +153,7 @@ std::vector< T > collectUniqueValues( std::vector< T > const & data ) // `displacements` is the offset (relative to the receive buffer) to store the data for each rank. std::vector< int > displacements( MpiWrapper::commSize(), 0 ); std::partial_sum( dataSizes.begin(), dataSizes.end() - 1, displacements.begin() + 1 ); - MpiWrapper::allgatherv( data.data(), data.size(), allData.data(), dataSizes.data(), displacements.data(), MPI_COMM_GEOSX ); + MpiWrapper::allgatherv( data.data(), data.size(), allData.data(), dataSizes.data(), displacements.data(), MPI_COMM_GEOS ); // Finalizing by sorting, removing duplicates and trimming the result vector at the proper size. std::sort( allData.begin(), allData.end() ); @@ -404,7 +404,7 @@ vtkSmartPointer< vtkMultiProcessController > getController() { #ifdef GEOS_USE_MPI vtkNew< vtkMPIController > controller; - vtkMPICommunicatorOpaqueComm vtkGeosxComm( &MPI_COMM_GEOSX ); + vtkMPICommunicatorOpaqueComm vtkGeosxComm( &MPI_COMM_GEOS ); vtkNew< vtkMPICommunicator > communicator; communicator->InitializeExternal( &vtkGeosxComm ); controller->SetCommunicator( communicator ); @@ -677,13 +677,13 @@ AllMeshes redistributeByCellGraph( AllMeshes & input, // First for the main 3d mesh... vtkSmartPointer< vtkPartitionedDataSet > const splitMesh = splitMeshByPartition( input.getMainMesh(), numRanks, newPartitions.toViewConst() ); - vtkSmartPointer< vtkUnstructuredGrid > finalMesh = vtk::redistribute( *splitMesh, MPI_COMM_GEOSX ); + vtkSmartPointer< vtkUnstructuredGrid > finalMesh = vtk::redistribute( *splitMesh, MPI_COMM_GEOS ); // ... and then for the fractures. std::map< string, vtkSmartPointer< vtkDataSet > > finalFractures; for( auto const & [fractureName, fracture]: input.getFaceBlocks() ) { vtkSmartPointer< vtkPartitionedDataSet > const splitFracMesh = splitMeshByPartition( fracture, numRanks, newFracturePartitions[fractureName].toViewConst() ); - vtkSmartPointer< vtkUnstructuredGrid > const finalFracMesh = vtk::redistribute( *splitFracMesh, MPI_COMM_GEOSX ); + vtkSmartPointer< vtkUnstructuredGrid > const finalFracMesh = vtk::redistribute( *splitFracMesh, MPI_COMM_GEOS ); finalFractures[fractureName] = finalFracMesh; } @@ -746,7 +746,7 @@ vtkSmartPointer< vtkDataSet > manageGlobalIds( vtkSmartPointer< vtkDataSet > mes // Add global ids on the fly if needed int const me = hasGlobalIds( mesh ); int everyone; - MpiWrapper::allReduce( &me, &everyone, 1, MPI_MAX, MPI_COMM_GEOSX ); + MpiWrapper::allReduce( &me, &everyone, 1, MPI_MAX, MPI_COMM_GEOS ); if( everyone and not me ) { @@ -891,7 +891,7 @@ ensureNoEmptyRank( vtkSmartPointer< vtkDataSet > mesh, "\nWarning! We strongly encourage the use of partitionRefinement > 5 for this number of MPI ranks \n" ); vtkSmartPointer< vtkPartitionedDataSet > const splitMesh = splitMeshByPartition( mesh, numProcs, newParts.toViewConst() ); - return vtk::redistribute( *splitMesh, MPI_COMM_GEOSX ); + return vtk::redistribute( *splitMesh, MPI_COMM_GEOS ); } @@ -2113,8 +2113,8 @@ real64 writeNodes( integer const logLevel, bb.GetMaxPoint( xMax ); } - MpiWrapper::min< real64 >( xMin, xMin, MPI_COMM_GEOSX ); - MpiWrapper::max< real64 >( xMax, xMax, MPI_COMM_GEOSX ); + MpiWrapper::min< real64 >( xMin, xMin, MPI_COMM_GEOS ); + MpiWrapper::max< real64 >( xMax, xMax, MPI_COMM_GEOS ); LvArray::tensorOps::subtract< 3 >( xMax, xMin ); return LvArray::tensorOps::l2Norm< 3 >( xMax ); } diff --git a/src/coreComponents/mesh/generators/WellGeneratorBase.cpp b/src/coreComponents/mesh/generators/WellGeneratorBase.cpp index 55613fc29a2..2266865df4d 100644 --- a/src/coreComponents/mesh/generators/WellGeneratorBase.cpp +++ b/src/coreComponents/mesh/generators/WellGeneratorBase.cpp @@ -458,7 +458,7 @@ void WellGeneratorBase::checkPerforationLocationsValidity() // merge perforations to make sure that no well element is shared between two MPI domains // TODO: instead of merging perforations, split the well elements and do not change the physical location of the // perforation - int const mpiSize = MpiWrapper::commSize( MPI_COMM_GEOSX ); + int const mpiSize = MpiWrapper::commSize( MPI_COMM_GEOS ); if( mpiSize > 1 ) { mergePerforations( elemToPerfMap ); diff --git a/src/coreComponents/mesh/mpiCommunications/CommunicationTools.cpp b/src/coreComponents/mesh/mpiCommunications/CommunicationTools.cpp index 28fb16dcd67..18572879521 100644 --- a/src/coreComponents/mesh/mpiCommunications/CommunicationTools.cpp +++ b/src/coreComponents/mesh/mpiCommunications/CommunicationTools.cpp @@ -139,7 +139,7 @@ void CommunicationTools::assignGlobalIndices( ObjectManagerBase & manager, 1, commData.mpiRecvBufferSizeRequest( neighborIndex ), commData.commID(), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } for( std::size_t count=0; counttempNeighborData.neighborNumbers[DomainPartition::FiniteElementNodeManager] to @@ -271,7 +271,7 @@ void CommunicationTools::assignGlobalIndices( ObjectManagerBase & manager, void CommunicationTools::assignNewGlobalIndices( ObjectManagerBase & manager, std::set< localIndex > const & indexList ) { - globalIndex const glocalIndexOffset = MpiWrapper::prefixSum< globalIndex >( indexList.size(), MPI_COMM_GEOSX ); + globalIndex const glocalIndexOffset = MpiWrapper::prefixSum< globalIndex >( indexList.size(), MPI_COMM_GEOS ); arrayView1d< globalIndex > const & localToGlobal = manager.localToGlobalMap(); @@ -301,7 +301,7 @@ CommunicationTools::assignNewGlobalIndices( ElementRegionManager & elementManage numberOfNewObjectsHere += LvArray::integerConversion< localIndex >( iter.second.size() ); } - globalIndex const glocalIndexOffset = MpiWrapper::prefixSum< globalIndex >( numberOfNewObjectsHere, MPI_COMM_GEOSX ); + globalIndex const glocalIndexOffset = MpiWrapper::prefixSum< globalIndex >( numberOfNewObjectsHere, MPI_COMM_GEOS ); localIndex nIndicesAssigned = 0; for( auto const & iter : newElems ) @@ -353,7 +353,7 @@ array1d< array1d< globalIndex > > exchange( int commId, commData.mpiSendBufferSizeRequest( i ), commData.mpiRecvBufferSizeRequest( i ), commId, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } MpiWrapper::waitAll( numNeighbors, commData.mpiSendBufferSizeRequest(), commData.mpiSendBufferSizeStatus() ); @@ -368,7 +368,7 @@ array1d< array1d< globalIndex > > exchange( int commId, output[i], commData.mpiRecvBufferRequest( i ), commId, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } MpiWrapper::waitAll( numNeighbors, commData.mpiSendBufferRequest(), commData.mpiSendBufferStatus() ); MpiWrapper::waitAll( numNeighbors, commData.mpiRecvBufferRequest(), commData.mpiRecvBufferStatus() ); @@ -680,7 +680,7 @@ void fixReceiveLists( ObjectManagerBase & objectManager, MpiWrapper::iSend( objectManager.getNeighborData( neighborRank ).nonLocalGhosts().toView(), neighborRank, nonLocalGhostsTag, - MPI_COMM_GEOSX, + MPI_COMM_GEOS, &nonLocalGhostsRequests[ i ] ); } @@ -693,7 +693,7 @@ void fixReceiveLists( ObjectManagerBase & objectManager, MpiWrapper::recv( ghostsFromSecondNeighbor, neighborRank, nonLocalGhostsTag, - MPI_COMM_GEOSX, + MPI_COMM_GEOS, MPI_STATUS_IGNORE ); /// Array of ghosts to fix. @@ -942,7 +942,7 @@ void CommunicationTools::synchronizePackSendRecvSizes( FieldIdentifiers const & neighbor.mpiISendReceiveBufferSizes( icomm.commID(), icomm.mpiSendBufferSizeRequest( neighborIndex ), icomm.mpiRecvBufferSizeRequest( neighborIndex ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); neighbor.resizeSendBuffer( icomm.commID(), bufferSize ); } @@ -992,7 +992,7 @@ void CommunicationTools::asyncSendRecv( std::vector< NeighborCommunicator > & ne neighbor.mpiISendReceiveBuffers( icomm.commID(), icomm.mpiSendBufferRequest( neighborIndex ), icomm.mpiRecvBufferRequest( neighborIndex ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } } diff --git a/src/coreComponents/mesh/mpiCommunications/NeighborCommunicator.cpp b/src/coreComponents/mesh/mpiCommunications/NeighborCommunicator.cpp index a645d8e6a1b..4a1fcab1464 100644 --- a/src/coreComponents/mesh/mpiCommunications/NeighborCommunicator.cpp +++ b/src/coreComponents/mesh/mpiCommunications/NeighborCommunicator.cpp @@ -139,7 +139,7 @@ int NeighborCommunicator::postSizeRecv( int const commID, 1, m_neighborRank, recvTag, - MPI_COMM_GEOSX, + MPI_COMM_GEOS, &mpiRecvSizeRequest ); } @@ -151,7 +151,7 @@ int NeighborCommunicator::postSizeSend( int const commID, 1, m_neighborRank, sendTag, - MPI_COMM_GEOSX, + MPI_COMM_GEOS, &mpiSendSizeRequest ); } @@ -164,7 +164,7 @@ int NeighborCommunicator::postRecv( int const commID, m_receiveBufferSize[commID], m_neighborRank, recvTag, - MPI_COMM_GEOSX, + MPI_COMM_GEOS, &mpRecvRequest ); } @@ -176,7 +176,7 @@ int NeighborCommunicator::postSend( int const commID, m_sendBufferSize[commID], m_neighborRank, sendTag, - MPI_COMM_GEOSX, + MPI_COMM_GEOS, &mpiSendRequest ); } diff --git a/src/coreComponents/mesh/mpiCommunications/NeighborCommunicator.hpp b/src/coreComponents/mesh/mpiCommunications/NeighborCommunicator.hpp index dc4b021066f..beaabedea68 100644 --- a/src/coreComponents/mesh/mpiCommunications/NeighborCommunicator.hpp +++ b/src/coreComponents/mesh/mpiCommunications/NeighborCommunicator.hpp @@ -30,7 +30,7 @@ inline int CommTag( int const GEOS_UNUSED_PARAM( senderRank ), int const comm ) { // int m_size; -// MPI_Comm_size( MPI_COMM_GEOSX, &m_size ); +// MPI_Comm_size( MPI_COMM_GEOS, &m_size ); // return senderRank * m_size + receiverRank + m_size * m_size * comm; return comm; } diff --git a/src/coreComponents/mesh/mpiCommunications/SpatialPartition.cpp b/src/coreComponents/mesh/mpiCommunications/SpatialPartition.cpp index 4d39a84b76c..7ba9a85f6d4 100644 --- a/src/coreComponents/mesh/mpiCommunications/SpatialPartition.cpp +++ b/src/coreComponents/mesh/mpiCommunications/SpatialPartition.cpp @@ -181,7 +181,7 @@ void SpatialPartition::setSizes( real64 const ( &min )[ 3 ], { //get size of problem and decomposition - m_size = MpiWrapper::commSize( MPI_COMM_GEOSX ); + m_size = MpiWrapper::commSize( MPI_COMM_GEOS ); //check to make sure our dimensions agree { @@ -197,7 +197,7 @@ void SpatialPartition::setSizes( real64 const ( &min )[ 3 ], MPI_Comm cartcomm; { int reorder = 0; - MpiWrapper::cartCreate( MPI_COMM_GEOSX, nsdof, m_Partitions.data(), m_Periodic.data(), reorder, &cartcomm ); + MpiWrapper::cartCreate( MPI_COMM_GEOS, nsdof, m_Partitions.data(), m_Periodic.data(), reorder, &cartcomm ); } m_rank = MpiWrapper::commRank( cartcomm ); MpiWrapper::cartCoords( cartcomm, m_rank, nsdof, m_coords.data()); @@ -795,7 +795,7 @@ void SpatialPartition::sendCoordinateListToNeighbors( arrayView1d< R1Tensor > co 1, receiveRequest[n], commData.commID(), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } MPI_Waitall( nn, sendRequest.data(), sendStatus.data()); MPI_Waitall( nn, receiveRequest.data(), receiveStatus.data()); @@ -824,7 +824,7 @@ void SpatialPartition::sendCoordinateListToNeighbors( arrayView1d< R1Tensor > co sizeOfReceived[n], receiveRequest[n], commData.commID(), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } MPI_Waitall( nn, sendRequest.data(), sendStatus.data()); MPI_Waitall( nn, receiveRequest.data(), receiveStatus.data()); @@ -894,7 +894,7 @@ void SpatialPartition::sendListOfIndicesToNeighbors( std::vector< array1d< index 1, receiveRequest[n], commData.commID(), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } MPI_Waitall( nn, sendRequest.data(), sendStatus.data()); MPI_Waitall( nn, receiveRequest.data(), receiveStatus.data()); @@ -923,7 +923,7 @@ void SpatialPartition::sendListOfIndicesToNeighbors( std::vector< array1d< index sizeOfReceived[n], receiveRequest[n], commData.commID(), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } MPI_Waitall( nn, sendRequest.data(), sendStatus.data()); MPI_Waitall( nn, receiveRequest.data(), receiveStatus.data()); @@ -984,7 +984,7 @@ void SpatialPartition::sendParticlesToNeighbor( ParticleSubRegionBase & subRegio 1, receiveRequest[n], commData.commID(), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } MPI_Waitall( nn, sendRequest.data(), sendStatus.data() ); MPI_Waitall( nn, receiveRequest.data(), receiveStatus.data() ); @@ -1012,7 +1012,7 @@ void SpatialPartition::sendParticlesToNeighbor( ParticleSubRegionBase & subRegio sizeOfReceived[n], receiveRequest[n], commData.commID(), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } MPI_Waitall( nn, sendRequest.data(), sendStatus.data()); MPI_Waitall( nn, receiveRequest.data(), receiveStatus.data()); diff --git a/src/coreComponents/physicsSolvers/SolverBase.cpp b/src/coreComponents/physicsSolvers/SolverBase.cpp index b082c20140f..e970c3a76eb 100644 --- a/src/coreComponents/physicsSolvers/SolverBase.cpp +++ b/src/coreComponents/physicsSolvers/SolverBase.cpp @@ -461,7 +461,7 @@ real64 SolverBase::linearImplicitStep( real64 const & time_n, Timer timer_create( m_timers["linear solver create"] ); // Compose parallel LA matrix out of local matrix - m_matrix.create( m_localMatrix.toViewConst(), m_dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + m_matrix.create( m_localMatrix.toViewConst(), m_dofManager.numLocalDofs(), MPI_COMM_GEOS ); } // Output the linear system matrix/rhs for debugging purposes @@ -1001,7 +1001,7 @@ bool SolverBase::solveNonlinearSystem( real64 const & time_n, // Compose parallel LA matrix/rhs out of local LA matrix/rhs // - m_matrix.create( m_localMatrix.toViewConst(), m_dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + m_matrix.create( m_localMatrix.toViewConst(), m_dofManager.numLocalDofs(), MPI_COMM_GEOS ); } // Output the linear system matrix/rhs for debugging purposes @@ -1097,10 +1097,10 @@ void SolverBase::setupSystem( DomainPartition & domain, localMatrix.setName( this->getName() + "/matrix" ); rhs.setName( this->getName() + "/rhs" ); - rhs.create( dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + rhs.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); solution.setName( this->getName() + "/solution" ); - solution.create( dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + solution.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); } void SolverBase::assembleSystem( real64 const GEOS_UNUSED_PARAM( time ), diff --git a/src/coreComponents/physicsSolvers/SolverBaseKernels.hpp b/src/coreComponents/physicsSolvers/SolverBaseKernels.hpp index fe51db4f353..7b12943aaca 100644 --- a/src/coreComponents/physicsSolvers/SolverBaseKernels.hpp +++ b/src/coreComponents/physicsSolvers/SolverBaseKernels.hpp @@ -271,7 +271,7 @@ class LinfResidualNormHelper globalResidualNorm.data(), localResidualNorm.size(), MpiWrapper::getMpiOp( MpiWrapper::Reduction::Max ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } }; @@ -313,12 +313,12 @@ class L2ResidualNormHelper sumLocalResidualNorm.data(), localResidualNorm.size(), MpiWrapper::getMpiOp( MpiWrapper::Reduction::Sum ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); MpiWrapper::allReduce( localResidualNormalizer.data(), sumLocalResidualNormalizer.data(), localResidualNormalizer.size(), MpiWrapper::getMpiOp( MpiWrapper::Reduction::Sum ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); for( integer i = 0; i < localResidualNorm.size(); ++i ) { globalResidualNorm[i] = sqrt( sumLocalResidualNorm[i] ) / sqrt( sumLocalResidualNormalizer[i] ); diff --git a/src/coreComponents/physicsSolvers/contact/ContactSolverBase.cpp b/src/coreComponents/physicsSolvers/contact/ContactSolverBase.cpp index bdf4ce38be4..2cef13dd221 100644 --- a/src/coreComponents/physicsSolvers/contact/ContactSolverBase.cpp +++ b/src/coreComponents/physicsSolvers/contact/ContactSolverBase.cpp @@ -179,7 +179,7 @@ void ContactSolverBase::computeFractureStateStatistics( MeshLevel const & mesh, totalCounter.data(), 4, MPI_SUM, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); numStick = totalCounter[0]; numNewSlip = totalCounter[1]; diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsAugmentedLagrangianContact.cpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsAugmentedLagrangianContact.cpp index 0da8a5c9a5a..5d7ba39a73b 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsAugmentedLagrangianContact.cpp +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsAugmentedLagrangianContact.cpp @@ -211,10 +211,10 @@ void SolidMechanicsAugmentedLagrangianContact::setupSystem( DomainPartition & do localMatrix.setName( this->getName() + "/localMatrix" ); rhs.setName( this->getName() + "/rhs" ); - rhs.create( dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + rhs.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); solution.setName( this->getName() + "/solution" ); - solution.create( dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + solution.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); } @@ -286,7 +286,7 @@ void SolidMechanicsAugmentedLagrangianContact::assembleSystem( real64 const time localRhs ); //ParallelMatrix parallel_matrix; - //parallel_matrix.create( localMatrix.toViewConst(), dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + //parallel_matrix.create( localMatrix.toViewConst(), dofManager.numLocalDofs(), MPI_COMM_GEOS ); //parallel_matrix.write("mech.mtx"); //abort(); @@ -466,8 +466,8 @@ real64 SolidMechanicsAugmentedLagrangianContact::calculateResidualNorm( real64 c } ); real64 const localResidualNorm[2] = { localSum.get(), SolidMechanicsLagrangianFEM::getMaxForce() }; - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); - int const numRanks = MpiWrapper::commSize( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); + int const numRanks = MpiWrapper::commSize( MPI_COMM_GEOS ); array1d< real64 > globalValues( numRanks * 2 ); // Everything is done on rank 0 @@ -476,7 +476,7 @@ real64 SolidMechanicsAugmentedLagrangianContact::calculateResidualNorm( real64 c globalValues.data(), 2, 0, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); if( rank==0 ) { @@ -488,7 +488,7 @@ real64 SolidMechanicsAugmentedLagrangianContact::calculateResidualNorm( real64 c } } - MpiWrapper::bcast( globalResidualNorm, 2, 0, MPI_COMM_GEOSX ); + MpiWrapper::bcast( globalResidualNorm, 2, 0, MPI_COMM_GEOS ); } ); real64 const bubbleResidualNorm = sqrt( globalResidualNorm[0] )/(globalResidualNorm[1]+1); // the + 1 is for the first @@ -724,7 +724,7 @@ bool SolidMechanicsAugmentedLagrangianContact::updateConfiguration( DomainPartit &hasConfigurationConvergedGlobally, 1, MPI_LAND, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); return hasConfigurationConvergedGlobally; diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.cpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.cpp index db31219f1aa..6e1653861c2 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.cpp +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.cpp @@ -237,10 +237,10 @@ void SolidMechanicsEmbeddedFractures::setupSystem( DomainPartition & domain, localMatrix.setName( this->getName() + "/localMatrix" ); rhs.setName( this->getName() + "/rhs" ); - rhs.create( dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + rhs.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); solution.setName( this->getName() + "/solution" ); - solution.create( dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + solution.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); } else { @@ -588,8 +588,8 @@ real64 SolidMechanicsEmbeddedFractures::calculateFractureResidualNorm( DomainPar real64 const localResidualNorm[2] = { localSum.get(), SolidMechanicsLagrangianFEM::getMaxForce() }; - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); - int const numRanks = MpiWrapper::commSize( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); + int const numRanks = MpiWrapper::commSize( MPI_COMM_GEOS ); array1d< real64 > globalValues( numRanks * 2 ); // Everything is done on rank 0 @@ -598,7 +598,7 @@ real64 SolidMechanicsEmbeddedFractures::calculateFractureResidualNorm( DomainPar globalValues.data(), 2, 0, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); if( rank==0 ) { @@ -610,7 +610,7 @@ real64 SolidMechanicsEmbeddedFractures::calculateFractureResidualNorm( DomainPar } } - MpiWrapper::bcast( globalResidualNorm, 2, 0, MPI_COMM_GEOSX ); + MpiWrapper::bcast( globalResidualNorm, 2, 0, MPI_COMM_GEOS ); } ); real64 const fractureResidualNorm = sqrt( globalResidualNorm[0] )/(globalResidualNorm[1]+1); // the + 1 is for the first @@ -798,7 +798,7 @@ bool SolidMechanicsEmbeddedFractures::updateConfiguration( DomainPartition & dom &hasConfigurationConvergedGlobally, 1, MPI_LAND, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); // for this solver it makes sense to reset the state. // if( !hasConfigurationConvergedGlobally ) diff --git a/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.cpp b/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.cpp index af11dbf16ff..8c8acc2ebcb 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.cpp @@ -586,12 +586,12 @@ void FlowSolverBase::findMinMaxElevationInEquilibriumTarget( DomainPartition & d maxElevation.data(), localMaxElevation.size(), MpiWrapper::getMpiOp( MpiWrapper::Reduction::Max ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); MpiWrapper::allReduce( localMinElevation.data(), minElevation.data(), localMinElevation.size(), MpiWrapper::getMpiOp( MpiWrapper::Reduction::Min ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } void FlowSolverBase::computeSourceFluxSizeScalingFactor( real64 const & time, @@ -641,7 +641,7 @@ void FlowSolverBase::computeSourceFluxSizeScalingFactor( real64 const & time, bcAllSetsSize.data(), bcAllSetsSize.size(), MpiWrapper::getMpiOp( MpiWrapper::Reduction::Sum ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } void FlowSolverBase::saveAquiferConvergedState( real64 const & time, @@ -725,7 +725,7 @@ void FlowSolverBase::saveAquiferConvergedState( real64 const & time, globalSumFluxes.data(), localSumFluxes.size(), MpiWrapper::getMpiOp( MpiWrapper::Reduction::Sum ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); // Step 3: we are ready to save the summed fluxes for each individual aquifer diff --git a/src/coreComponents/physicsSolvers/fluidFlow/ReactiveCompositionalMultiphaseOBL.cpp b/src/coreComponents/physicsSolvers/fluidFlow/ReactiveCompositionalMultiphaseOBL.cpp index f73e75e4a0b..b4c23209be8 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/ReactiveCompositionalMultiphaseOBL.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/ReactiveCompositionalMultiphaseOBL.cpp @@ -446,7 +446,7 @@ real64 ReactiveCompositionalMultiphaseOBL::scalingForSystemSolution( DomainParti } ); } ); - return LvArray::math::max( MpiWrapper::min( scalingFactor, MPI_COMM_GEOSX ), m_minScalingFactor ); + return LvArray::math::max( MpiWrapper::min( scalingFactor, MPI_COMM_GEOS ), m_minScalingFactor ); } bool ReactiveCompositionalMultiphaseOBL::checkSystemSolution( DomainPartition & domain, @@ -494,7 +494,7 @@ bool ReactiveCompositionalMultiphaseOBL::checkSystemSolution( DomainPartition & } ); } ); - return MpiWrapper::min( localCheck, MPI_COMM_GEOSX ); + return MpiWrapper::min( localCheck, MPI_COMM_GEOS ); } void ReactiveCompositionalMultiphaseOBL::applySystemSolution( DofManager const & dofManager, diff --git a/src/coreComponents/physicsSolvers/multiphysics/CoupledReservoirAndWellsBase.hpp b/src/coreComponents/physicsSolvers/multiphysics/CoupledReservoirAndWellsBase.hpp index 0a7cefde0ae..405c2d6421e 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/CoupledReservoirAndWellsBase.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/CoupledReservoirAndWellsBase.hpp @@ -169,10 +169,10 @@ class CoupledReservoirAndWellsBase : public CoupledSolver< RESERVOIR_SOLVER, WEL localMatrix.setName( this->getName() + "/localMatrix" ); rhs.setName( this->getName() + "/rhs" ); - rhs.create( dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + rhs.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); solution.setName( this->getName() + "/solution" ); - solution.create( dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + solution.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); } /**@}*/ diff --git a/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolver.cpp b/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolver.cpp index 1a450a63c52..5743772a144 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolver.cpp +++ b/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolver.cpp @@ -223,7 +223,7 @@ real64 HydrofractureSolver< POROMECHANICS_SOLVER >::fullyCoupledSolverStep( real &globallyFractured, 1, MPI_MAX, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); if( globallyFractured == 0 ) { @@ -470,10 +470,10 @@ void HydrofractureSolver< POROMECHANICS_SOLVER >::setupSystem( DomainPartition & localMatrix.setName( this->getName() + "/matrix" ); rhs.setName( this->getName() + "/rhs" ); - rhs.create( numLocalRows, MPI_COMM_GEOSX ); + rhs.create( numLocalRows, MPI_COMM_GEOS ); solution.setName( this->getName() + "/solution" ); - solution.create( numLocalRows, MPI_COMM_GEOSX ); + solution.create( numLocalRows, MPI_COMM_GEOS ); setUpDflux_dApertureMatrix( domain, dofManager, localMatrix ); } diff --git a/src/coreComponents/physicsSolvers/multiphysics/PoromechanicsSolver.hpp b/src/coreComponents/physicsSolvers/multiphysics/PoromechanicsSolver.hpp index 77eb3415787..9030f995508 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/PoromechanicsSolver.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/PoromechanicsSolver.hpp @@ -600,7 +600,7 @@ class PoromechanicsSolver : public CoupledSolver< FLOW_SOLVER, MECHANICS_SOLVER virtual void validateNonlinearAcceleration() override { - if( MpiWrapper::commSize( MPI_COMM_GEOSX ) > 1 ) + if( MpiWrapper::commSize( MPI_COMM_GEOS ) > 1 ) { GEOS_ERROR( "Nonlinear acceleration is not implemented for MPI runs" ); } diff --git a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.cpp b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.cpp index 7c495e62787..abd76e855ad 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.cpp +++ b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.cpp @@ -123,10 +123,10 @@ void SinglePhasePoromechanicsConformingFractures< FLOW_SOLVER >::setupSystem( Do localMatrix.assimilate< parallelDevicePolicy<> >( std::move( pattern ) ); rhs.setName( this->getName() + "/rhs" ); - rhs.create( numLocalRows, MPI_COMM_GEOSX ); + rhs.create( numLocalRows, MPI_COMM_GEOS ); solution.setName( this->getName() + "/solution" ); - solution.create( numLocalRows, MPI_COMM_GEOSX ); + solution.create( numLocalRows, MPI_COMM_GEOS ); setUpDflux_dApertureMatrix( domain, dofManager, localMatrix ); diff --git a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEmbeddedFractures.cpp b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEmbeddedFractures.cpp index 31ee97bdae4..deb60634c18 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEmbeddedFractures.cpp +++ b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEmbeddedFractures.cpp @@ -169,10 +169,10 @@ void SinglePhasePoromechanicsEmbeddedFractures::setupSystem( DomainPartition & d localMatrix.assimilate< parallelDevicePolicy<> >( std::move( pattern ) ); rhs.setName( this->getName() + "/rhs" ); - rhs.create( dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + rhs.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); solution.setName( this->getName() + "/solution" ); - solution.create( dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + solution.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); } void SinglePhasePoromechanicsEmbeddedFractures::addCouplingNumNonzeros( DomainPartition & domain, diff --git a/src/coreComponents/physicsSolvers/simplePDE/PhaseFieldDamageFEM.cpp b/src/coreComponents/physicsSolvers/simplePDE/PhaseFieldDamageFEM.cpp index 76075fa4591..a0098010c18 100644 --- a/src/coreComponents/physicsSolvers/simplePDE/PhaseFieldDamageFEM.cpp +++ b/src/coreComponents/physicsSolvers/simplePDE/PhaseFieldDamageFEM.cpp @@ -520,8 +520,8 @@ PhaseFieldDamageFEM::calculateResidualNorm( real64 const & GEOS_UNUSED_PARAM( ti // globalResidualNorm[1]: max of max force of each rank. Basically max force globally real64 globalResidualNorm[2] = {0, 0}; - const int rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); - const int size = MpiWrapper::commSize( MPI_COMM_GEOSX ); + const int rank = MpiWrapper::commRank( MPI_COMM_GEOS ); + const int size = MpiWrapper::commSize( MPI_COMM_GEOS ); array1d< real64 > globalValues( size * 2 ); // Everything is done on rank 0 @@ -530,7 +530,7 @@ PhaseFieldDamageFEM::calculateResidualNorm( real64 const & GEOS_UNUSED_PARAM( ti globalValues.data(), 2, 0, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); if( rank==0 ) { @@ -542,7 +542,7 @@ PhaseFieldDamageFEM::calculateResidualNorm( real64 const & GEOS_UNUSED_PARAM( ti } } - MpiWrapper::bcast( globalResidualNorm, 2, 0, MPI_COMM_GEOSX ); + MpiWrapper::bcast( globalResidualNorm, 2, 0, MPI_COMM_GEOS ); const real64 residual = sqrt( globalResidualNorm[0] ) / ( globalResidualNorm[1] ); diff --git a/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.cpp b/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.cpp index 8d10d11a3f5..23477cbf51c 100644 --- a/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.cpp +++ b/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.cpp @@ -507,7 +507,7 @@ real64 SolidMechanicsLagrangianFEM::solverStep( real64 const & time_n, &globallyFractured, 1, MPI_MAX, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } if( globallyFractured == 0 ) { @@ -718,7 +718,7 @@ void SolidMechanicsLagrangianFEM::applyDisplacementBCImplicit( real64 const time 3, MpiWrapper::getMpiOp( MpiWrapper::Reduction::Max ), 0, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); if( MpiWrapper::commRank() == 0 ) { @@ -1241,8 +1241,8 @@ SolidMechanicsLagrangianFEM:: // globalResidualNorm[1]: max of max force of each rank. Basically max force globally real64 globalResidualNorm[2] = {0, 0}; - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); - int const size = MpiWrapper::commSize( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); + int const size = MpiWrapper::commSize( MPI_COMM_GEOS ); array1d< real64 > globalValues( size * 2 ); // Everything is done on rank 0 @@ -1251,7 +1251,7 @@ SolidMechanicsLagrangianFEM:: globalValues.data(), 2, 0, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); if( rank==0 ) { @@ -1263,7 +1263,7 @@ SolidMechanicsLagrangianFEM:: } } - MpiWrapper::bcast( globalResidualNorm, 2, 0, MPI_COMM_GEOSX ); + MpiWrapper::bcast( globalResidualNorm, 2, 0, MPI_COMM_GEOS ); real64 const residual = sqrt( globalResidualNorm[0] ) / ( globalResidualNorm[1] + 1 ); // the + 1 is for the first diff --git a/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsMPM.cpp b/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsMPM.cpp index 13d29a203e1..08640b56332 100644 --- a/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsMPM.cpp +++ b/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsMPM.cpp @@ -561,7 +561,7 @@ void SolidMechanicsMPM::initialize( NodeManager & nodeManager, // Read and distribute BC table if( m_prescribedBcTable == 1 ) { - int rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int rank = MpiWrapper::commRank( MPI_COMM_GEOS ); int BCTableSize; std::vector< double > BCTable1D; // Need 1D version of BC table for MPI broadcast @@ -576,12 +576,12 @@ void SolidMechanicsMPM::initialize( NodeManager & nodeManager, BCTableSize = BCTable1D.size(); } - MPI_Bcast( &BCTableSize, 1, MPI_INT, 0, MPI_COMM_GEOSX ); // Broadcast the size of BCTable1D to other processes + MPI_Bcast( &BCTableSize, 1, MPI_INT, 0, MPI_COMM_GEOS ); // Broadcast the size of BCTable1D to other processes if( rank != 0 ) // All processes except for root resize their versions of BCTable1D { BCTable1D.resize( BCTableSize ); } - MPI_Bcast( BCTable1D.data(), BCTableSize, MPI_DOUBLE, 0, MPI_COMM_GEOSX ); // Broadcast BCTable1D to other processes + MPI_Bcast( BCTable1D.data(), BCTableSize, MPI_DOUBLE, 0, MPI_COMM_GEOS ); // Broadcast BCTable1D to other processes // Technically don't need to reshape BCTable1D into a 2D array, but it makes things more readable and should have little runtime penalty m_bcTable.resize( BCTableSize / 7, 7 ); // Initialize size of m_BCTable @@ -599,7 +599,7 @@ void SolidMechanicsMPM::initialize( NodeManager & nodeManager, if( m_prescribedBoundaryFTable == 1 ) { - int rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int rank = MpiWrapper::commRank( MPI_COMM_GEOS ); int FTableSize; std::vector< double > FTable1D; // Need 1D version of F table for MPI broadcast @@ -617,12 +617,12 @@ void SolidMechanicsMPM::initialize( NodeManager & nodeManager, FTableSize = FTable1D.size(); } - MPI_Bcast( &FTableSize, 1, MPI_INT, 0, MPI_COMM_GEOSX ); // Broadcast the size of FTable1D to other processes + MPI_Bcast( &FTableSize, 1, MPI_INT, 0, MPI_COMM_GEOS ); // Broadcast the size of FTable1D to other processes if( rank != 0 ) // All processes except for root resize their versions of FTable1D { FTable1D.resize( FTableSize ); } - MPI_Bcast( FTable1D.data(), FTableSize, MPI_DOUBLE, 0, MPI_COMM_GEOSX ); // Broadcast FTable1D to other processes + MPI_Bcast( FTable1D.data(), FTableSize, MPI_DOUBLE, 0, MPI_COMM_GEOS ); // Broadcast FTable1D to other processes // Techinically don't need to reshape FTable1D into a 2D array, but it makes things more readable and should have little runtime penalty m_fTable.resize( FTableSize / 4, 4 ); // Initialize size of m_fTable @@ -757,7 +757,7 @@ void SolidMechanicsMPM::initialize( NodeManager & nodeManager, } // Initialize reaction force history file and write its header - if( MpiWrapper::commRank( MPI_COMM_GEOSX ) == 0 && m_reactionHistory == 1 ) + if( MpiWrapper::commRank( MPI_COMM_GEOS ) == 0 && m_reactionHistory == 1 ) { std::ofstream file; file.open( "reactionHistory.csv", std::ios::out | std::ios::app ); @@ -827,7 +827,7 @@ void SolidMechanicsMPM::initialize( NodeManager & nodeManager, 1, MPI_DOUBLE, MPI_MIN, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); m_smallMass = fmin( globalMinMass * 1.0e-12, m_smallMass ); // Initialize deformation gradient and velocity gradient @@ -854,7 +854,7 @@ void SolidMechanicsMPM::initialize( NodeManager & nodeManager, } ); if( m_boxAverageHistory == 1 ) { - if( MpiWrapper::commRank( MPI_COMM_GEOSX ) == 0 ) + if( MpiWrapper::commRank( MPI_COMM_GEOS ) == 0 ) { std::ofstream file; file.open( "boxAverageHistory.csv", std::ios::out | std::ios::app ); @@ -865,7 +865,7 @@ void SolidMechanicsMPM::initialize( NodeManager & nodeManager, file.exceptions( file.exceptions() | std::ios::failbit | std::ifstream::badbit ); file << "Time, Sxx, Syy, Szz, Sxy, Syz, Sxz, Density, Damage" << std::endl; } - MpiWrapper::barrier( MPI_COMM_GEOSX ); // wait for the header to be written + MpiWrapper::barrier( MPI_COMM_GEOS ); // wait for the header to be written computeAndWriteBoxAverage( 0.0, 0.0, particleManager ); } @@ -888,7 +888,7 @@ void SolidMechanicsMPM::initialize( NodeManager & nodeManager, 1, MPI_INT, MPI_MAX, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); // Number of contact groups m_numContactGroups = maxGlobalGroupNumber + 1; @@ -973,9 +973,9 @@ real64 SolidMechanicsMPM::explicitStep( real64 const & time_n, //####################################################################################### - solverProfilingIf( "Perform particle ghosting", MpiWrapper::commSize( MPI_COMM_GEOSX ) > 1 && m_needsNeighborList == 1 ); + solverProfilingIf( "Perform particle ghosting", MpiWrapper::commSize( MPI_COMM_GEOS ) > 1 && m_needsNeighborList == 1 ); //####################################################################################### - if( MpiWrapper::commSize( MPI_COMM_GEOSX ) > 1 && m_needsNeighborList == 1 ) + if( MpiWrapper::commSize( MPI_COMM_GEOS ) > 1 && m_needsNeighborList == 1 ) { // Move everything into host memory space particleManager.forParticleSubRegions( [&]( ParticleSubRegion & subRegion ) @@ -1204,9 +1204,9 @@ real64 SolidMechanicsMPM::explicitStep( real64 const & time_n, //####################################################################################### - solverProfilingIf( "Particle repartitioning", MpiWrapper::commSize( MPI_COMM_GEOSX ) > 1 ); + solverProfilingIf( "Particle repartitioning", MpiWrapper::commSize( MPI_COMM_GEOS ) > 1 ); //####################################################################################### - if( MpiWrapper::commSize( MPI_COMM_GEOSX ) > 1 ) + if( MpiWrapper::commSize( MPI_COMM_GEOS ) > 1 ) { particleManager.forParticleSubRegions( [&]( ParticleSubRegion & subRegion ) { @@ -1465,7 +1465,7 @@ void SolidMechanicsMPM::applyEssentialBCs( const real64 dt, 1, MPI_DOUBLE, MPI_SUM, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } // Get end-of-step domain dimensions - note that m_domainExtent is updated later @@ -1475,7 +1475,7 @@ void SolidMechanicsMPM::applyEssentialBCs( const real64 dt, height = m_domainExtent[2] * (1.0 + m_domainL[2] * dt); // Write global reactions to file - if( MpiWrapper::commRank( MPI_COMM_GEOSX ) == 0 && m_reactionHistory == 1 ) + if( MpiWrapper::commRank( MPI_COMM_GEOS ) == 0 && m_reactionHistory == 1 ) { std::ofstream file; // can't enable exception now because of gcc bug that raises ios_base::failure with useless message @@ -1951,7 +1951,7 @@ void SolidMechanicsMPM::solverProfiling( std::string label ) { if( m_solverProfiling >= 1 ) { - MPI_Barrier( MPI_COMM_GEOSX ); + MPI_Barrier( MPI_COMM_GEOS ); GEOS_LOG_RANK_IF( m_solverProfiling == 2, label ); m_profilingTimes.push_back( MPI_Wtime() ); m_profilingLabels.push_back( label ); @@ -2195,13 +2195,13 @@ void SolidMechanicsMPM::optimizeBinSort( ParticleManager & particleManager ) 1, MPI_DOUBLE, MPI_SUM, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); MPI_Allreduce( &localNumberOfParticles, &globalNumberOfParticles, 1, MPI_INT, MPI_SUM, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); // Set bin size multiplier m_binSizeMultiplier = std::max( (int) std::round( globalWeightedMultiplier / globalNumberOfParticles ), 1 ); @@ -2754,12 +2754,12 @@ void SolidMechanicsMPM::computeAndWriteBoxAverage( const real64 dt, 1, MPI_DOUBLE, MPI_SUM, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); boxSums[i] = globalSum; } int rank; - MPI_Comm_rank( MPI_COMM_GEOSX, &rank ); + MPI_Comm_rank( MPI_COMM_GEOS, &rank ); if( rank == 0 ) { // Calculate the box volume @@ -3303,7 +3303,7 @@ void SolidMechanicsMPM::deleteBadParticles( ParticleManager & particleManager ) void SolidMechanicsMPM::printProfilingResults() { // Use MPI reduction to get the average elapsed time for each step on all partitions - int rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int rank = MpiWrapper::commRank( MPI_COMM_GEOS ); unsigned int numIntervals = m_profilingTimes.size() - 1; std::vector< real64 > timeIntervalsAllRanks( numIntervals ); @@ -3314,7 +3314,7 @@ void SolidMechanicsMPM::printProfilingResults() &totalStepTimeAllRanks, 1, MPI_SUM, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); // Get total CPU times for each queried time interval for( unsigned int i = 0; i < numIntervals; i++ ) @@ -3325,7 +3325,7 @@ void SolidMechanicsMPM::printProfilingResults() &timeIntervalAllRanks, 1, MPI_SUM, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); if( rank == 0 ) { timeIntervalsAllRanks[i] = timeIntervalAllRanks; @@ -3333,7 +3333,7 @@ void SolidMechanicsMPM::printProfilingResults() } // Print out solver profiling - MPI_Barrier( MPI_COMM_GEOSX ); + MPI_Barrier( MPI_COMM_GEOS ); if( rank == 0 ) { std::cout << "---------------------------------------------" << std::endl; diff --git a/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsStatistics.cpp b/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsStatistics.cpp index 3c1de5dc61a..ebcf06f5b0c 100644 --- a/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsStatistics.cpp +++ b/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsStatistics.cpp @@ -144,13 +144,13 @@ void SolidMechanicsStatistics::computeNodeStatistics( MeshLevel & mesh, real64 c nodeStatistics.maxDisplacement.data(), 3, MpiWrapper::getMpiOp( MpiWrapper::Reduction::Max ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); MpiWrapper::allReduce( nodeStatistics.minDisplacement.data(), nodeStatistics.minDisplacement.data(), 3, MpiWrapper::getMpiOp( MpiWrapper::Reduction::Min ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); GEOS_LOG_LEVEL_RANK_0( 1, GEOS_FMT( "{} (time {} s): Min displacement (X, Y, Z): {}, {}, {} m", getName(), time, nodeStatistics.minDisplacement[0], diff --git a/src/coreComponents/physicsSolvers/surfaceGeneration/EmbeddedSurfaceGenerator.cpp b/src/coreComponents/physicsSolvers/surfaceGeneration/EmbeddedSurfaceGenerator.cpp index 1406f2db933..c82afa916c3 100644 --- a/src/coreComponents/physicsSolvers/surfaceGeneration/EmbeddedSurfaceGenerator.cpp +++ b/src/coreComponents/physicsSolvers/surfaceGeneration/EmbeddedSurfaceGenerator.cpp @@ -338,8 +338,8 @@ void EmbeddedSurfaceGenerator::setGlobalIndices( ElementRegionManager & elemMana EmbeddedSurfaceSubRegion & embeddedSurfaceSubRegion ) { // Add new globalIndices - int const thisRank = MpiWrapper::commRank( MPI_COMM_GEOSX ); - int const commSize = MpiWrapper::commSize( MPI_COMM_GEOSX ); + int const thisRank = MpiWrapper::commRank( MPI_COMM_GEOS ); + int const commSize = MpiWrapper::commSize( MPI_COMM_GEOS ); localIndex_array numberOfSurfaceElemsPerRank( commSize ); localIndex_array globalIndexOffset( commSize ); diff --git a/src/coreComponents/physicsSolvers/surfaceGeneration/EmbeddedSurfacesParallelSynchronization.cpp b/src/coreComponents/physicsSolvers/surfaceGeneration/EmbeddedSurfacesParallelSynchronization.cpp index a22cb5ca657..e382fd1495e 100644 --- a/src/coreComponents/physicsSolvers/surfaceGeneration/EmbeddedSurfacesParallelSynchronization.cpp +++ b/src/coreComponents/physicsSolvers/surfaceGeneration/EmbeddedSurfacesParallelSynchronization.cpp @@ -397,7 +397,7 @@ void synchronizeNewNodes( MeshLevel & mesh, neighbor.mpiISendReceiveBufferSizes( commData.commID(), commData.mpiSendBufferSizeRequest( neighborIndex ), commData.mpiRecvBufferSizeRequest( neighborIndex ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } @@ -414,7 +414,7 @@ void synchronizeNewNodes( MeshLevel & mesh, neighbor.mpiISendReceiveBuffers( commData.commID(), commData.mpiSendBufferRequest( neighborIndex ), commData.mpiRecvBufferRequest( neighborIndex ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } @@ -472,7 +472,7 @@ void synchronizeNewSurfaces( MeshLevel & mesh, neighbor.mpiISendReceiveBufferSizes( commData.commID(), commData.mpiSendBufferSizeRequest( neighborIndex ), commData.mpiRecvBufferSizeRequest( neighborIndex ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } @@ -489,7 +489,7 @@ void synchronizeNewSurfaces( MeshLevel & mesh, neighbor.mpiISendReceiveBuffers( commData.commID(), commData.mpiSendBufferRequest( neighborIndex ), commData.mpiRecvBufferRequest( neighborIndex ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } @@ -543,7 +543,7 @@ void synchronizeFracturedElements( MeshLevel & mesh, neighbor.mpiISendReceiveBufferSizes( commData.commID(), commData.mpiSendBufferSizeRequest( neighborIndex ), commData.mpiRecvBufferSizeRequest( neighborIndex ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } @@ -560,7 +560,7 @@ void synchronizeFracturedElements( MeshLevel & mesh, neighbor.mpiISendReceiveBuffers( commData.commID(), commData.mpiSendBufferRequest( neighborIndex ), commData.mpiRecvBufferRequest( neighborIndex ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } diff --git a/src/coreComponents/physicsSolvers/surfaceGeneration/ParallelTopologyChange.cpp b/src/coreComponents/physicsSolvers/surfaceGeneration/ParallelTopologyChange.cpp index 70756adb587..22c2c3e792a 100644 --- a/src/coreComponents/physicsSolvers/surfaceGeneration/ParallelTopologyChange.cpp +++ b/src/coreComponents/physicsSolvers/surfaceGeneration/ParallelTopologyChange.cpp @@ -827,7 +827,7 @@ void parallelTopologyChange::synchronizeTopologyChange( MeshLevel * const mesh, neighbor.mpiISendReceiveBufferSizes( commData.commID(), commData.mpiSendBufferSizeRequest( neighborIndex ), commData.mpiRecvBufferSizeRequest( neighborIndex ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } @@ -845,7 +845,7 @@ void parallelTopologyChange::synchronizeTopologyChange( MeshLevel * const mesh, neighbor.mpiISendReceiveBuffers( commData.commID(), commData.mpiSendBufferRequest( neighborIndex ), commData.mpiRecvBufferRequest( neighborIndex ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } // unpack the buffers and get lists of the new objects. @@ -919,7 +919,7 @@ void parallelTopologyChange::synchronizeTopologyChange( MeshLevel * const mesh, neighbor.mpiISendReceiveBufferSizes( commData2.commID(), commData2.mpiSendBufferSizeRequest( neighborIndex ), commData2.mpiRecvBufferSizeRequest( neighborIndex ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } @@ -936,7 +936,7 @@ void parallelTopologyChange::synchronizeTopologyChange( MeshLevel * const mesh, neighbor.mpiISendReceiveBuffers( commData2.commID(), commData2.mpiSendBufferRequest( neighborIndex ), commData2.mpiRecvBufferRequest( neighborIndex ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); } diff --git a/src/coreComponents/physicsSolvers/surfaceGeneration/SurfaceGenerator.cpp b/src/coreComponents/physicsSolvers/surfaceGeneration/SurfaceGenerator.cpp index 45e37634fe4..839c31a7a48 100644 --- a/src/coreComponents/physicsSolvers/surfaceGeneration/SurfaceGenerator.cpp +++ b/src/coreComponents/physicsSolvers/surfaceGeneration/SurfaceGenerator.cpp @@ -4568,7 +4568,7 @@ SurfaceGenerator::calculateRuptureRate( SurfaceElementRegion & faceElementRegion &globalMaxRuptureRate, 1, MPI_MAX, - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); return globalMaxRuptureRate; } diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.cpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.cpp index 7243647cb26..0d5c2a7a354 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.cpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.cpp @@ -770,7 +770,7 @@ real64 AcousticWaveEquationSEM::explicitStepForward( real64 const & time_n, { if( !m_lifo ) { - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); std::string lifoPrefix = GEOS_FMT( "lifo/rank_{:05}/pdt2_shot{:06}", rank, m_shotIndex ); m_lifo = std::make_unique< LifoStorage< real32, localIndex > >( lifoPrefix, p_dt2, m_lifoOnDevice, m_lifoOnHost, m_lifoSize ); } @@ -792,7 +792,7 @@ real64 AcousticWaveEquationSEM::explicitStepForward( real64 const & time_n, { GEOS_MARK_SCOPE ( DirectWrite ); p_dt2.move( MemorySpace::host, false ); - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); std::string fileName = GEOS_FMT( "lifo/rank_{:05}/pressuredt2_{:06}_{:08}.dat", rank, m_shotIndex, cycleNumber ); int lastDirSeparator = fileName.find_last_of( "/\\" ); std::string dirName = fileName.substr( 0, lastDirSeparator ); @@ -861,7 +861,7 @@ real64 AcousticWaveEquationSEM::explicitStepBackward( real64 const & time_n, { GEOS_MARK_SCOPE ( DirectRead ); - int const rank = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); std::string fileName = GEOS_FMT( "lifo/rank_{:05}/pressuredt2_{:06}_{:08}.dat", rank, m_shotIndex, cycleNumber ); std::ifstream wf( fileName, std::ios::in | std::ios::binary ); GEOS_THROW_IF( !wf, diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEM.cpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEM.cpp index 1da70c10a3b..6a2d0d0d7d4 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEM.cpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEM.cpp @@ -849,7 +849,7 @@ void ElasticWaveEquationSEM::cleanup( real64 const time_n, dasReceivers.data(), m_linearDASGeometry.size( 0 ), MpiWrapper::getMpiOp( MpiWrapper::Reduction::Sum ), - MPI_COMM_GEOSX ); + MPI_COMM_GEOS ); WaveSolverUtils::writeSeismoTrace( "dasTraceReceiver", getName(), m_outputSeismoTrace, m_linearDASGeometry.size( 0 ), m_receiverIsLocal, m_nsamplesSeismoTrace, dasReceivers ); } diff --git a/src/coreComponents/unitTests/fileIOTests/testHDFFile.cpp b/src/coreComponents/unitTests/fileIOTests/testHDFFile.cpp index f9c43b2748d..7b28a1973f5 100644 --- a/src/coreComponents/unitTests/fileIOTests/testHDFFile.cpp +++ b/src/coreComponents/unitTests/fileIOTests/testHDFFile.cpp @@ -25,7 +25,7 @@ using namespace geos; TEST( testHDFIO, HDFFile ) { GEOS_MARK_FUNCTION; - HDFFile file( "empty", true, false, MPI_COMM_GEOSX ); + HDFFile file( "empty", true, false, MPI_COMM_GEOS ); hid_t file_id = H5Fcreate( "empty", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT ); H5Fclose( file_id ); } diff --git a/src/coreComponents/unitTests/fluidFlowTests/testCompFlowUtils.hpp b/src/coreComponents/unitTests/fluidFlowTests/testCompFlowUtils.hpp index 1cb32b3a79b..595420857a2 100644 --- a/src/coreComponents/unitTests/fluidFlowTests/testCompFlowUtils.hpp +++ b/src/coreComponents/unitTests/fluidFlowTests/testCompFlowUtils.hpp @@ -65,7 +65,7 @@ void setupProblemFromXML( ProblemManager & problemManager, char const * const xm GEOS_LOG_RANK_0( "Error offset: " << xmlResult.offset ); } - int mpiSize = MpiWrapper::commSize( MPI_COMM_GEOSX ); + int mpiSize = MpiWrapper::commSize( MPI_COMM_GEOS ); dataRepository::Group & commandLine = problemManager.getGroup< dataRepository::Group >( problemManager.groupKeys.commandLine ); diff --git a/src/coreComponents/unitTests/fluidFlowTests/testSingleFlowUtils.hpp b/src/coreComponents/unitTests/fluidFlowTests/testSingleFlowUtils.hpp index 1d4cc06ffd0..115e6ef2d2a 100644 --- a/src/coreComponents/unitTests/fluidFlowTests/testSingleFlowUtils.hpp +++ b/src/coreComponents/unitTests/fluidFlowTests/testSingleFlowUtils.hpp @@ -62,7 +62,7 @@ void setupProblemFromXML( ProblemManager & problemManager, char const * const xm GEOS_LOG_RANK_0( "Error offset: " << xmlResult.offset ); } - int mpiSize = MpiWrapper::commSize( MPI_COMM_GEOSX ); + int mpiSize = MpiWrapper::commSize( MPI_COMM_GEOS ); dataRepository::Group & commandLine = problemManager.getGroup< dataRepository::Group >( problemManager.groupKeys.commandLine ); diff --git a/src/coreComponents/unitTests/linearAlgebraTests/testDofManager.cpp b/src/coreComponents/unitTests/linearAlgebraTests/testDofManager.cpp index d0a6deb12ac..0e5d60d5f49 100644 --- a/src/coreComponents/unitTests/linearAlgebraTests/testDofManager.cpp +++ b/src/coreComponents/unitTests/linearAlgebraTests/testDofManager.cpp @@ -588,7 +588,7 @@ void DofManagerSparsityTest< LAI >::test( std::vector< FieldDesc > fields, dofManager.setSparsityPattern( localPattern ); CRSMatrix< real64, globalIndex > localMatrix; localMatrix.assimilate< parallelHostPolicy >( std::move( localPattern ) ); - pattern.create( localMatrix.toViewConst(), dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + pattern.create( localMatrix.toViewConst(), dofManager.numLocalDofs(), MPI_COMM_GEOS ); pattern.set( 1.0 ); } @@ -626,7 +626,7 @@ void DofManagerSparsityTest< LAI >::test( std::vector< FieldDesc > fields, f2.components, localPatternExpected ); } - patternExpected.create( localPatternExpected.toViewConst(), dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + patternExpected.create( localPatternExpected.toViewConst(), dofManager.numLocalDofs(), MPI_COMM_GEOS ); // Compare the sparsity patterns pattern.set( 1.0 ); @@ -873,7 +873,7 @@ void DofManagerRestrictorTest< LAI >::test( std::vector< FieldDesc > fields, dofManager.setSparsityPattern( localPattern ); CRSMatrix< real64, globalIndex > localMatrix; localMatrix.assimilate< parallelHostPolicy >( std::move( localPattern ) ); - A.create( localMatrix.toViewConst(), dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + A.create( localMatrix.toViewConst(), dofManager.numLocalDofs(), MPI_COMM_GEOS ); A.set( 1.0 ); } @@ -925,7 +925,7 @@ void DofManagerRestrictorTest< LAI >::test( std::vector< FieldDesc > fields, dofManager.setSparsityPattern( localPattern ); CRSMatrix< real64, globalIndex > localMatrix; localMatrix.assimilate< parallelHostPolicy >( std::move( localPattern ) ); - B.create( localMatrix.toViewConst(), dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + B.create( localMatrix.toViewConst(), dofManager.numLocalDofs(), MPI_COMM_GEOS ); B.set( 1.0 ); } diff --git a/src/coreComponents/unitTests/linearAlgebraTests/testDofManagerUtils.hpp b/src/coreComponents/unitTests/linearAlgebraTests/testDofManagerUtils.hpp index 81432c7dc07..8183cd11111 100644 --- a/src/coreComponents/unitTests/linearAlgebraTests/testDofManagerUtils.hpp +++ b/src/coreComponents/unitTests/linearAlgebraTests/testDofManagerUtils.hpp @@ -47,7 +47,7 @@ void setupProblemFromXML( ProblemManager * const problemManager, char const * co GEOS_LOG_RANK_0( "Error offset: " << xmlResult.offset ); } - int mpiSize = MpiWrapper::commSize( MPI_COMM_GEOSX ); + int mpiSize = MpiWrapper::commSize( MPI_COMM_GEOS ); dataRepository::Group & commandLine = problemManager->getGroup< dataRepository::Group >( problemManager->groupKeys.commandLine ); commandLine.registerWrapper< integer >( problemManager->viewKeys.xPartitionsOverride.key() ). diff --git a/src/coreComponents/unitTests/linearAlgebraTests/testLAIHelperFunctions.cpp b/src/coreComponents/unitTests/linearAlgebraTests/testLAIHelperFunctions.cpp index a6f4dbe0364..38a1d84de3b 100644 --- a/src/coreComponents/unitTests/linearAlgebraTests/testLAIHelperFunctions.cpp +++ b/src/coreComponents/unitTests/linearAlgebraTests/testLAIHelperFunctions.cpp @@ -116,7 +116,7 @@ TYPED_TEST_P( LAIHelperFunctionsTest, nodalVectorPermutation ) dofManager.reorderByRank(); Vector nodalVariable; - nodalVariable.create( dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + nodalVariable.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); globalIndex const rankOffset = dofManager.rankOffset(); arrayView1d< real64 > const nodalVariableView = nodalVariable.open(); @@ -167,7 +167,7 @@ TYPED_TEST_P( LAIHelperFunctionsTest, cellCenteredVectorPermutation ) dofManager.reorderByRank(); Vector cellCenteredVariable; - cellCenteredVariable.create( dofManager.numLocalDofs(), MPI_COMM_GEOSX ); + cellCenteredVariable.create( dofManager.numLocalDofs(), MPI_COMM_GEOS ); globalIndex const rankOffset = dofManager.rankOffset(); arrayView1d< real64 > const cellCenteredVariableView = cellCenteredVariable.open(); diff --git a/src/coreComponents/unitTests/meshTests/testNeighborCommunicator.cpp b/src/coreComponents/unitTests/meshTests/testNeighborCommunicator.cpp index 55997a55102..3302fd488ab 100644 --- a/src/coreComponents/unitTests/meshTests/testNeighborCommunicator.cpp +++ b/src/coreComponents/unitTests/meshTests/testNeighborCommunicator.cpp @@ -85,7 +85,7 @@ TEST( TestNeighborComms, testMPICommunication_fromPinnedSetOnDevice ) { SKIP_TEST_IN_SERIAL( "Parallel test" ); { - int rnk = MpiWrapper::commRank( MPI_COMM_GEOSX ); + int rnk = MpiWrapper::commRank( MPI_COMM_GEOS ); constexpr localIndex size = 1000; constexpr localIndex byte_size = 1000 * sizeof(int); @@ -104,11 +104,11 @@ TEST( TestNeighborComms, testMPICommunication_fromPinnedSetOnDevice ) veloc.move( parallelDeviceMemorySpace ); auto veloc_view = veloc.toViewConst(); pack( buf, veloc_view, size ); - MpiWrapper::iSend( buf, byte_size, 1, 0, MPI_COMM_GEOSX, &request ); + MpiWrapper::iSend( buf, byte_size, 1, 0, MPI_COMM_GEOS, &request ); } else { - int err = MpiWrapper::iRecv( buf, byte_size, 0, 0, MPI_COMM_GEOSX, &request ); + int err = MpiWrapper::iRecv( buf, byte_size, 0, 0, MPI_COMM_GEOS, &request ); EXPECT_EQ( err, MPI_SUCCESS ); MPI_Status status; err = MpiWrapper::Wait( &request, &status ); From 41b10186ebc34c7d67237c85d93757b05d9edc7a Mon Sep 17 00:00:00 2001 From: Matteo Cusini <49037133+CusiniM@users.noreply.github.com> Date: Fri, 2 Aug 2024 22:21:56 +0100 Subject: [PATCH 02/42] chore: Update hypre (#3261) --- .devcontainer/devcontainer.json | 2 +- .github/workflows/ci_tests.yml | 22 ------------------- src/coreComponents/LvArray | 2 +- .../interfaces/hypre/HypreMatrix.cpp | 4 +++- 4 files changed, 5 insertions(+), 25 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0709f76979f..d40722ebd77 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,7 +2,7 @@ "build": { "dockerfile": "Dockerfile", "args": { - "GEOS_TPL_TAG": "275-480" + "GEOS_TPL_TAG": "278-500" } }, "runArgs": [ diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index 3dbd60a303f..4d860f4c80c 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -177,14 +177,6 @@ jobs: ENABLE_HYPRE: ON ENABLE_TRILINOS: OFF - - name: Sherlock CPU (centos 7.9.2009, gcc 10.1.0, open-mpi 4.1.2, openblas 0.3.10) - CMAKE_BUILD_TYPE: Release - DOCKER_REPOSITORY: geosx/sherlock-gcc10.1.0-openmpi4.1.2-openblas0.3.10-zlib1.2.11 - ENABLE_HYPRE: ON - ENABLE_TRILINOS: OFF - GCP_BUCKET: geosx/Sherlock-CPU - HOST_CONFIG: host-configs/Stanford/sherlock-gcc10-ompi4.1.2-openblas0.3.10.cmake - uses: ./.github/workflows/build_and_test.yml with: CMAKE_BUILD_TYPE: ${{ matrix.CMAKE_BUILD_TYPE }} @@ -323,20 +315,6 @@ jobs: # DOCKER_CERTS_UPDATE_COMMAND: "update-ca-trust" # Below this line, jobs that deploy to Google Cloud. - - name: Sherlock GPU (centos 7.9.2009, gcc 10.1.0, open-mpi 4.1.2, openblas 0.3.10, cuda 11.7.1,) - BUILD_AND_TEST_CLI_ARGS: "--no-run-unit-tests --no-install-schema" - CMAKE_BUILD_TYPE: Release - DOCKER_REPOSITORY: geosx/sherlock-gcc10.1.0-openmpi4.1.2-cuda11.7.1-openblas0.3.10-zlib1.2.11 - ENABLE_HYPRE_DEVICE: CUDA - ENABLE_HYPRE: ON - ENABLE_TRILINOS: OFF - GCP_BUCKET: geosx/Sherlock-GPU - HOST_CONFIG: host-configs/Stanford/sherlock-gcc10-ompi4.1.2-openblas0.3.10-cuda11.7.1-sm70.cmake - RUNS_ON: streak2 - NPROC: 8 - DOCKER_RUN_ARGS: "--cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/ca-trust/source/anchors/:/etc/pki/ca-trust/source/anchors/llnl:ro" - DOCKER_CERTS_DIR: "/etc/pki/ca-trust/source/anchors" - DOCKER_CERTS_UPDATE_COMMAND: "update-ca-trust" uses: ./.github/workflows/build_and_test.yml with: diff --git a/src/coreComponents/LvArray b/src/coreComponents/LvArray index e7bf1096d57..02ce362c009 160000 --- a/src/coreComponents/LvArray +++ b/src/coreComponents/LvArray @@ -1 +1 @@ -Subproject commit e7bf1096d57558be720f177141c40e4ab69b3f5e +Subproject commit 02ce362c009f11ddb2ade0286df23408d7334c4f diff --git a/src/coreComponents/linearAlgebra/interfaces/hypre/HypreMatrix.cpp b/src/coreComponents/linearAlgebra/interfaces/hypre/HypreMatrix.cpp index f6607a1d76a..5791fe129cd 100644 --- a/src/coreComponents/linearAlgebra/interfaces/hypre/HypreMatrix.cpp +++ b/src/coreComponents/linearAlgebra/interfaces/hypre/HypreMatrix.cpp @@ -1053,8 +1053,10 @@ void HypreMatrix::getRowCopy( globalIndex const globalRowIndex, -1, &numEntries, &row, + nullptr, hypre::toHypreBigInt( colIndices ), - values ) ); + values, + 0 ) ); } void HypreMatrix::extractDiagonal( HypreVector & dst ) const From b31d792bbf70f9859c44fd6e2c95558d2832c2d3 Mon Sep 17 00:00:00 2001 From: Randolph Settgast Date: Sat, 3 Aug 2024 17:58:36 -1000 Subject: [PATCH 03/42] fix: Fix segfault in table (#3268) * change a range based loop that modifies the ranged container to a standard iterator loop. Isolate busted range bound in std::vector usage --- src/coreComponents/LvArray | 2 +- src/coreComponents/fileIO/Table/TableFormatter.cpp | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/coreComponents/LvArray b/src/coreComponents/LvArray index 02ce362c009..e7bf1096d57 160000 --- a/src/coreComponents/LvArray +++ b/src/coreComponents/LvArray @@ -1 +1 @@ -Subproject commit 02ce362c009f11ddb2ade0286df23408d7334c4f +Subproject commit e7bf1096d57558be720f177141c40e4ab69b3f5e diff --git a/src/coreComponents/fileIO/Table/TableFormatter.cpp b/src/coreComponents/fileIO/Table/TableFormatter.cpp index 8d564e83ce5..d6e145b6a9c 100644 --- a/src/coreComponents/fileIO/Table/TableFormatter.cpp +++ b/src/coreComponents/fileIO/Table/TableFormatter.cpp @@ -103,17 +103,21 @@ void formatColumnsFromLayout( std::vector< TableLayout::Column > & columns, std::vector< std::vector< string > > & tableDataRows ) { integer idxColumn = 0; - for( auto & column : columns ) + for( auto iterColumn = columns.begin(); iterColumn!=columns.end(); ) { - if( !column.m_parameter.enabled ) + if( !iterColumn->m_parameter.enabled ) { - columns.erase( columns.begin() + idxColumn ); + iterColumn = columns.erase( iterColumn ); for( auto & row : tableDataRows ) { row.erase( row.begin() + idxColumn ); } } - ++idxColumn; + else + { + ++iterColumn; + ++idxColumn; + } } } @@ -377,7 +381,7 @@ void TableTextFormatter::outputSectionRows( std::vector< TableLayout::Column > c auto const & columnContent = section == TableLayout::Section::header ? columns[idxColumn].m_parameter.splitColumnNameLines : columns[idxColumn].m_columnValues; - string cell = columnContent[idxRow]; + string cell = columnContent.at( idxRow ); integer const cellSize = currentColumn.m_maxStringSize.length(); tableOutput << buildCell( currentColumn.m_parameter.alignment, cell, cellSize ); From 23acc39e9cd6bcb1593c5828750ea8390b82bdb4 Mon Sep 17 00:00:00 2001 From: Stefano Frambati Date: Mon, 5 Aug 2024 08:25:42 +0200 Subject: [PATCH 04/42] fix: robust point location for degenerate configurations (#3202) * implemented method based on winding number * using element global index for element choice in degenerate cases * added global id criterion for points coincident with vertices, as well * using base discretization for precomputing src/rcv * enabled for high orders. Also removed extra high-order nodes where not needed --------- Co-authored-by: Aurelien Co-authored-by: acitrain <60715545+acitrain@users.noreply.github.com> --- .integrated_tests.yaml | 2 +- BASELINE_NOTES.md | 4 + .../mesh/utilities/ComputationalGeometry.hpp | 397 +++++++++++++++++- .../AcousticFirstOrderWaveEquationSEM.cpp | 45 +- .../AcousticFirstOrderWaveEquationSEM.hpp | 3 +- .../AcousticVTIWaveEquationSEM.cpp | 44 +- .../AcousticVTIWaveEquationSEM.hpp | 3 +- .../AcousticVTIWaveEquationSEMKernel.hpp | 73 ++-- .../isotropic/AcousticWaveEquationSEM.cpp | 43 +- .../isotropic/AcousticWaveEquationSEM.hpp | 3 +- .../ElasticFirstOrderWaveEquationSEM.cpp | 44 +- .../ElasticFirstOrderWaveEquationSEM.hpp | 3 +- .../isotropic/ElasticWaveEquationSEM.cpp | 38 +- .../isotropic/ElasticWaveEquationSEM.hpp | 4 +- .../PrecomputeSourcesAndReceiversKernel.hpp | 195 +++++---- .../wavePropagation/shared/WaveSolverBase.hpp | 3 +- .../shared/WaveSolverUtils.hpp | 8 +- 17 files changed, 692 insertions(+), 220 deletions(-) diff --git a/.integrated_tests.yaml b/.integrated_tests.yaml index ed7b9c4e39e..440853cc61d 100644 --- a/.integrated_tests.yaml +++ b/.integrated_tests.yaml @@ -1,6 +1,6 @@ baselines: bucket: geosx - baseline: integratedTests/baseline_integratedTests-pr3215-6396-9b43cc8 + baseline: integratedTests/baseline_integratedTests-pr3202-6636-2821c93 allow_fail: all: '' diff --git a/BASELINE_NOTES.md b/BASELINE_NOTES.md index fff3d8f8311..dd686fc7877 100644 --- a/BASELINE_NOTES.md +++ b/BASELINE_NOTES.md @@ -6,6 +6,10 @@ This file is designed to track changes to the integrated test baselines. Any developer who updates the baseline ID in the .integrated_tests.yaml file is expected to create an entry in this file with the pull request number, date, and their justification for rebaselining. These notes should be in reverse-chronological order, and use the following time format: (YYYY-MM-DD). +PR #3202 (2024-08-03) +====================== +Acoustic VTI tests needed rebaselining after update in source and receiver location algorithm. + PR #3215 (2024-07-23) ====================== Changed the default value for massCreation and name of the wrapper. diff --git a/src/coreComponents/mesh/utilities/ComputationalGeometry.hpp b/src/coreComponents/mesh/utilities/ComputationalGeometry.hpp index 0227bd7d28b..63c33ffd332 100644 --- a/src/coreComponents/mesh/utilities/ComputationalGeometry.hpp +++ b/src/coreComponents/mesh/utilities/ComputationalGeometry.hpp @@ -381,7 +381,6 @@ int sign( T const val ) return (T( 0 ) < val) - (val < T( 0 )); } - /** * @brief Check if a point is inside a convex polyhedron (3D polygon) * @tparam POINT_TYPE type of @p point @@ -435,6 +434,402 @@ bool isPointInsidePolyhedron( arrayView2d< real64 const, nodes::REFERENCE_POSITI } +/** + * @brief Method to perform lexicographic comparison of two nodes based on coordinates. + * @tparam COORD_TYPE type of coordinate + * @tparam POINT_TYPE type of point + * @param[in] ax x-coordinate of the first vertex + * @param[in] ay y-coordinate of the first vertex + * @param[in] az z-coordinate of the first vertex + * @param[in] bx x-coordinate of the second vertex + * @param[in] by y-coordinate of the second vertex + * @param[in] bz z-coordinate of the second vertex + * @return 0 if the vertices coincide, +1 if a > b and -1 if b > a + */ +template< typename COORD_TYPE, typename POINT_TYPE > +GEOS_HOST_DEVICE +int lexicographicalCompareVertex( POINT_TYPE const ax, POINT_TYPE const ay, POINT_TYPE const az, + COORD_TYPE const bx, COORD_TYPE const by, COORD_TYPE const bz ) +{ + if( ax < bx ) + return -1; + else if( ax > bx ) + return 1; + if( ay < by ) + return -1; + else if( ay > by ) + return 1; + if( az < bz ) + return -1; + else if( az > bz ) + return 1; + return 0; +} + +/** + * @brief Method to perform lexicographic comparison of a node and an edge based on coordinates. + * @tparam COORD_TYPE type of coordinate + * @tparam POINT_TYPE type of point + * @param[in] ax x-coordinate of the first vertex + * @param[in] ay y-coordinate of the first vertex + * @param[in] az z-coordinate of the first vertex + * @param[in] e1x x-coordinate of the first edge vertex + * @param[in] e1y y-coordinate of the first edge vertex + * @param[in] e1z z-coordinate of the first edge vertex + * @param[in] e2x x-coordinate of the second edge vertex + * @param[in] e2y y-coordinate of the second edge vertex + * @param[in] e2z z-coordinate of the second edge vertex + * @return 0 if the vertices lies on the edge, +1 if e > a and -1 if a > e + */ +template< typename COORD_TYPE, typename POINT_TYPE > +GEOS_HOST_DEVICE +int lexicographicalCompareEdge( POINT_TYPE const ax, POINT_TYPE const ay, POINT_TYPE const az, + COORD_TYPE const e1x, COORD_TYPE const e1y, COORD_TYPE const e1z, + COORD_TYPE const e2x, COORD_TYPE const e2y, COORD_TYPE const e2z ) +{ + return lexicographicalCompareVertex( ( e1y - ay ) * ( e2x - ax ), + ( e1z - az ) * ( e2x - ax ), + ( e1z - az ) * ( e2y - ay ), + ( e1x - ax ) * ( e2y - ay ), + ( e1x - ax ) * ( e2z - az ), + ( e1y - ay ) * ( e2z - az ) ); +} + +/** + * @brief Method to perform lexicographic comparison of a node and a triangle based on coordinates. + * @tparam COORD_TYPE type of coordinate + * @tparam POINT_TYPE type of point + * @param[in] ax x-coordinate of the first vertex + * @param[in] ay y-coordinate of the first vertex + * @param[in] az z-coordinate of the first vertex + * @param[in] t1x x-coordinate of the first triangle vertex + * @param[in] t1y y-coordinate of the first triangle vertex + * @param[in] t1z z-coordinate of the first triangle vertex + * @param[in] t2x x-coordinate of the second triangle vertex + * @param[in] t2y y-coordinate of the second triangle vertex + * @param[in] t2z z-coordinate of the second triangle vertex + * @param[in] t3x x-coordinate of the third triangle vertex + * @param[in] t3y y-coordinate of the third triangle vertex + * @param[in] t3z z-coordinate of the third triangle vertex + * @return 0 if the vertices lies on the triangle, +1 if t > a and -1 if t > e + */ +template< typename COORD_TYPE, typename POINT_TYPE > +GEOS_HOST_DEVICE +int lexicographicalCompareTriangle( POINT_TYPE const ax, POINT_TYPE const ay, POINT_TYPE const az, + COORD_TYPE const t1x, COORD_TYPE const t1y, COORD_TYPE const t1z, + COORD_TYPE const t2x, COORD_TYPE const t2y, COORD_TYPE const t2z, + COORD_TYPE const t3x, COORD_TYPE const t3y, COORD_TYPE const t3z ) +{ + COORD_TYPE v1x = t1x - ax; + COORD_TYPE v1y = t1y - ay; + COORD_TYPE v1z = t1z - az; + COORD_TYPE v2x = t2x - ax; + COORD_TYPE v2y = t2y - ay; + COORD_TYPE v2z = t2z - az; + COORD_TYPE v3x = t3x - ax; + COORD_TYPE v3y = t3y - ay; + COORD_TYPE v3z = t3z - az; + COORD_TYPE sign = ( v1x * v2y - v1y * v2x ) * v3z + + ( v2x * v3y - v2y * v3x ) * v1z + + ( v3x * v1y - v3y * v1x ) * v2z; + if( sign > 0 ) + return 1; + else if( sign < 0 ) + return -1; + return 0; +} +/** + * @brief Method to find the reference element touching a vertex. The element with the lowest global ID is chosen + * from the list. + * @param[in] nodeElements the list of elements adjacent to the vertex + * @param[in] elementGlobalIndex the global IDs for elements + * @return element touching the vertex with the least global index + */ +template< typename ... LIST_TYPE > +GEOS_HOST_DEVICE +int findVertexRefElement( arraySlice1d< localIndex const > const & nodeElements, + arrayView1d< globalIndex const > const & elementGlobalIndex ) +{ + localIndex minElement = -1; + globalIndex minElementGID = std::numeric_limits< globalIndex >::max(); + for( int i = 0; i < nodeElements.size(); i++ ) + { + localIndex e = nodeElements( i ); + if( elementGlobalIndex[ e ] < minElementGID ) + { + minElementGID = elementGlobalIndex[ e ]; + minElement = e; + } + } + return minElement; +} + +/** + * @brief Method to find the reference element for an edge. The element with the lowest global ID is chosen + * from the list. + * @param[in] nodeElements1 the list of elements adjacent to the first node + * @param[in] nodeElements2 the list of elements adjacent to the second node + * @param[in] elementGlobalIndex the global IDs for elements + * @return the element shared by the two nodes, with the minimal global index + */ +template< typename ... LIST_TYPE > +GEOS_HOST_DEVICE +int findEdgeRefElement( arraySlice1d< localIndex const > const & nodeElements1, + arraySlice1d< localIndex const > const & nodeElements2, + arrayView1d< globalIndex const > const & elementGlobalIndex ) +{ + localIndex minElement = -1; + globalIndex minElementGID = std::numeric_limits< globalIndex >::max(); + for( int i = 0; i < nodeElements1.size(); i++ ) + { + localIndex e1 = nodeElements1( i ); + for( int j = 0; j < nodeElements2.size(); j++ ) + { + localIndex e2 = nodeElements2( j ); + if( e1 == e2 ) + { + if( elementGlobalIndex[ e1 ] < minElementGID ) + { + minElementGID = elementGlobalIndex[ e1 ]; + minElement = e1; + } + } + } + } + return minElement; +} + +/** + * @brief Method to find the reference element for a triangle. The element with the lowest global ID is chosen + * from the list. + * @param[in] nodeElements1 the list of elements adjacent to the first node + * @param[in] nodeElements2 the list of elements adjacent to the second node + * @param[in] nodeElements3 the list of elements adjacent to the third node + * @param[in] elementGlobalIndex the global IDs for elements + * @return the element shared by the three nodes, with the minimal global index + */ +template< typename ... LIST_TYPE > +GEOS_HOST_DEVICE +int findTriangleRefElement( arraySlice1d< localIndex const > const & nodeElements1, + arraySlice1d< localIndex const > const & nodeElements2, + arraySlice1d< localIndex const > const & nodeElements3, + arrayView1d< globalIndex const > const & elementGlobalIndex ) +{ + localIndex minElement = -1; + globalIndex minElementGID = std::numeric_limits< globalIndex >::max(); + for( int i = 0; i < nodeElements1.size(); i++ ) + { + localIndex e1 = nodeElements1( i ); + for( int j = 0; j < nodeElements2.size(); j++ ) + { + localIndex e2 = nodeElements2( j ); + for( int k = 0; k < nodeElements3.size(); k++ ) + { + localIndex e3 = nodeElements3( k ); + if( e1 == e2 && e2 == e3 ) + { + if( elementGlobalIndex[ e1 ] < minElementGID ) + { + minElementGID = elementGlobalIndex[ e1 ]; + minElement = e1; + } + } + } + } + } + return minElement; +} + +/** + * @brief Computes the winding number of a point with respecto to a mesh element. + * @tparam POINT_TYPE type of @p point + * @param[in] element the element to be checked + * @param[in] nodeCoordinates a global array of nodal coordinates + * @param[in] elementsToFaces map from elements to faces + * @param[in] facesToNodes map from faces to nodes + * @param[in] nodesToElements map from nodes to elements + * @param[in] nodeLocalToGlobal global indices of nodes + * @param[in] elementLocalToGlobal global indices of elements + * @param[in] elemCenter coordinates of the element centroid + * @param[in] point coordinates of the query point + * @return the signed winding number, which is positive if and only if the point is inside the mesh element. + */ +template< typename COORD_TYPE, typename POINT_TYPE > +GEOS_HOST_DEVICE +bool computeWindingNumber( localIndex element, + arrayView2d< COORD_TYPE const, nodes::REFERENCE_POSITION_USD > const & nodeCoordinates, + arrayView2d< localIndex const > const & elementsToFaces, + ArrayOfArraysView< localIndex const > const & facesToNodes, + ArrayOfArraysView< localIndex const > const & nodesToElements, + arrayView1d< globalIndex const > const & nodeLocalToGlobal, + arrayView1d< globalIndex const > const & elementLocalToGlobal, + POINT_TYPE const & elemCenter, + POINT_TYPE const & point ) +{ + arraySlice1d< localIndex const > const & faceIndices = elementsToFaces[ element ]; + localIndex const numFaces = faceIndices.size(); + int omega = 0; + for( localIndex kf = 0; kf < numFaces; ++kf ) + { + // triangulate the face. The triangulation must be done in a consistent way across ranks. + // This can be achieved by always picking the vertex with the lowest global index as root. + localIndex const faceIndex = faceIndices[kf]; + globalIndex minGlobalId = std::numeric_limits< globalIndex >::max(); + localIndex minVertex = -1; + localIndex numFaceVertices = facesToNodes[faceIndex].size(); + for( localIndex v = 0; v < numFaceVertices; v++ ) + { + localIndex vIndex = facesToNodes( faceIndex, v ); + globalIndex globalId = nodeLocalToGlobal[ vIndex ]; + if( globalId < minGlobalId ) + { + minGlobalId = globalId; + minVertex = vIndex; + } + } + // triangulate the face using the minimum-id vertex as root + localIndex vi[ 3 ] = { minVertex, -1, -1 }; + for( localIndex v = 0; v < numFaceVertices; v++ ) + { + vi[ 1 ] = facesToNodes( faceIndex, v ); + vi[ 2 ] = facesToNodes( faceIndex, (v + 1) % numFaceVertices ); + if( vi[ 1 ] != minVertex && vi[ 2 ] != minVertex ) + { + // To make the algorithm independent of rank, always take the two additional vertices in increasing global ID + if( nodeLocalToGlobal[ vi[ 1 ] ] > nodeLocalToGlobal[ vi[ 2 ] ] ) + { + localIndex temp = vi[ 1 ]; + vi[ 1 ] = vi[ 2 ]; + vi[ 2 ] = temp; + } + COORD_TYPE v1x = nodeCoordinates( vi[ 0 ], 0 ); + COORD_TYPE v1y = nodeCoordinates( vi[ 0 ], 1 ); + COORD_TYPE v1z = nodeCoordinates( vi[ 0 ], 2 ); + COORD_TYPE v2x = nodeCoordinates( vi[ 1 ], 0 ); + COORD_TYPE v2y = nodeCoordinates( vi[ 1 ], 1 ); + COORD_TYPE v2z = nodeCoordinates( vi[ 1 ], 2 ); + COORD_TYPE v3x = nodeCoordinates( vi[ 2 ], 0 ); + COORD_TYPE v3y = nodeCoordinates( vi[ 2 ], 1 ); + COORD_TYPE v3z = nodeCoordinates( vi[ 2 ], 2 ); + // check the orientation of this triangle + R1Tensor vv1 = { v2x - v1x, v2y - v1y, v2z - v1z }; + R1Tensor vv2 = { v3x - v1x, v3y - v1y, v3z - v1z }; + R1Tensor dist = { elemCenter[ 0 ] - ( v1x + v2x + v3x )/3.0, + elemCenter[ 1 ] - ( v1y + v2y + v3y )/3.0, + elemCenter[ 2 ] - ( v1z + v2z + v3z )/3.0 }; + R1Tensor norm = { }; + LvArray::tensorOps::crossProduct( norm, vv1, vv2 ); + // check if face is oriented coherently, and change sign otherwise + int sign = LvArray::tensorOps::AiBi< 3 >( norm, dist ) > 0 ? -1 : +1; + // Compute the winding number contributed by this triangle + int cmp1 = lexicographicalCompareVertex( point[ 0 ], point[ 1 ], point[ 2 ], v1x, v1y, v1z ); + if( cmp1 == 0 ) + { + return findVertexRefElement( nodesToElements[ vi[ 0 ] ], elementLocalToGlobal ) == element; + } + int cmp2 = lexicographicalCompareVertex( point[ 0 ], point[ 1 ], point[ 2 ], v2x, v2y, v2z ); + if( cmp2 == 0 ) + { + return findVertexRefElement( nodesToElements[ vi[ 1 ] ], elementLocalToGlobal ) == element; + } + int cmp3 = lexicographicalCompareVertex( point[ 0 ], point[ 1 ], point[ 2 ], v3x, v3y, v3z ); + if( cmp3 == 0 ) + { + return findVertexRefElement( nodesToElements[ vi[ 2 ] ], elementLocalToGlobal ) == element; + } + int facecmp = 0; + int edgecmp = 0; + if( cmp1 != cmp2 ) + { + edgecmp = lexicographicalCompareEdge( point[ 0 ], point[ 1 ], point[ 2 ], + v1x, v1y, v1z, + v2x, v2y, v2z ); + if( edgecmp == 0 ) + { + return findEdgeRefElement( nodesToElements[ vi[ 0 ] ], nodesToElements[ vi[ 1 ] ], elementLocalToGlobal ) == element; + } + facecmp += sign * edgecmp; + } + if( cmp2 != cmp3 ) + { + edgecmp = lexicographicalCompareEdge( point[ 0 ], point[ 1 ], point[ 2 ], + v2x, v2y, v2z, + v3x, v3y, v3z ); + if( edgecmp == 0 ) + { + return findEdgeRefElement( nodesToElements[ vi[ 1 ] ], nodesToElements[ vi[ 2 ] ], elementLocalToGlobal ) == element; + } + facecmp += sign * edgecmp; + } + if( cmp3 != cmp1 ) + { + edgecmp = lexicographicalCompareEdge( point[ 0 ], point[ 1 ], point[ 2 ], + v3x, v3y, v3z, + v1x, v1y, v1z ); + if( edgecmp == 0 ) + { + return findEdgeRefElement( nodesToElements[ vi[ 0 ] ], nodesToElements[ vi[ 2 ] ], elementLocalToGlobal ) == element; + } + facecmp += sign * edgecmp; + } + // if all edges are on the same side, this triangle does not contribute to the winding number + if( facecmp == 0 ) + continue; + facecmp = lexicographicalCompareTriangle( point[ 0 ], point[ 1 ], point[ 2 ], + v1x, v1y, v1z, + v2x, v2y, v2z, + v3x, v3y, v3z ); + + if( facecmp == 0 ) + { + return findTriangleRefElement( nodesToElements[ vi[ 0 ] ], nodesToElements[ vi[ 1 ] ], nodesToElements[ vi[ 2 ] ], elementLocalToGlobal ) == element; + } + omega += sign * facecmp; + } + } + } + + return omega; +} + +/** + * @brief Check if a point is inside a convex polyhedron (3D polygon), using a robust method + * to avoid ambiguity when the point lies on an interface. + * This method is based on the following method: + * - the winding number omega of the point with respect to the cell is used to determine if the point is inside (omega=1) or not (omega=0) + * - corner cases (point lying on a face, edge or vertex of the cell) are detected using a robust method based on lexicographical + * comparisons + * - these comparisons are made consistent across MPI ranks by consistently arranging items based on global indices (GIDs). In particular: + * - Faces are triangulated using the vertex with the smallest GID as root; + * - Edges and faces are described by vertices in increasing GID order + * - Finally, if the point lies on a (vertex, edge, face), it is assigned to the first shared element with the least global index + * @tparam POINT_TYPE type of @p point + * @param[in] element the element to be checked + * @param[in] nodeCoordinates a global array of nodal coordinates + * @param[in] elementsToFaces map from elements to faces + * @param[in] facesToNodes map from faces to nodes + * @param[in] nodesToElements map from nodes to elements + * @param[in] nodeLocalToGlobal global indices of nodes + * @param[in] elementLocalToGlobal global indices of elements + * @param[in] elemCenter coordinates of the element centroid + * @param[in] point coordinates of the query point + * @return whether the point is inside + */ +template< typename COORD_TYPE, typename POINT_TYPE > +GEOS_HOST_DEVICE +bool isPointInsideConvexPolyhedronRobust( localIndex element, + arrayView2d< COORD_TYPE const, nodes::REFERENCE_POSITION_USD > const & nodeCoordinates, + arrayView2d< localIndex const > const & elementsToFaces, + ArrayOfArraysView< localIndex const > const & facesToNodes, + ArrayOfArraysView< localIndex const > const & nodesToElements, + arrayView1d< globalIndex const > const & nodeLocalToGlobal, + arrayView1d< globalIndex const > const & elementLocalToGlobal, + POINT_TYPE const & elemCenter, + POINT_TYPE const & point ) +{ + return computeWindingNumber( element, nodeCoordinates, elementsToFaces, facesToNodes, nodesToElements, nodeLocalToGlobal, elementLocalToGlobal, elemCenter, point ) > 0; +} + /** * @brief Compute the dimensions of the bounding box containing the element * defined here by the coordinates of its vertices. diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/firstOrderEqn/isotropic/AcousticFirstOrderWaveEquationSEM.cpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/firstOrderEqn/isotropic/AcousticFirstOrderWaveEquationSEM.cpp index 32755474615..e9db0ca9617 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/firstOrderEqn/isotropic/AcousticFirstOrderWaveEquationSEM.cpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/firstOrderEqn/isotropic/AcousticFirstOrderWaveEquationSEM.cpp @@ -153,15 +153,14 @@ void AcousticFirstOrderWaveEquationSEM::postInputInitialization() m_receiverRegion.resize( numReceiversGlobal ); } -void AcousticFirstOrderWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & mesh, arrayView1d< string const > const & regionNames ) +void AcousticFirstOrderWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & baseMesh, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) { - NodeManager const & nodeManager = mesh.getNodeManager(); - FaceManager const & faceManager = mesh.getFaceManager(); + GEOS_MARK_FUNCTION; - arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const - X = nodeManager.getField< fields::referencePosition32 >().toViewConst(); - arrayView2d< real64 const > const faceNormal = faceManager.faceNormal(); - arrayView2d< real64 const > const faceCenter = faceManager.faceCenter(); + arrayView1d< globalIndex const > const nodeLocalToGlobal = baseMesh.getNodeManager().localToGlobalMap().toViewConst(); + ArrayOfArraysView< localIndex const > const nodesToElements = baseMesh.getNodeManager().elementList().toViewConst(); + ArrayOfArraysView< localIndex const > const facesToNodes = baseMesh.getFaceManager().nodeList().toViewConst(); + arrayView2d< real64 const, nodes::REFERENCE_POSITION_USD > const nodeCoords = baseMesh.getNodeManager().referencePosition(); arrayView2d< real64 const > const sourceCoordinates = m_sourceCoordinates.toViewConst(); arrayView2d< localIndex > const sourceNodeIds = m_sourceNodeIds.toView(); @@ -195,8 +194,11 @@ void AcousticFirstOrderWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLev } } - mesh.getElemManager().forElementSubRegions< CellElementSubRegion >( regionNames, [&]( localIndex const regionIndex, - CellElementSubRegion & elementSubRegion ) + mesh.getElemManager().forElementSubRegionsComplete< CellElementSubRegion >( regionNames, [&]( localIndex const, + localIndex const regionIndex, + localIndex const esr, + ElementRegionBase &, + CellElementSubRegion & elementSubRegion ) { GEOS_THROW_IF( elementSubRegion.getElementType() != ElementType::Hexahedron, getDataContext() << ": Invalid type of element, the acoustic solver is designed for hexahedral meshes only (C3D8) ", @@ -204,8 +206,10 @@ void AcousticFirstOrderWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLev arrayView2d< localIndex const > const elemsToFaces = elementSubRegion.faceList(); arrayView2d< localIndex const, cells::NODE_MAP_USD > const & elemsToNodes = elementSubRegion.nodeList(); + arrayView2d< localIndex const, cells::NODE_MAP_USD > const & baseElemsToNodes = baseMesh.getElemManager().getRegion( regionIndex ).getSubRegion< CellElementSubRegion >( esr ).nodeList(); arrayView2d< real64 const > const elemCenter = elementSubRegion.getElementCenter(); arrayView1d< integer const > const elemGhostRank = elementSubRegion.ghostRank(); + arrayView1d< globalIndex const > const elemLocalToGlobal = elementSubRegion.localToGlobalMap().toViewConst(); finiteElement::FiniteElementBase const & fe = elementSubRegion.getReference< finiteElement::FiniteElementBase >( getDiscretizationName() ); @@ -213,21 +217,21 @@ void AcousticFirstOrderWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLev { using FE_TYPE = TYPEOFREF( finiteElement ); - localIndex const numFacesPerElem = elementSubRegion.numFacesPerElement(); - PreComputeSourcesAndReceivers:: Compute1DSourceAndReceiverConstantsWithElementsAndRegionStorage < EXEC_POLICY, FE_TYPE > ( elementSubRegion.size(), regionIndex, - numFacesPerElem, - X, + facesToNodes, + nodeCoords, + nodeLocalToGlobal, + elemLocalToGlobal, + nodesToElements, + baseElemsToNodes, elemGhostRank, elemsToNodes, elemsToFaces, elemCenter, - faceNormal, - faceCenter, sourceCoordinates, sourceIsAccessible, sourceElem, @@ -258,11 +262,12 @@ void AcousticFirstOrderWaveEquationSEM::initializePostInitialConditionsPreSubGro applyFreeSurfaceBC( 0.0, domain ); - forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const & meshBodyName, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) { - precomputeSourceAndReceiverTerm( mesh, regionNames ); + MeshLevel & baseMesh = domain.getMeshBodies().getGroup< MeshBody >( meshBodyName ).getBaseDiscretization(); + precomputeSourceAndReceiverTerm( baseMesh, mesh, regionNames ); NodeManager & nodeManager = mesh.getNodeManager(); FaceManager & faceManager = mesh.getFaceManager(); @@ -435,7 +440,7 @@ real64 AcousticFirstOrderWaveEquationSEM::explicitStepInternal( real64 const & t { NodeManager & nodeManager = mesh.getNodeManager(); - arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const X = nodeManager.getField< fields::referencePosition32 >().toViewConst(); + arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const nodeCoords = nodeManager.getField< fields::referencePosition32 >().toViewConst(); arrayView1d< real32 const > const mass = nodeManager.getField< acousticfields::AcousticMassVector >(); arrayView1d< real32 const > const damping = nodeManager.getField< acousticfields::DampingVector >(); @@ -468,7 +473,7 @@ real64 AcousticFirstOrderWaveEquationSEM::explicitStepInternal( real64 const & t VelocityComputation< FE_TYPE > kernel( finiteElement ); kernel.template launch< EXEC_POLICY, ATOMIC_POLICY > ( elementSubRegion.size(), - X, + nodeCoords, elemsToNodes, p_np1, density, @@ -482,7 +487,7 @@ real64 AcousticFirstOrderWaveEquationSEM::explicitStepInternal( real64 const & t ( elementSubRegion.size(), regionIndex, nodeManager.size(), - X, + nodeCoords, elemsToNodes, velocity_x, velocity_y, diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/firstOrderEqn/isotropic/AcousticFirstOrderWaveEquationSEM.hpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/firstOrderEqn/isotropic/AcousticFirstOrderWaveEquationSEM.hpp index 423dc8ae5ba..52e72af8d91 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/firstOrderEqn/isotropic/AcousticFirstOrderWaveEquationSEM.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/firstOrderEqn/isotropic/AcousticFirstOrderWaveEquationSEM.hpp @@ -119,9 +119,10 @@ class AcousticFirstOrderWaveEquationSEM : public WaveSolverBase /** * @brief Locate sources and receivers position in the mesh elements, evaluate the basis functions at each point and save them to the * corresponding elements nodes. + * @param baseMesh the level-0 mesh * @param mesh mesh of the computational domain */ - virtual void precomputeSourceAndReceiverTerm( MeshLevel & mesh, arrayView1d< string const > const & regionNames ) override; + virtual void precomputeSourceAndReceiverTerm( MeshLevel & baseMesh, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) override; /** * @brief Apply free surface condition to the face define in the geometry box from the xml diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEM.cpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEM.cpp index 23cd9ba2db4..1bfe1f970d8 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEM.cpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEM.cpp @@ -112,18 +112,15 @@ void AcousticVTIWaveEquationSEM::postInputInitialization() m_pressureNp1AtReceivers.resize( m_nsamplesSeismoTrace, numReceiversGlobal + 1 ); } -void AcousticVTIWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & mesh, +void AcousticVTIWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & baseMesh, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) { - NodeManager const & nodeManager = mesh.getNodeManager(); - FaceManager const & faceManager = mesh.getFaceManager(); - - arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const nodeCoords32 = - nodeManager.getField< fields::referencePosition32 >().toViewConst(); - - arrayView2d< real64 const > const faceNormal = faceManager.faceNormal(); - arrayView2d< real64 const > const faceCenter = faceManager.faceCenter(); + GEOS_MARK_FUNCTION; + arrayView1d< globalIndex const > const nodeLocalToGlobal = baseMesh.getNodeManager().localToGlobalMap().toViewConst(); + ArrayOfArraysView< localIndex const > const nodesToElements = baseMesh.getNodeManager().elementList().toViewConst(); + ArrayOfArraysView< localIndex const > const facesToNodes = baseMesh.getFaceManager().nodeList().toViewConst(); + arrayView2d< real64 const, nodes::REFERENCE_POSITION_USD > const nodeCoords = baseMesh.getNodeManager().referencePosition().toViewConst(); arrayView2d< real64 const > const sourceCoordinates = m_sourceCoordinates.toViewConst(); arrayView2d< localIndex > const sourceNodeIds = m_sourceNodeIds.toView(); @@ -153,8 +150,11 @@ void AcousticVTIWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & me } } - mesh.getElemManager().forElementSubRegions< CellElementSubRegion >( regionNames, [&]( localIndex const, - CellElementSubRegion & elementSubRegion ) + mesh.getElemManager().forElementSubRegionsComplete< CellElementSubRegion >( regionNames, [&]( localIndex const, + localIndex const er, + localIndex const esr, + ElementRegionBase &, + CellElementSubRegion & elementSubRegion ) { GEOS_THROW_IF( elementSubRegion.getElementType() != ElementType::Hexahedron, "Invalid type of element, the acoustic solver is designed for hexahedral meshes only (C3D8), using the SEM formulation", @@ -162,8 +162,10 @@ void AcousticVTIWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & me arrayView2d< localIndex const > const elemsToFaces = elementSubRegion.faceList(); arrayView2d< localIndex const, cells::NODE_MAP_USD > const & elemsToNodes = elementSubRegion.nodeList(); + arrayView2d< localIndex const, cells::NODE_MAP_USD > const & baseElemsToNodes = baseMesh.getElemManager().getRegion( er ).getSubRegion< CellElementSubRegion >( esr ).nodeList(); arrayView2d< real64 const > const elemCenter = elementSubRegion.getElementCenter(); arrayView1d< integer const > const elemGhostRank = elementSubRegion.ghostRank(); + arrayView1d< globalIndex const > const elemLocalToGlobal = elementSubRegion.localToGlobalMap().toViewConst(); finiteElement::FiniteElementBase const & fe = elementSubRegion.getReference< finiteElement::FiniteElementBase >( getDiscretizationName() ); @@ -171,20 +173,20 @@ void AcousticVTIWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & me { using FE_TYPE = TYPEOFREF( finiteElement ); - localIndex const numFacesPerElem = elementSubRegion.numFacesPerElement(); - acousticVTIWaveEquationSEMKernels:: PrecomputeSourceAndReceiverKernel:: launch< EXEC_POLICY, FE_TYPE > ( elementSubRegion.size(), - numFacesPerElem, - nodeCoords32, + facesToNodes, + nodeCoords, + nodeLocalToGlobal, + elemLocalToGlobal, + nodesToElements, + baseElemsToNodes, elemGhostRank, elemsToNodes, elemsToFaces, elemCenter, - faceNormal, - faceCenter, sourceCoordinates, sourceIsAccessible, sourceNodeIds, @@ -233,19 +235,19 @@ void AcousticVTIWaveEquationSEM::initializePostInitialConditionsPreSubGroups() applyFreeSurfaceBC( 0.0, domain ); precomputeSurfaceFieldIndicator( domain ); - forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const & meshBodyName, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) { - precomputeSourceAndReceiverTerm( mesh, regionNames ); + MeshLevel & baseMesh = domain.getMeshBodies().getGroup< MeshBody >( meshBodyName ).getBaseDiscretization(); + precomputeSourceAndReceiverTerm( baseMesh, mesh, regionNames ); NodeManager & nodeManager = mesh.getNodeManager(); FaceManager & faceManager = mesh.getFaceManager(); /// get the array of indicators: 1 if the face is on the boundary; 0 otherwise arrayView1d< integer > const & facesDomainBoundaryIndicator = faceManager.getDomainBoundaryIndicator(); - arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const nodeCoords = - nodeManager.getField< fields::referencePosition32 >().toViewConst(); + arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const nodeCoords = nodeManager.getField< fields::referencePosition32 >().toViewConst(); /// get face to node map ArrayOfArraysView< localIndex const > const facesToNodes = faceManager.nodeList().toViewConst(); diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEM.hpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEM.hpp index 889cb424261..d672c398387 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEM.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEM.hpp @@ -127,9 +127,10 @@ class AcousticVTIWaveEquationSEM : public WaveSolverBase /** * @brief Locate sources and receivers position in the mesh elements, evaluate the basis functions at each point and save them to the * corresponding elements nodes. + * @param baseMesh the level-0 mesh * @param mesh mesh of the computational domain */ - virtual void precomputeSourceAndReceiverTerm( MeshLevel & mesh, arrayView1d< string const > const & regionNames ) override; + virtual void precomputeSourceAndReceiverTerm( MeshLevel & baseMesh, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) override; /** * @brief Compute the lateral and bottom surface Field indicators of the boxed domain diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEMKernel.hpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEMKernel.hpp index 1acd21ac28b..e4de8b7d4ed 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEMKernel.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEMKernel.hpp @@ -40,38 +40,43 @@ struct PrecomputeSourceAndReceiverKernel * @tparam EXEC_POLICY execution policy * @tparam FE_TYPE finite element type * @param[in] size the number of cells in the subRegion - * @param[in] numFacesPerElem number of faces per element - * @param[in] nodeCoords coordinates of the nodes - * @param[in] elemGhostRank the ghost ranks + * @param[in] baseFacesToNodes face to node map + * @param[in] baseNodeCoords coordinates of the nodes + * @param[in] baseNodeLocalToGlobal local to global index map for nodes + * @param[in] elementLocalToGlobal local to global index map for elements + * @param[in] baseNodesToElements node to element map for the base mesh + * @param[in] baseElemsToNodes element to node map for the base mesh + * @param[in] elemGhostRank rank of the ghost element * @param[in] elemsToNodes map from element to nodes * @param[in] elemsToFaces map from element to faces - * @param[in] facesToNodes map from faces to nodes * @param[in] elemCenter coordinates of the element centers * @param[in] sourceCoordinates coordinates of the source terms * @param[out] sourceIsAccessible flag indicating whether the source is accessible or not * @param[out] sourceNodeIds indices of the nodes of the element where the source is located - * @param[out] sourceNodeConstants constant part of the source terms + * @param[out] sourceConstants constant part of the source terms * @param[in] receiverCoordinates coordinates of the receiver terms * @param[out] receiverIsLocal flag indicating whether the receiver is local or not * @param[out] receiverNodeIds indices of the nodes of the element where the receiver is located - * @param[out] receiverNodeConstants constant part of the receiver term - * @param[out] sourceValue the value of the source - * @param[in] dt the time step size - * @param[in] timeSourceFrequency the time frequency of the source + * @param[out] receiverConstants constant part of the receiver term + * @param[out] sourceValue value of the temporal source (eg. Ricker) + * @param[in] dt time-step + * @param[in] timeSourceFrequency the central frequency of the source * @param[in] timeSourceDelay the time delay of the source - * @param[in] rickerOrder the order of the ricker + * @param[in] rickerOrder order of the Ricker wavelet */ template< typename EXEC_POLICY, typename FE_TYPE > static void launch( localIndex const size, - localIndex const numFacesPerElem, - arrayView2d< WaveSolverBase::wsCoordType const, nodes::REFERENCE_POSITION_USD > const nodeCoords, + ArrayOfArraysView< localIndex const > const baseFacesToNodes, + arrayView2d< real64 const, nodes::REFERENCE_POSITION_USD > const baseNodeCoords, + arrayView1d< globalIndex const > const baseNodeLocalToGlobal, + arrayView1d< globalIndex const > const elementLocalToGlobal, + ArrayOfArraysView< localIndex const > const baseNodesToElements, + arrayView2d< localIndex const, cells::NODE_MAP_USD > const & baseElemsToNodes, arrayView1d< integer const > const elemGhostRank, arrayView2d< localIndex const, cells::NODE_MAP_USD > const & elemsToNodes, arrayView2d< localIndex const > const elemsToFaces, arrayView2d< real64 const > const & elemCenter, - arrayView2d< real64 const > const faceNormal, - arrayView2d< real64 const > const faceCenter, arrayView2d< real64 const > const sourceCoordinates, arrayView1d< localIndex > const sourceIsAccessible, arrayView2d< localIndex > const sourceNodeIds, @@ -106,20 +111,23 @@ struct PrecomputeSourceAndReceiverKernel sourceCoordinates[isrc][2] }; bool const sourceFound = - WaveSolverUtils::locateSourceElement( numFacesPerElem, - center, - faceNormal, - faceCenter, - elemsToFaces[k], - coords ); + computationalGeometry::isPointInsideConvexPolyhedronRobust( k, + baseNodeCoords, + elemsToFaces, + baseFacesToNodes, + baseNodesToElements, + baseNodeLocalToGlobal, + elementLocalToGlobal, + center, + coords ); if( sourceFound ) { real64 coordsOnRefElem[3]{}; WaveSolverUtils::computeCoordinatesOnReferenceElement< FE_TYPE >( coords, - elemsToNodes[k], - nodeCoords, + baseElemsToNodes[k], + baseNodeCoords, coordsOnRefElem ); sourceIsAccessible[isrc] = 1; @@ -153,19 +161,22 @@ struct PrecomputeSourceAndReceiverKernel receiverCoordinates[ircv][2] }; real64 coordsOnRefElem[3]{}; - bool const receiverFound = - WaveSolverUtils::locateSourceElement( numFacesPerElem, - center, - faceNormal, - faceCenter, - elemsToFaces[k], - coords ); + bool const receiverFound = + computationalGeometry::isPointInsideConvexPolyhedronRobust( k, + baseNodeCoords, + elemsToFaces, + baseFacesToNodes, + baseNodesToElements, + baseNodeLocalToGlobal, + elementLocalToGlobal, + center, + coords ); if( receiverFound && elemGhostRank[k] < 0 ) { WaveSolverUtils::computeCoordinatesOnReferenceElement< FE_TYPE >( coords, - elemsToNodes[k], - nodeCoords, + baseElemsToNodes[k], + baseNodeCoords, coordsOnRefElem ); receiverIsLocal[ircv] = 1; diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.cpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.cpp index 0d5c2a7a354..77e3c55098a 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.cpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.cpp @@ -118,18 +118,15 @@ void AcousticWaveEquationSEM::postInputInitialization() m_pressureNp1AtReceivers.resize( m_nsamplesSeismoTrace, m_receiverCoordinates.size( 0 ) + 1 ); } -void AcousticWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & mesh, +void AcousticWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & baseMesh, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) { GEOS_MARK_FUNCTION; - NodeManager const & nodeManager = mesh.getNodeManager(); - FaceManager const & faceManager = mesh.getFaceManager(); - arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const - nodeCoords32 = nodeManager.getField< fields::referencePosition32 >().toViewConst(); - - arrayView2d< real64 const > const faceNormal = faceManager.faceNormal(); - arrayView2d< real64 const > const faceCenter = faceManager.faceCenter(); + arrayView1d< globalIndex const > const nodeLocalToGlobalMap = baseMesh.getNodeManager().localToGlobalMap().toViewConst(); + ArrayOfArraysView< localIndex const > const nodesToElements = baseMesh.getNodeManager().elementList().toViewConst(); + ArrayOfArraysView< localIndex const > const facesToNodes = baseMesh.getFaceManager().nodeList().toViewConst(); + arrayView2d< real64 const, nodes::REFERENCE_POSITION_USD > const nodeCoords = baseMesh.getNodeManager().referencePosition(); arrayView2d< real64 const > const sourceCoordinates = m_sourceCoordinates.toViewConst(); arrayView2d< localIndex > const sourceNodeIds = m_sourceNodeIds.toView(); @@ -159,8 +156,11 @@ void AcousticWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & mesh, } } - mesh.getElemManager().forElementSubRegions< CellElementSubRegion >( regionNames, [&]( localIndex const, - CellElementSubRegion & elementSubRegion ) + mesh.getElemManager().forElementSubRegionsComplete< CellElementSubRegion >( regionNames, [&]( localIndex const, + localIndex const er, + localIndex const esr, + ElementRegionBase &, + CellElementSubRegion & elementSubRegion ) { GEOS_THROW_IF( elementSubRegion.getElementType() != ElementType::Hexahedron, getDataContext() << ": Invalid type of element, the acoustic solver is designed for hexahedral meshes only (C3D8), using the SEM formulation", @@ -168,8 +168,10 @@ void AcousticWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & mesh, arrayView2d< localIndex const > const elemsToFaces = elementSubRegion.faceList(); arrayView2d< localIndex const, cells::NODE_MAP_USD > const & elemsToNodes = elementSubRegion.nodeList(); + arrayView2d< localIndex const, cells::NODE_MAP_USD > const & baseElemsToNodes = baseMesh.getElemManager().getRegion( er ).getSubRegion< CellElementSubRegion >( esr ).nodeList(); arrayView2d< real64 const > const elemCenter = elementSubRegion.getElementCenter(); arrayView1d< integer const > const elemGhostRank = elementSubRegion.ghostRank(); + arrayView1d< globalIndex const > const elemLocalToGlobalMap = elementSubRegion.localToGlobalMap().toViewConst(); finiteElement::FiniteElementBase const & fe = elementSubRegion.getReference< finiteElement::FiniteElementBase >( getDiscretizationName() ); @@ -177,22 +179,22 @@ void AcousticWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & mesh, { using FE_TYPE = TYPEOFREF( finiteElement ); - localIndex const numFacesPerElem = elementSubRegion.numFacesPerElement(); - { GEOS_MARK_SCOPE( acousticWaveEquationSEMKernels::PrecomputeSourceAndReceiverKernel ); PreComputeSourcesAndReceivers:: Compute1DSourceAndReceiverConstants < EXEC_POLICY, FE_TYPE > ( elementSubRegion.size(), - numFacesPerElem, - nodeCoords32, + facesToNodes, + nodeCoords, + nodeLocalToGlobalMap, + elemLocalToGlobalMap, + nodesToElements, + baseElemsToNodes, elemGhostRank, elemsToNodes, elemsToFaces, elemCenter, - faceNormal, - faceCenter, sourceCoordinates, sourceIsAccessible, sourceNodeIds, @@ -250,11 +252,14 @@ void AcousticWaveEquationSEM::initializePostInitialConditionsPreSubGroups() applyFreeSurfaceBC( 0.0, domain ); - forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + + + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const & meshBodyName, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) { - precomputeSourceAndReceiverTerm( mesh, regionNames ); + MeshLevel & baseMesh = domain.getMeshBodies().getGroup< MeshBody >( meshBodyName ).getBaseDiscretization(); + precomputeSourceAndReceiverTerm( baseMesh, mesh, regionNames ); NodeManager & nodeManager = mesh.getNodeManager(); FaceManager & faceManager = mesh.getFaceManager(); @@ -430,7 +435,7 @@ void AcousticWaveEquationSEM::initializePML() NodeManager & nodeManager = mesh.getNodeManager(); /// WARNING: the array below is one of the PML auxiliary variables arrayView1d< real32 > const indicatorPML = nodeManager.getField< acousticfields::AuxiliaryVar4PML >(); - arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const nodeCoords32 = nodeManager.getField< fields::referencePosition32 >().toViewConst(); + arrayView2d< WaveSolverBase::wsCoordType const, nodes::REFERENCE_POSITION_USD > const nodeCoords32 = nodeManager.getField< fields::referencePosition32 >().toViewConst(); indicatorPML.zero(); real32 xInteriorMin[3]{}; diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.hpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.hpp index da36ea8dcbb..0e0729bfbd9 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.hpp @@ -148,9 +148,10 @@ class AcousticWaveEquationSEM : public WaveSolverBase /** * @brief Locate sources and receivers position in the mesh elements, evaluate the basis functions at each point and save them to the * corresponding elements nodes. + * @param baseMesh the level-0 mesh * @param mesh mesh of the computational domain */ - virtual void precomputeSourceAndReceiverTerm( MeshLevel & mesh, arrayView1d< string const > const & regionNames ) override; + virtual void precomputeSourceAndReceiverTerm( MeshLevel & baseMesh, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) override; /** * @brief Apply free surface condition to the face define in the geometry box from the xml diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/firstOrderEqn/isotropic/ElasticFirstOrderWaveEquationSEM.cpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/firstOrderEqn/isotropic/ElasticFirstOrderWaveEquationSEM.cpp index 07eb4802edd..98d04bc3b7a 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/firstOrderEqn/isotropic/ElasticFirstOrderWaveEquationSEM.cpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/firstOrderEqn/isotropic/ElasticFirstOrderWaveEquationSEM.cpp @@ -202,14 +202,14 @@ void ElasticFirstOrderWaveEquationSEM::postInputInitialization() } -void ElasticFirstOrderWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & mesh, arrayView1d< string const > const & regionNames ) +void ElasticFirstOrderWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & baseMesh, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) { - NodeManager const & nodeManager = mesh.getNodeManager(); - FaceManager const & faceManager = mesh.getFaceManager(); + GEOS_MARK_FUNCTION; - arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const X = nodeManager.getField< fields::referencePosition32 >().toViewConst(); - arrayView2d< real64 const > const faceNormal = faceManager.faceNormal(); - arrayView2d< real64 const > const faceCenter = faceManager.faceCenter(); + arrayView1d< globalIndex const > const nodeLocalToGlobal = baseMesh.getNodeManager().localToGlobalMap().toViewConst(); + ArrayOfArraysView< localIndex const > const nodesToElements = baseMesh.getNodeManager().elementList().toViewConst(); + ArrayOfArraysView< localIndex const > const facesToNodes = baseMesh.getFaceManager().nodeList().toViewConst(); + arrayView2d< real64 const, nodes::REFERENCE_POSITION_USD > const nodeCoords = baseMesh.getNodeManager().referencePosition(); arrayView2d< real64 const > const sourceCoordinates = m_sourceCoordinates.toViewConst(); arrayView2d< localIndex > const sourceNodeIds = m_sourceNodeIds.toView(); @@ -245,8 +245,11 @@ void ElasticFirstOrderWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLeve } } - mesh.getElemManager().forElementSubRegions< CellElementSubRegion >( regionNames, [&]( localIndex const regionIndex, - CellElementSubRegion & elementSubRegion ) + mesh.getElemManager().forElementSubRegionsComplete< CellElementSubRegion >( regionNames, [&]( localIndex const, + localIndex const regionIndex, + localIndex const esr, + ElementRegionBase &, + CellElementSubRegion & elementSubRegion ) { GEOS_THROW_IF( elementSubRegion.getElementType() != ElementType::Hexahedron, @@ -255,8 +258,10 @@ void ElasticFirstOrderWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLeve arrayView2d< localIndex const > const elemsToFaces = elementSubRegion.faceList(); arrayView2d< localIndex const, cells::NODE_MAP_USD > const & elemsToNodes = elementSubRegion.nodeList(); + arrayView2d< localIndex const, cells::NODE_MAP_USD > const & baseElemsToNodes = baseMesh.getElemManager().getRegion( regionIndex ).getSubRegion< CellElementSubRegion >( esr ).nodeList(); arrayView2d< real64 const > const elemCenter = elementSubRegion.getElementCenter(); arrayView1d< integer const > const elemGhostRank = elementSubRegion.ghostRank(); + arrayView1d< globalIndex const > const elemLocalToGlobal = elementSubRegion.localToGlobalMap().toViewConst(); finiteElement::FiniteElementBase const & fe = elementSubRegion.getReference< finiteElement::FiniteElementBase >( getDiscretizationName() ); @@ -264,21 +269,21 @@ void ElasticFirstOrderWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLeve { using FE_TYPE = TYPEOFREF( finiteElement ); - localIndex const numFacesPerElem = elementSubRegion.numFacesPerElement(); - PreComputeSourcesAndReceivers:: Compute1DSourceAndReceiverConstantsWithElementsAndRegionStorage < EXEC_POLICY, FE_TYPE > ( elementSubRegion.size(), regionIndex, - numFacesPerElem, - X, + facesToNodes, + nodeCoords, + nodeLocalToGlobal, + elemLocalToGlobal, + nodesToElements, + baseElemsToNodes, elemGhostRank, elemsToNodes, elemsToFaces, elemCenter, - faceNormal, - faceCenter, sourceCoordinates, sourceIsAccessible, sourceElem, @@ -310,11 +315,12 @@ void ElasticFirstOrderWaveEquationSEM::initializePostInitialConditionsPreSubGrou real64 const time = 0.0; applyFreeSurfaceBC( time, domain ); - forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const & meshBodyName, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) { - precomputeSourceAndReceiverTerm( mesh, regionNames ); + MeshLevel & baseMesh = domain.getMeshBodies().getGroup< MeshBody >( meshBodyName ).getBaseDiscretization(); + precomputeSourceAndReceiverTerm( baseMesh, mesh, regionNames ); NodeManager & nodeManager = mesh.getNodeManager(); FaceManager & faceManager = mesh.getFaceManager(); @@ -500,7 +506,7 @@ real64 ElasticFirstOrderWaveEquationSEM::explicitStepInternal( real64 const & ti NodeManager & nodeManager = mesh.getNodeManager(); - arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const X = nodeManager.getField< fields::referencePosition32 >().toViewConst(); + arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const nodeCoords = nodeManager.getField< fields::referencePosition32 >().toViewConst(); arrayView1d< real32 const > const mass = nodeManager.getField< elasticfields::ElasticMassVector >(); arrayView1d< real32 > const dampingx = nodeManager.getField< elasticfields::DampingVectorx >(); @@ -549,7 +555,7 @@ real64 ElasticFirstOrderWaveEquationSEM::explicitStepInternal( real64 const & ti kernel.template launch< EXEC_POLICY, ATOMIC_POLICY > ( elementSubRegion.size(), regionIndex, - X, + nodeCoords, elemsToNodes, ux_np1, uy_np1, @@ -578,7 +584,7 @@ real64 ElasticFirstOrderWaveEquationSEM::explicitStepInternal( real64 const & ti kernel2.template launch< EXEC_POLICY, ATOMIC_POLICY > ( elementSubRegion.size(), nodeManager.size(), - X, + nodeCoords, elemsToNodes, stressxx, stressyy, diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/firstOrderEqn/isotropic/ElasticFirstOrderWaveEquationSEM.hpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/firstOrderEqn/isotropic/ElasticFirstOrderWaveEquationSEM.hpp index 4ab8c383b0b..575226716f9 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/firstOrderEqn/isotropic/ElasticFirstOrderWaveEquationSEM.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/firstOrderEqn/isotropic/ElasticFirstOrderWaveEquationSEM.hpp @@ -125,10 +125,11 @@ class ElasticFirstOrderWaveEquationSEM : public WaveSolverBase /** * @brief Locate sources and receivers position in the mesh elements, evaluate the basis functions at each point and save them to the * corresponding elements nodes. + * @param baseMesh the level-0 mesh * @param mesh mesh of the computational domain * @param regionNames name of the region you are currently on */ - virtual void precomputeSourceAndReceiverTerm( MeshLevel & mesh, arrayView1d< string const > const & regionNames ) override; + virtual void precomputeSourceAndReceiverTerm( MeshLevel & baseMesh, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) override; /** * @brief Apply free surface condition to the face define in the geometry box from the xml diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEM.cpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEM.cpp index 6a2d0d0d7d4..234915bc7f0 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEM.cpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEM.cpp @@ -223,15 +223,14 @@ void ElasticWaveEquationSEM::postInputInitialization() } -void ElasticWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & mesh, arrayView1d< string const > const & regionNames ) +void ElasticWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & baseMesh, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) { - NodeManager const & nodeManager = mesh.getNodeManager(); - FaceManager const & faceManager = mesh.getFaceManager(); + GEOS_MARK_FUNCTION; - arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const X = - nodeManager.getField< fields::referencePosition32 >().toViewConst(); - arrayView2d< real64 const > const faceNormal = faceManager.faceNormal(); - arrayView2d< real64 const > const faceCenter = faceManager.faceCenter(); + arrayView1d< globalIndex const > const nodeLocalToGlobal = baseMesh.getNodeManager().localToGlobalMap().toViewConst(); + ArrayOfArraysView< localIndex const > const nodesToElements = baseMesh.getNodeManager().elementList().toViewConst(); + ArrayOfArraysView< localIndex const > const facesToNodes = baseMesh.getFaceManager().nodeList().toViewConst(); + arrayView2d< real64 const, nodes::REFERENCE_POSITION_USD > const nodeCoords = baseMesh.getNodeManager().referencePosition(); arrayView2d< real64 const > const sourceCoordinates = m_sourceCoordinates.toViewConst(); arrayView2d< localIndex > const sourceNodeIds = m_sourceNodeIds.toView(); @@ -267,8 +266,11 @@ void ElasticWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & mesh, } } - mesh.getElemManager().forElementSubRegions< CellElementSubRegion >( regionNames, [&]( localIndex const, - CellElementSubRegion & elementSubRegion ) + mesh.getElemManager().forElementSubRegionsComplete< CellElementSubRegion >( regionNames, [&]( localIndex const, + localIndex const er, + localIndex const esr, + ElementRegionBase &, + CellElementSubRegion & elementSubRegion ) { GEOS_THROW_IF( elementSubRegion.getElementType() != ElementType::Hexahedron, @@ -277,8 +279,10 @@ void ElasticWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & mesh, arrayView2d< localIndex const > const elemsToFaces = elementSubRegion.faceList(); arrayView2d< localIndex const, cells::NODE_MAP_USD > const & elemsToNodes = elementSubRegion.nodeList(); + arrayView2d< localIndex const, cells::NODE_MAP_USD > const & baseElemsToNodes = baseMesh.getElemManager().getRegion( er ).getSubRegion< CellElementSubRegion >( esr ).nodeList(); arrayView2d< real64 const > const elemCenter = elementSubRegion.getElementCenter(); arrayView1d< integer const > const elemGhostRank = elementSubRegion.ghostRank(); + arrayView1d< globalIndex const > const elemLocalToGlobal = elementSubRegion.localToGlobalMap().toViewConst(); finiteElement::FiniteElementBase const & fe = elementSubRegion.getReference< finiteElement::FiniteElementBase >( getDiscretizationName() ); @@ -286,19 +290,20 @@ void ElasticWaveEquationSEM::precomputeSourceAndReceiverTerm( MeshLevel & mesh, { using FE_TYPE = TYPEOFREF( finiteElement ); - localIndex const numFacesPerElem = elementSubRegion.numFacesPerElement(); PreComputeSourcesAndReceivers:: Compute3DSourceAndReceiverConstantsWithDAS < EXEC_POLICY, FE_TYPE > ( elementSubRegion.size(), - numFacesPerElem, - X, + facesToNodes, + nodeCoords, + nodeLocalToGlobal, + elemLocalToGlobal, + nodesToElements, + baseElemsToNodes, elemGhostRank, elemsToNodes, elemsToFaces, elemCenter, - faceNormal, - faceCenter, sourceCoordinates, sourceIsAccessible, sourceNodeIds, @@ -363,11 +368,12 @@ void ElasticWaveEquationSEM::initializePostInitialConditionsPreSubGroups() applyFreeSurfaceBC( 0.0, domain ); - forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const & meshBodyName, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) { - precomputeSourceAndReceiverTerm( mesh, regionNames ); + MeshLevel & baseMesh = domain.getMeshBodies().getGroup< MeshBody >( meshBodyName ).getBaseDiscretization(); + precomputeSourceAndReceiverTerm( baseMesh, mesh, regionNames ); NodeManager & nodeManager = mesh.getNodeManager(); FaceManager & faceManager = mesh.getFaceManager(); diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEM.hpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEM.hpp index bdb15dcff18..2c9ec3c37ee 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEM.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEM.hpp @@ -132,6 +132,7 @@ class ElasticWaveEquationSEM : public WaveSolverBase * @param time_n time at the beginning of the step * @param dt the perscribed timestep * @param cycleNumber the current cycle number + * @param meshBodyName the name of the mesh body * @param domain the domain object * @return return the timestep that was achieved during the step. */ @@ -173,10 +174,11 @@ class ElasticWaveEquationSEM : public WaveSolverBase /** * @brief Locate sources and receivers position in the mesh elements, evaluate the basis functions at each point and save them to the * corresponding elements nodes. + * @param baseMesh the level-0 mesh * @param mesh mesh of the computational domain * @param regionNames the names of the region you loop on */ - virtual void precomputeSourceAndReceiverTerm( MeshLevel & mesh, arrayView1d< string const > const & regionNames ) override; + virtual void precomputeSourceAndReceiverTerm( MeshLevel & baseMesh, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) override; /** * @brief Apply free surface condition to the face define in the geometry box from the xml diff --git a/src/coreComponents/physicsSolvers/wavePropagation/shared/PrecomputeSourcesAndReceiversKernel.hpp b/src/coreComponents/physicsSolvers/wavePropagation/shared/PrecomputeSourcesAndReceiversKernel.hpp index c688e457c6d..c6fbf016edd 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/shared/PrecomputeSourcesAndReceiversKernel.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/shared/PrecomputeSourcesAndReceiversKernel.hpp @@ -33,14 +33,16 @@ struct PreComputeSourcesAndReceivers * @tparam EXEC_POLICY execution policy * @tparam FE_TYPE finite element type * @param[in] size the number of cells in the subRegion - * @param[in] numFacesPerElem number of faces per element - * @param[in] nodeCoords coordinates of the nodes + * @param[in] baseFacesToNodes face to node map + * @param[in] baseNodeCoords coordinates of the nodes + * @param[in] baseNodeLocalToGlobal local to global index map for nodes + * @param[in] elementLocalToGlobal local to global index map for elements + * @param[in] baseNodesToElements node to element map for the base mesh + * @param[in] baseElemsToNodes element to node map for the base mesh * @param[in] elemGhostRank rank of the ghost element * @param[in] elemsToNodes map from element to nodes * @param[in] elemsToFaces map from element to faces * @param[in] elemCenter coordinates of the element centers - * @param[in] faceNormal normal of each faces - * @param[in] faceCenter coordinates of the center of a face * @param[in] sourceCoordinates coordinates of the source terms * @param[out] sourceIsAccessible flag indicating whether the source is accessible or not * @param[out] sourceNodeIds indices of the nodes of the element where the source is located @@ -58,14 +60,16 @@ struct PreComputeSourcesAndReceivers template< typename EXEC_POLICY, typename FE_TYPE > static void Compute1DSourceAndReceiverConstants( localIndex const size, - localIndex const numFacesPerElem, - arrayView2d< WaveSolverBase::wsCoordType const, nodes::REFERENCE_POSITION_USD > const nodeCoords, + ArrayOfArraysView< localIndex const > const baseFacesToNodes, + arrayView2d< real64 const, nodes::REFERENCE_POSITION_USD > const baseNodeCoords, + arrayView1d< globalIndex const > const baseNodeLocalToGlobal, + arrayView1d< globalIndex const > const elementLocalToGlobal, + ArrayOfArraysView< localIndex const > const baseNodesToElements, + arrayView2d< localIndex const, cells::NODE_MAP_USD > const & baseElemsToNodes, arrayView1d< integer const > const elemGhostRank, arrayView2d< localIndex const, cells::NODE_MAP_USD > const & elemsToNodes, arrayView2d< localIndex const > const elemsToFaces, arrayView2d< real64 const > const & elemCenter, - arrayView2d< real64 const > const faceNormal, - arrayView2d< real64 const > const faceCenter, arrayView2d< real64 const > const sourceCoordinates, arrayView1d< localIndex > const sourceIsAccessible, arrayView2d< localIndex > const sourceNodeIds, @@ -98,22 +102,24 @@ struct PreComputeSourcesAndReceivers real64 const coords[3] = { sourceCoordinates[isrc][0], sourceCoordinates[isrc][1], sourceCoordinates[isrc][2] }; - bool const sourceFound = - WaveSolverUtils::locateSourceElement( numFacesPerElem, - center, - faceNormal, - faceCenter, - elemsToFaces[k], - coords ); + computationalGeometry::isPointInsideConvexPolyhedronRobust( k, + baseNodeCoords, + elemsToFaces, + baseFacesToNodes, + baseNodesToElements, + baseNodeLocalToGlobal, + elementLocalToGlobal, + center, + coords ); if( sourceFound ) { real64 coordsOnRefElem[3]{}; WaveSolverUtils::computeCoordinatesOnReferenceElement< FE_TYPE >( coords, - elemsToNodes[k], - nodeCoords, + baseElemsToNodes[k], + baseNodeCoords, coordsOnRefElem ); sourceIsAccessible[isrc] = 1; @@ -148,18 +154,21 @@ struct PreComputeSourcesAndReceivers real64 coordsOnRefElem[3]{}; bool const receiverFound = - WaveSolverUtils::locateSourceElement( numFacesPerElem, - center, - faceNormal, - faceCenter, - elemsToFaces[k], - coords ); + computationalGeometry::isPointInsideConvexPolyhedronRobust( k, + baseNodeCoords, + elemsToFaces, + baseFacesToNodes, + baseNodesToElements, + baseNodeLocalToGlobal, + elementLocalToGlobal, + center, + coords ); if( receiverFound && elemGhostRank[k] < 0 ) { WaveSolverUtils::computeCoordinatesOnReferenceElement< FE_TYPE >( coords, - elemsToNodes[k], - nodeCoords, + baseElemsToNodes[k], + baseNodeCoords, coordsOnRefElem ); receiverIsLocal[ircv] = 1; @@ -187,14 +196,16 @@ struct PreComputeSourcesAndReceivers * @tparam EXEC_POLICY execution policy * @tparam FE_TYPE finite element type * @param[in] size the number of cells in the subRegion - * @param[in] numFacesPerElem number of faces per element - * @param[in] nodeCoords coordinates of the nodes + * @param[in] baseFacesToNodes face to node map of the base mesh + * @param[in] baseNodeCoords coordinates of the nodes of the base mesh + * @param[in] baseNodeLocalToGlobal local to global index map for nodes of the base mesh + * @param[in] elementLocalToGlobal local to global index map for elements (for the base or high order mesh) + * @param[in] baseNodesToElements local node to element map for the base mesh + * @param[in] baseElemsToNodes element to node map for the base mesh * @param[in] elemGhostRank rank of the ghost element * @param[in] elemsToNodes map from element to nodes * @param[in] elemsToFaces map from element to faces * @param[in] elemCenter coordinates of the element centers - * @param[in] faceNormal normal of each faces - * @param[in] faceCenter coordinates of the center of a face * @param[in] sourceCoordinates coordinates of the source terms * @param[out] sourceIsAccessible flag indicating whether the source is accessible or not * @param[out] sourceElem element where a source is located @@ -215,14 +226,16 @@ struct PreComputeSourcesAndReceivers static void Compute1DSourceAndReceiverConstantsWithElementsAndRegionStorage( localIndex const size, localIndex const regionIndex, - localIndex const numFacesPerElem, - arrayView2d< WaveSolverBase::wsCoordType const, nodes::REFERENCE_POSITION_USD > const nodeCoords, + ArrayOfArraysView< localIndex const > const baseFacesToNodes, + arrayView2d< real64 const, nodes::REFERENCE_POSITION_USD > const baseNodeCoords, + arrayView1d< globalIndex const > const baseNodeLocalToGlobal, + arrayView1d< globalIndex const > const elementLocalToGlobal, + ArrayOfArraysView< localIndex const > const baseNodesToElements, + arrayView2d< localIndex const, cells::NODE_MAP_USD > const & baseElemsToNodes, arrayView1d< integer const > const elemGhostRank, arrayView2d< localIndex const, cells::NODE_MAP_USD > const & elemsToNodes, arrayView2d< localIndex const > const elemsToFaces, arrayView2d< real64 const > const & elemCenter, - arrayView2d< real64 const > const faceNormal, - arrayView2d< real64 const > const faceCenter, arrayView2d< real64 const > const sourceCoordinates, arrayView1d< localIndex > const sourceIsAccessible, arrayView1d< localIndex > const sourceElem, @@ -261,20 +274,22 @@ struct PreComputeSourcesAndReceivers sourceCoordinates[isrc][2] }; bool const sourceFound = - WaveSolverUtils::locateSourceElement( numFacesPerElem, - center, - faceNormal, - faceCenter, - elemsToFaces[k], - coords ); - + computationalGeometry::isPointInsideConvexPolyhedronRobust( k, + baseNodeCoords, + elemsToFaces, + baseFacesToNodes, + baseNodesToElements, + baseNodeLocalToGlobal, + elementLocalToGlobal, + center, + coords ); if( sourceFound ) { real64 coordsOnRefElem[3]{}; WaveSolverUtils::computeCoordinatesOnReferenceElement< FE_TYPE >( coords, - elemsToNodes[k], - nodeCoords, + baseElemsToNodes[k], + baseNodeCoords, coordsOnRefElem ); sourceIsAccessible[isrc] = 1; @@ -311,18 +326,21 @@ struct PreComputeSourcesAndReceivers real64 coordsOnRefElem[3]{}; bool const receiverFound = - WaveSolverUtils::locateSourceElement( numFacesPerElem, - center, - faceNormal, - faceCenter, - elemsToFaces[k], - coords ); + computationalGeometry::isPointInsideConvexPolyhedronRobust( k, + baseNodeCoords, + elemsToFaces, + baseFacesToNodes, + baseNodesToElements, + baseNodeLocalToGlobal, + elementLocalToGlobal, + center, + coords ); if( receiverFound && elemGhostRank[k] < 0 ) { WaveSolverUtils::computeCoordinatesOnReferenceElement< FE_TYPE >( coords, - elemsToNodes[k], - nodeCoords, + baseElemsToNodes[k], + baseNodeCoords, coordsOnRefElem ); receiverIsLocal[ircv] = 1; receiverElem[ircv] = k; @@ -352,14 +370,16 @@ struct PreComputeSourcesAndReceivers * @tparam EXEC_POLICY execution policy * @tparam FE_TYPE finite element type * @param[in] size the number of cells in the subRegion - * @param[in] numFacesPerElem number of face on an element - * @param[in] nodeCoords coordinates of the nodes + * @param[in] baseFacesToNodes face to node map + * @param[in] baseNodeCoords coordinates of the nodes + * @param[in] baseNodeLocalToGlobal local to global index map for nodes + * @param[in] elementLocalToGlobal local to global index map for elements + * @param[in] baseNodesToElements node to element map for the base mesh + * @param[in] baseElemsToNodes element to node map for the base mesh * @param[in] elemGhostRank array containing the ghost rank * @param[in] elemsToNodes map from element to nodes * @param[in] elemsToFaces map from element to faces * @param[in] elemCenter coordinates of the element centers - * @param[in] faceNormal array containing the normal of all faces - * @param[in] faceCenter array containing the center of all faces * @param[in] sourceCoordinates coordinates of the source terms * @param[out] sourceIsAccessible flag indicating whether the source is accessible or not * @param[out] sourceNodeIds indices of the nodes of the element where the source is located @@ -385,14 +405,16 @@ struct PreComputeSourcesAndReceivers template< typename EXEC_POLICY, typename FE_TYPE > static void Compute3DSourceAndReceiverConstantsWithDAS( localIndex const size, - localIndex const numFacesPerElem, - arrayView2d< WaveSolverBase::wsCoordType const, nodes::REFERENCE_POSITION_USD > const nodeCoords, + ArrayOfArraysView< localIndex const > const baseFacesToNodes, + arrayView2d< real64 const, nodes::REFERENCE_POSITION_USD > const baseNodeCoords, + arrayView1d< globalIndex const > const baseNodeLocalToGlobal, + arrayView1d< globalIndex const > const elementLocalToGlobal, + ArrayOfArraysView< localIndex const > const baseNodesToElements, + arrayView2d< localIndex const, cells::NODE_MAP_USD > const & baseElemsToNodes, arrayView1d< integer const > const elemGhostRank, arrayView2d< localIndex const, cells::NODE_MAP_USD > const & elemsToNodes, arrayView2d< localIndex const > const elemsToFaces, arrayView2d< real64 const > const & elemCenter, - arrayView2d< real64 const > const faceNormal, - arrayView2d< real64 const > const faceCenter, arrayView2d< real64 const > const sourceCoordinates, arrayView1d< localIndex > const sourceIsAccessible, arrayView2d< localIndex > const sourceNodeIds, @@ -444,18 +466,21 @@ struct PreComputeSourcesAndReceivers { for( localIndex i=0; i<3; ++i ) { - xLocal[a][i] = nodeCoords( elemsToNodes( k, a ), i ); + xLocal[a][i] = baseNodeCoords( elemsToNodes( k, a ), i ); } } bool const sourceFound = - WaveSolverUtils::locateSourceElement( numFacesPerElem, - center, - faceNormal, - faceCenter, - elemsToFaces[k], - coords ); + computationalGeometry::isPointInsideConvexPolyhedronRobust( k, + baseNodeCoords, + elemsToFaces, + baseFacesToNodes, + baseNodesToElements, + baseNodeLocalToGlobal, + elementLocalToGlobal, + center, + coords ); if( sourceFound ) { @@ -463,8 +488,8 @@ struct PreComputeSourcesAndReceivers WaveSolverUtils::computeCoordinatesOnReferenceElement< FE_TYPE >( coords, - elemsToNodes[k], - nodeCoords, + baseElemsToNodes[k], + baseNodeCoords, coordsOnRefElem ); sourceIsAccessible[isrc] = 1; @@ -556,12 +581,15 @@ struct PreComputeSourcesAndReceivers receiverCenter[ 1 ] + receiverVector[ 1 ] * receiverLength * samplePointLocations[ iSample ], receiverCenter[ 2 ] + receiverVector[ 2 ] * receiverLength * samplePointLocations[ iSample ] }; bool const sampleFound = - WaveSolverUtils::locateSourceElement( numFacesPerElem, - center, - faceNormal, - faceCenter, - elemsToFaces[k], - coords ); + computationalGeometry::isPointInsideConvexPolyhedronRobust( k, + baseNodeCoords, + elemsToFaces, + baseFacesToNodes, + baseNodesToElements, + baseNodeLocalToGlobal, + elementLocalToGlobal, + center, + coords ); if( sampleFound && elemGhostRank[k] < 0 ) { real64 coordsOnRefElem[3]{}; @@ -571,13 +599,13 @@ struct PreComputeSourcesAndReceivers { for( localIndex i=0; i<3; ++i ) { - xLocal[a][i] = nodeCoords( elemsToNodes( k, a ), i ); + xLocal[a][i] = baseNodeCoords( elemsToNodes( k, a ), i ); } } WaveSolverUtils::computeCoordinatesOnReferenceElement< FE_TYPE >( coords, - elemsToNodes[k], - nodeCoords, + baseElemsToNodes[k], + baseNodeCoords, coordsOnRefElem ); real64 N[numNodesPerElem]; real64 gradN[numNodesPerElem][3]; @@ -603,12 +631,15 @@ struct PreComputeSourcesAndReceivers // determine if the current rank is the owner of this receiver real64 const coords[3] = { receiverCenter[ 0 ], receiverCenter[ 1 ], receiverCenter[ 2 ] }; bool const receiverFound = - WaveSolverUtils::locateSourceElement( numFacesPerElem, - center, - faceNormal, - faceCenter, - elemsToFaces[k], - coords ); + computationalGeometry::isPointInsideConvexPolyhedronRobust( k, + baseNodeCoords, + elemsToFaces, + baseFacesToNodes, + baseNodesToElements, + baseNodeLocalToGlobal, + elementLocalToGlobal, + center, + coords ); if( receiverFound && elemGhostRank[k] < 0 ) { receiverIsLocal[ ircv ] = 1; diff --git a/src/coreComponents/physicsSolvers/wavePropagation/shared/WaveSolverBase.hpp b/src/coreComponents/physicsSolvers/wavePropagation/shared/WaveSolverBase.hpp index 6cb5a459a0d..fe17f6d6a9d 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/shared/WaveSolverBase.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/shared/WaveSolverBase.hpp @@ -207,9 +207,10 @@ class WaveSolverBase : public SolverBase /** * @brief Locate sources and receivers positions in the mesh elements, evaluate the basis functions at each point and save them to the * corresponding elements nodes. + * @param baseMesh the level-0 mesh * @param mesh mesh of the computational domain */ - virtual void precomputeSourceAndReceiverTerm( MeshLevel & mesh, arrayView1d< string const > const & regionNames ) = 0; + virtual void precomputeSourceAndReceiverTerm( MeshLevel & baseMesh, MeshLevel & mesh, arrayView1d< string const > const & regionNames ) = 0; /** * @brief Perform forward explicit step diff --git a/src/coreComponents/physicsSolvers/wavePropagation/shared/WaveSolverUtils.hpp b/src/coreComponents/physicsSolvers/wavePropagation/shared/WaveSolverUtils.hpp index b4087dcb2fb..962337e6b40 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/shared/WaveSolverUtils.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/shared/WaveSolverUtils.hpp @@ -364,8 +364,8 @@ struct WaveSolverUtils * @brief Convert a mesh element point coordinate into a coordinate on the reference element * @tparam FE_TYPE finite element type * @param[in] coords coordinate of the point - * @param[in] elemsToNodes map to obtaint global nodes from element index - * @param[in] nodeCoords array of mesh nodes coordinates + * @param[in] elemsToNodes element to node map for the base mesh + * @param[in] nodeCoords array of base mesh nodes coordinates * @param[out] coordsOnRefElem to contain the coordinate computed in the reference element */ template< typename FE_TYPE > @@ -373,14 +373,14 @@ struct WaveSolverUtils static void computeCoordinatesOnReferenceElement( real64 const (&coords)[3], arraySlice1d< localIndex const, cells::NODE_MAP_USD - 1 > const elemsToNodes, - arrayView2d< wsCoordType const, nodes::REFERENCE_POSITION_USD > const nodeCoords, + arrayView2d< real64 const, nodes::REFERENCE_POSITION_USD > const nodeCoords, real64 (& coordsOnRefElem)[3] ) { // only the eight corners of the mesh cell are needed to compute the Jacobian real64 xLocal[8][3]{}; for( localIndex a = 0; a < 8; ++a ) { - LvArray::tensorOps::copy< 3 >( xLocal[a], nodeCoords[ elemsToNodes[ FE_TYPE::meshIndexToLinearIndex3D( a )] ] ); + LvArray::tensorOps::copy< 3 >( xLocal[a], nodeCoords[ elemsToNodes[ a ] ] ); } // coordsOnRefElem = invJ*(coords-coordsNode_0) real64 invJ[3][3]{}; From 0cbc589d85d431bdbf8bbee8cf54f11e8226f354 Mon Sep 17 00:00:00 2001 From: MelReyCG <122801580+MelReyCG@users.noreply.github.com> Date: Mon, 5 Aug 2024 18:24:26 +0200 Subject: [PATCH 05/42] refactor: Remove circular dependencies from fileIO/common/codingutilities (#3247) * DataTypes.hpp now only manage static types - no runtime types nor Mpi constants - DataTypes.cpp is not useful anymore. * removing common -> fileIO * removing common->codingUtilities * logger has now a dedicated folder for upcoming files (future PRs) --------- --- examples/ObjectCatalog/main.cpp | 2 +- .../codingUtilities/CMakeLists.txt | 6 +- .../codingUtilities/EnumStrings.hpp | 7 +- .../codingUtilities/Parsing.hpp | 1 + .../RTTypes.cpp} | 13 +- .../codingUtilities/RTTypes.hpp | 238 +++++++++++++++++ .../codingUtilities/Utilities.hpp | 3 +- .../codingUtilities/tests/CMakeLists.txt | 1 - src/coreComponents/common/CMakeLists.txt | 19 +- src/coreComponents/common/DataTypes.hpp | 240 +----------------- src/coreComponents/common/FixedSizeDeque.hpp | 2 +- src/coreComponents/common/MemoryInfos.hpp | 2 +- src/coreComponents/common/MpiWrapper.cpp | 6 + src/coreComponents/common/MpiWrapper.hpp | 7 + src/coreComponents/common/Path.cpp | 2 +- src/coreComponents/common/Span.hpp | 2 +- src/coreComponents/common/TypeDispatch.hpp | 1 + src/coreComponents/common/Units.hpp | 1 + .../common/{ => format}/Format.hpp | 31 +++ .../format}/StringUtilities.cpp | 1 + .../format}/StringUtilities.hpp | 15 +- .../format/table}/TableData.cpp | 0 .../format/table}/TableData.hpp | 8 +- .../format/table}/TableFormatter.cpp | 2 +- .../format/table}/TableFormatter.hpp | 6 +- .../format/table}/TableLayout.cpp | 0 .../format/table}/TableLayout.hpp | 6 +- .../format/table}/unitTests/CMakeLists.txt | 2 +- .../format/table}/unitTests/testTable.cpp | 6 +- .../common/format/unitTests/CMakeLists.txt | 19 ++ .../format/unitTests}/testStringUtilities.cpp | 0 .../common/initializeEnvironment.cpp | 4 +- .../common/{ => logger}/Logger.cpp | 4 +- .../common/{ => logger}/Logger.hpp | 2 +- .../ConstitutivePassThruHandler.hpp | 1 + .../CO2Brine/functions/CO2EOSSolver.cpp | 1 + .../CO2Brine/functions/PVTFunctionHelpers.hpp | 4 +- .../fluid/multifluid/PVTDriver.cpp | 2 +- .../functions/CubicEOSPhaseModel.hpp | 1 + .../solid/DamageSpectralUtilities.hpp | 4 + .../dataRepository/BufferOps.hpp | 1 + .../dataRepository/DataContext.hpp | 4 +- src/coreComponents/dataRepository/Group.cpp | 2 +- .../dataRepository/HistoryDataSpec.hpp | 1 + .../dataRepository/InputFlags.hpp | 2 +- .../dataRepository/MappedVector.hpp | 2 +- .../dataRepository/ObjectCatalog.hpp | 4 +- .../dataRepository/RestartFlags.hpp | 8 +- .../dataRepository/xmlWrapper.cpp | 2 +- .../dataRepository/xmlWrapper.hpp | 3 +- .../interfaces/blaslapack/BlasLapackLA.cpp | 2 + .../unitTests/testSolveLinearSystem.cpp | 1 + src/coreComponents/events/PeriodicEvent.cpp | 2 +- .../FieldSpecificationManager.cpp | 2 +- .../FieldSpecificationManager.hpp | 2 +- src/coreComponents/fileIO/CMakeLists.txt | 9 - .../fileIO/Outputs/OutputUtilities.cpp | 2 +- src/coreComponents/fileIO/silo/SiloFile.cpp | 2 +- .../fileIO/timeHistory/HDFHistoryIO.hpp | 1 + .../fileIO/vtk/VTKPolyDataWriterInterface.cpp | 2 +- .../linearAlgebra/common/common.hpp | 1 + .../interfaces/trilinos/EpetraMatrix.cpp | 1 + .../interfaces/trilinos/EpetraVector.cpp | 1 + .../linearAlgebra/utilities/ComponentMask.hpp | 2 +- .../mainInterface/GeosxState.hpp | 1 + .../mainInterface/ProblemManager.cpp | 2 +- src/coreComponents/mainInterface/version.cpp | 2 +- src/coreComponents/mesh/FaceManager.cpp | 2 +- src/coreComponents/mesh/FieldIdentifiers.hpp | 3 +- .../mesh/generators/VTKMeshGeneratorTools.hpp | 2 +- .../mesh/generators/WellGeneratorBase.cpp | 6 +- .../mesh/mpiCommunications/CommID.cpp | 2 +- .../SimpleGeometricObjectBase.hpp | 2 +- .../physicsSolvers/LinearSolverParameters.cpp | 2 +- .../NonlinearSolverParameters.cpp | 4 +- src/coreComponents/schema/schemaUtilities.cpp | 2 +- .../dataRepositoryTests/testObjectCatalog.cpp | 2 +- .../testMimeticInnerProducts.cpp | 2 +- src/main/main.cpp | 2 +- 79 files changed, 424 insertions(+), 343 deletions(-) rename src/coreComponents/{common/DataTypes.cpp => codingUtilities/RTTypes.cpp} (98%) create mode 100644 src/coreComponents/codingUtilities/RTTypes.hpp rename src/coreComponents/common/{ => format}/Format.hpp (83%) rename src/coreComponents/{codingUtilities => common/format}/StringUtilities.cpp (98%) rename src/coreComponents/{codingUtilities => common/format}/StringUtilities.hpp (94%) rename src/coreComponents/{fileIO/Table => common/format/table}/TableData.cpp (100%) rename src/coreComponents/{fileIO/Table => common/format/table}/TableData.hpp (95%) rename src/coreComponents/{fileIO/Table => common/format/table}/TableFormatter.cpp (99%) rename src/coreComponents/{fileIO/Table => common/format/table}/TableFormatter.hpp (97%) rename src/coreComponents/{fileIO/Table => common/format/table}/TableLayout.cpp (100%) rename src/coreComponents/{fileIO/Table => common/format/table}/TableLayout.hpp (96%) rename src/coreComponents/{fileIO/Table => common/format/table}/unitTests/CMakeLists.txt (90%) rename src/coreComponents/{fileIO/Table => common/format/table}/unitTests/testTable.cpp (99%) create mode 100644 src/coreComponents/common/format/unitTests/CMakeLists.txt rename src/coreComponents/{codingUtilities/tests => common/format/unitTests}/testStringUtilities.cpp (100%) rename src/coreComponents/common/{ => logger}/Logger.cpp (98%) rename src/coreComponents/common/{ => logger}/Logger.hpp (99%) diff --git a/examples/ObjectCatalog/main.cpp b/examples/ObjectCatalog/main.cpp index 2304c252821..c2fd08113d5 100644 --- a/examples/ObjectCatalog/main.cpp +++ b/examples/ObjectCatalog/main.cpp @@ -17,7 +17,7 @@ #include -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include "Base.hpp" #include "Derived1.hpp" diff --git a/src/coreComponents/codingUtilities/CMakeLists.txt b/src/coreComponents/codingUtilities/CMakeLists.txt index 080d9b8d262..a85e4046907 100644 --- a/src/coreComponents/codingUtilities/CMakeLists.txt +++ b/src/coreComponents/codingUtilities/CMakeLists.txt @@ -3,9 +3,9 @@ # set( codingUtilities_headers EnumStrings.hpp + RTTypes.hpp Parsing.hpp SFINAE_Macros.hpp - StringUtilities.hpp UnitTestUtilities.hpp Utilities.hpp traits.hpp @@ -16,8 +16,8 @@ set( codingUtilities_headers # set( codingUtilities_sources Parsing.cpp - StringUtilities.cpp - ) + RTTypes.cpp + ) set( dependencyList ${parallelDeps} common fast_float ) diff --git a/src/coreComponents/codingUtilities/EnumStrings.hpp b/src/coreComponents/codingUtilities/EnumStrings.hpp index 557562c1e3c..40930b1b222 100644 --- a/src/coreComponents/codingUtilities/EnumStrings.hpp +++ b/src/coreComponents/codingUtilities/EnumStrings.hpp @@ -25,10 +25,11 @@ #ifndef GEOS_CODINGUTILITIES_ENUMSTRINGS_HPP #define GEOS_CODINGUTILITIES_ENUMSTRINGS_HPP -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" +#include "codingUtilities/RTTypes.hpp" #include "common/DataTypes.hpp" -#include "common/Logger.hpp" -#include "common/Format.hpp" +#include "common/logger/Logger.hpp" +#include "common/format/Format.hpp" #include #include diff --git a/src/coreComponents/codingUtilities/Parsing.hpp b/src/coreComponents/codingUtilities/Parsing.hpp index e99f751bbc4..1f6dcf36c57 100644 --- a/src/coreComponents/codingUtilities/Parsing.hpp +++ b/src/coreComponents/codingUtilities/Parsing.hpp @@ -21,6 +21,7 @@ #define GEOS_CODINGUTILITIES_PARSING_HPP_ #include "common/DataTypes.hpp" +#include "common/logger/Logger.hpp" #include diff --git a/src/coreComponents/common/DataTypes.cpp b/src/coreComponents/codingUtilities/RTTypes.cpp similarity index 98% rename from src/coreComponents/common/DataTypes.cpp rename to src/coreComponents/codingUtilities/RTTypes.cpp index d4b86ea96a7..52d51964af1 100644 --- a/src/coreComponents/common/DataTypes.cpp +++ b/src/coreComponents/codingUtilities/RTTypes.cpp @@ -14,23 +14,16 @@ */ /** - * @file DataTypes.cpp + * @file RTTypes.cpp */ -#include "DataTypes.hpp" -#include "Logger.hpp" +#include "RTTypes.hpp" #include "LvArray/src/system.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" namespace geos { -#ifdef GEOS_USE_MPI -MPI_Comm MPI_COMM_GEOS; -#else -int MPI_COMM_GEOS = 0; -#endif - Regex::Regex( string_view regexStr, string_view formatDescription ): m_regexStr( regexStr ), diff --git a/src/coreComponents/codingUtilities/RTTypes.hpp b/src/coreComponents/codingUtilities/RTTypes.hpp new file mode 100644 index 00000000000..a94c6cb8236 --- /dev/null +++ b/src/coreComponents/codingUtilities/RTTypes.hpp @@ -0,0 +1,238 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file RTTypes.hpp + * + * This file contains various aliases and functions that provide operations regarding the + * use of the runtime types. + */ + +#ifndef GEOS_CODINGUTILITIES_RTTYPES_HPP +#define GEOS_CODINGUTILITIES_RTTYPES_HPP + +#include "common/DataTypes.hpp" +#include "common/format/Format.hpp" +#include "common/logger/Logger.hpp" + +namespace geos +{ + +/** + * @brief Perform a type cast of base to derived pointer. + * @tparam NEW_TYPE derived pointer type + * @tparam EXISTING_TYPE base type + * @param val base pointer to cast + * @return pointer cast to derived type or @p nullptr + */ +template< typename NEW_TYPE, typename EXISTING_TYPE > +NEW_TYPE dynamicCast( EXISTING_TYPE * const val ) +{ + static_assert( std::is_pointer< NEW_TYPE >::value, "NEW_TYPE must be a pointer." ); + return dynamic_cast< NEW_TYPE >( val ); +} + +/** + * @brief Perform a type cast of base to derived reference. + * @tparam NEW_TYPE derived reference type + * @tparam EXISTING_TYPE base type + * @param val base reference to cast + * @return reference cast to derived type or @p nullptr + */ +template< typename NEW_TYPE, typename EXISTING_TYPE > +NEW_TYPE dynamicCast( EXISTING_TYPE & val ) +{ + static_assert( std::is_reference< NEW_TYPE >::value, "NEW_TYPE must be a reference." ); + + using POINTER_TO_NEW_TYPE = std::remove_reference_t< NEW_TYPE > *; + POINTER_TO_NEW_TYPE ptr = dynamicCast< POINTER_TO_NEW_TYPE >( &val ); + GEOS_ERROR_IF( ptr == nullptr, "Cast from " << LvArray::system::demangleType( val ) << " to " << + LvArray::system::demangleType< NEW_TYPE >() << " failed." ); + + return *ptr; +} + +/** + * @brief Print a short summary of a few select type aliases. + */ +void printTypeSummary(); + +/** + * @brief The regular expression data for validating inputs. Use rtTypes to get the regex of a + * type, and TypeRegex< T > to define a type regex. + */ +struct Regex +{ + /** + * @brief the regular expression string. + */ + string m_regexStr; + /** + * @brief the description of the expected format of the regular expression. + */ + string m_formatDescription; + /** + * @brief Default constructor + */ + Regex() {} + /** + * @param regexStr the regex string for validation (eg. "[\\d]+") + * @param formatDescription the description of the expected format to be validated (eg. "Input value must be an integer."). + */ + Regex( string_view regexStr, string_view formatDescription ); +}; + +/** + * @brief Extension point for custom types to provide a validation regexp to schema. + * Do not use directly to obtain a type regex, rtTypes::getTypeRegex< T >() should be used instead. + * @tparam T the type for which the regex is defined + * @tparam ENABLE used to conditionally enable partial specializations + * + * Specializations should define the following method: + * \code{cpp} + * static string get(); + * \endcode + */ +template< typename T, typename ENABLE = void > +struct TypeRegex +{ + /** + * @brief Get the type's regex (default implementation returns nothing). + * @return The Regex associated with T. + */ + static Regex get() { return {}; } +}; + +/** + * @brief Static class to manage the type selection of types at runtime and obtain the + * regexes of these types. Typically, these types are 'xsd:simpleType' in the XSD. + */ +class rtTypes +{ +public: + + /** + * @brief the regex map type to store and find the regexes by the associated rtTypeName. + */ + using RegexMapType = std::map< string, Regex >; + + /** + * @brief Custom types are useful to customize the regexes of an existing type. The type name + * can be one of the existing ones, or a totally new one (which can then be used in Wrapper::setRTTypename). + */ + struct CustomTypes + { + /// @cond DO_NOT_DOCUMENT + static constexpr string_view mapPair = "mapPair"; + static constexpr string_view plotLevel = "geos_dataRepository_PlotLevel"; + static constexpr string_view groupName = "groupName"; + static constexpr string_view groupNameRef = "groupNameRef"; + static constexpr string_view groupNameRefArray = "groupNameRef_array"; + /// @endcond + }; + + /** + * @brief Convert a @p std::type_index to a string. + * @param key the std::type_index of the type + * @return a hard coded string that is related to the std::type_index + */ + static string getTypeName( std::type_index const key ); + + /** + * @tparam T type we want the regex + * @return the regex string for the default rtType of T to validate input values to this type. + */ + template< typename T > + static Regex const & getTypeRegex() + { return getTypeRegex< T >( getTypeName( typeid( T ) ) ); } + + /** + * @param typeName The rtType name of the type we want the regex (can be a CustomTypes). + * @tparam T the type we want the regex. If none are available in createBasicTypesRegexMap(), one is + * generated from TypeRegex< T >::get(). + * @return a regex string validating the type T. + */ + template< typename T > + static Regex const & getTypeRegex( string_view typeName ) + { + RegexMapType & map = getTypeRegexMap(); + auto const it = map.find( string( typeName ) ); + if( it != map.end() ) + { + return it->second; + } + else + { + return map.emplace( typeName, TypeRegex< T >::get() ).first->second; + } + } + + /** + * @brief Construct the regexMap for all basic types (TypeRegex< T > extented types are not mentionned) + * @return RegexMapType + */ + static RegexMapType createBasicTypesRegexMap(); + +private: + + /** + * @return A reference to the types regexes map + */ + static RegexMapType & getTypeRegexMap() + { + static RegexMapType m = createBasicTypesRegexMap(); + return m; + } + + /** + * @brief Private constructor because of static class + */ + rtTypes() {} + +}; + +/** + * @brief Utility class for querying type names at runtime. + * @tparam T the target type + * + * This relies on LvArray's demangling facilities and simply + * adds some convenience methods like getting the brief name. + */ +template< typename T > +struct TypeName +{ + /** + * @brief @return Full name of the type. + */ + static string full() + { + return ::LvArray::system::demangle( typeid( T ).name() ); + } + + /** + * @brief @return brief name of the type (ignoring namespaces). + */ + static string brief() + { + string const full_name = full(); + string::size_type const pos = full_name.find_last_of( "::" ); + return ( pos == string::npos ) ? full_name : full_name.substr( pos ); + } +}; + +} + + +#endif /* GEOS_CODINGUTILITIES_RTTYPES_HPP */ diff --git a/src/coreComponents/codingUtilities/Utilities.hpp b/src/coreComponents/codingUtilities/Utilities.hpp index 3c4d79ec2ae..41fdc9c8e46 100644 --- a/src/coreComponents/codingUtilities/Utilities.hpp +++ b/src/coreComponents/codingUtilities/Utilities.hpp @@ -20,7 +20,8 @@ #ifndef GEOS_CODINGUTILITIES_UTILITIES_H_ #define GEOS_CODINGUTILITIES_UTILITIES_H_ -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" +#include "common/logger/Logger.hpp" #include "common/DataTypes.hpp" #include "LvArray/src/limits.hpp" #include "common/GEOS_RAJA_Interface.hpp" diff --git a/src/coreComponents/codingUtilities/tests/CMakeLists.txt b/src/coreComponents/codingUtilities/tests/CMakeLists.txt index 85042471be1..33f4168e86e 100644 --- a/src/coreComponents/codingUtilities/tests/CMakeLists.txt +++ b/src/coreComponents/codingUtilities/tests/CMakeLists.txt @@ -1,7 +1,6 @@ # Specify list of tests set( testSources testGeosxTraits.cpp - testStringUtilities.cpp testParsing.cpp testUtilities.cpp ) diff --git a/src/coreComponents/common/CMakeLists.txt b/src/coreComponents/common/CMakeLists.txt index ea5e2409bf3..2a5f70ff960 100644 --- a/src/coreComponents/common/CMakeLists.txt +++ b/src/coreComponents/common/CMakeLists.txt @@ -3,15 +3,19 @@ # set( common_headers ${CMAKE_BINARY_DIR}/include/common/GeosxConfig.hpp + format/table/TableLayout.hpp + format/table/TableFormatter.hpp + format/table/TableData.hpp + format/Format.hpp + format/StringUtilities.hpp + logger/Logger.hpp BufferAllocator.hpp DataLayouts.hpp DataTypes.hpp FieldSpecificationOps.hpp - Format.hpp GEOS_RAJA_Interface.hpp GeosxMacros.hpp MemoryInfos.hpp - Logger.hpp MpiWrapper.hpp Path.hpp Span.hpp @@ -39,10 +43,13 @@ endif( ) # Specify all sources # set( common_sources + format/table/TableLayout.cpp + format/table/TableFormatter.cpp + format/table/TableData.cpp + format/StringUtilities.cpp + logger/Logger.cpp BufferAllocator.cpp - DataTypes.cpp MemoryInfos.cpp - Logger.cpp MpiWrapper.cpp Path.cpp initializeEnvironment.cpp @@ -95,7 +102,7 @@ if( ENABLE_CALIPER ) endif() endif() -set( dependencyList ${dependencyList} fileIO codingUtilities ) +set( dependencyList ${dependencyList} ) blt_add_library( NAME common SOURCES ${common_sources} @@ -109,4 +116,6 @@ target_include_directories( common PUBLIC ${CMAKE_SOURCE_DIR}/coreComponents ) if( GEOS_ENABLE_TESTS ) add_subdirectory( unitTests ) + add_subdirectory( format/table/unitTests ) + add_subdirectory( format/unitTests ) endif() diff --git a/src/coreComponents/common/DataTypes.hpp b/src/coreComponents/common/DataTypes.hpp index 70758781410..9f4c8608ff7 100644 --- a/src/coreComponents/common/DataTypes.hpp +++ b/src/coreComponents/common/DataTypes.hpp @@ -17,7 +17,7 @@ * @file DataTypes.hpp * * This file contains various aliases and functions that provide operations regarding the - * use of the data types. + * use of the static types. */ #ifndef GEOS_COMMON_DATATYPES_HPP @@ -29,7 +29,6 @@ #include "BufferAllocator.hpp" #include "DataLayouts.hpp" #include "Tensor.hpp" -#include "Logger.hpp" #include "LvArray/src/Macros.hpp" #include "LvArray/src/Array.hpp" #include "LvArray/src/ArrayOfArrays.hpp" @@ -71,47 +70,6 @@ namespace geos { -/** - * @brief Perform a type cast of base to derived pointer. - * @tparam NEW_TYPE derived pointer type - * @tparam EXISTING_TYPE base type - * @param val base pointer to cast - * @return pointer cast to derived type or @p nullptr - */ -template< typename NEW_TYPE, typename EXISTING_TYPE > -NEW_TYPE dynamicCast( EXISTING_TYPE * const val ) -{ - static_assert( std::is_pointer< NEW_TYPE >::value, "NEW_TYPE must be a pointer." ); - return dynamic_cast< NEW_TYPE >( val ); -} - -/** - * @brief Perform a type cast of base to derived reference. - * @tparam NEW_TYPE derived reference type - * @tparam EXISTING_TYPE base type - * @param val base reference to cast - * @return reference cast to derived type or @p nullptr - */ -template< typename NEW_TYPE, typename EXISTING_TYPE > -NEW_TYPE dynamicCast( EXISTING_TYPE & val ) -{ - static_assert( std::is_reference< NEW_TYPE >::value, "NEW_TYPE must be a reference." ); - - using POINTER_TO_NEW_TYPE = std::remove_reference_t< NEW_TYPE > *; - POINTER_TO_NEW_TYPE ptr = dynamicCast< POINTER_TO_NEW_TYPE >( &val ); - GEOS_ERROR_IF( ptr == nullptr, "Cast from " << LvArray::system::demangleType( val ) << " to " << - LvArray::system::demangleType< NEW_TYPE >() << " failed." ); - - return *ptr; -} - -/// Global MPI communicator used by GEOSX. -#ifdef GEOS_USE_MPI -extern MPI_Comm MPI_COMM_GEOS; -#else -extern int MPI_COMM_GEOS; -#endif - /** * @name Basic data types used in GEOSX. */ @@ -501,200 +459,6 @@ constexpr static auto LOCALINDEX_MAX = std::numeric_limits< localIndex >::max(); /// A global variable for the value of a object that has not been assigned a geos::globalIndex. constexpr static localIndex unmappedLocalIndexValue = -1; - -/** - * @brief Print a short summary of a few select type aliases. - */ -void printTypeSummary(); - -/** - * @brief The regular expression data for validating inputs. Use rtTypes to get the regex of a - * type, and TypeRegex< T > to define a type regex. - */ -struct Regex -{ - /** - * @brief the regular expression string. - */ - string m_regexStr; - /** - * @brief the description of the expected format of the regular expression. - */ - string m_formatDescription; - /** - * @brief Default constructor - */ - Regex() {} - /** - * @param regexStr the regex string for validation (eg. "[\\d]+") - * @param formatDescription the description of the expected format to be validated (eg. "Input value must be an integer."). - */ - Regex( string_view regexStr, string_view formatDescription ); -}; - -/** - * @brief Extension point for custom types to provide a validation regexp to schema. - * Do not use directly to obtain a type regex, rtTypes::getTypeRegex< T >() should be used instead. - * @tparam T the type for which the regex is defined - * @tparam ENABLE used to conditionally enable partial specializations - * - * Specializations should define the following method: - * \code{cpp} - * static string get(); - * \endcode - */ -template< typename T, typename ENABLE = void > -struct TypeRegex -{ - /** - * @brief Get the type's regex (default implementation returns nothing). - * @return The Regex associated with T. - */ - static Regex get() { return {}; } -}; - -/** - * @brief Static class to manage the type selection of types at runtime and obtain the - * regexes of these types. Typically, these types are 'xsd:simpleType' in the XSD. - */ -class rtTypes -{ -public: - - /** - * @brief the regex map type to store and find the regexes by the associated rtTypeName. - */ - using RegexMapType = std::map< string, Regex >; - - /** - * @brief Custom types are useful to customize the regexes of an existing type. The type name - * can be one of the existing ones, or a totally new one (which can then be used in Wrapper::setRTTypename). - */ - struct CustomTypes - { - /// @cond DO_NOT_DOCUMENT - static constexpr string_view mapPair = "mapPair"; - static constexpr string_view plotLevel = "geos_dataRepository_PlotLevel"; - static constexpr string_view groupName = "groupName"; - static constexpr string_view groupNameRef = "groupNameRef"; - static constexpr string_view groupNameRefArray = "groupNameRef_array"; - /// @endcond - }; - - /** - * @brief Convert a @p std::type_index to a string. - * @param key the std::type_index of the type - * @return a hard coded string that is related to the std::type_index - */ - static string getTypeName( std::type_index const key ); - - /** - * @tparam T type we want the regex - * @return the regex string for the default rtType of T to validate input values to this type. - */ - template< typename T > - static Regex const & getTypeRegex() - { return getTypeRegex< T >( getTypeName( typeid( T ) ) ); } - - /** - * @param typeName The rtType name of the type we want the regex (can be a CustomTypes). - * @tparam T the type we want the regex. If none are available in createBasicTypesRegexMap(), one is - * generated from TypeRegex< T >::get(). - * @return a regex string validating the type T. - */ - template< typename T > - static Regex const & getTypeRegex( string_view typeName ) - { - RegexMapType & map = getTypeRegexMap(); - auto const it = map.find( string( typeName ) ); - if( it != map.end() ) - { - return it->second; - } - else - { - return map.emplace( typeName, TypeRegex< T >::get() ).first->second; - } - } - - /** - * @brief Construct the regexMap for all basic types (TypeRegex< T > extented types are not mentionned) - * @return RegexMapType - */ - static RegexMapType createBasicTypesRegexMap(); - -private: - - /** - * @return A reference to the types regexes map - */ - static RegexMapType & getTypeRegexMap() - { - static RegexMapType m = createBasicTypesRegexMap(); - return m; - } - - /** - * @brief Private constructor because of static class - */ - rtTypes() {} - -}; - -/** - * @brief Utility class for querying type names at runtime. - * @tparam T the target type - * - * This relies on LvArray's demangling facilities and simply - * adds some convenience methods like getting the brief name. - */ -template< typename T > -struct TypeName -{ - /** - * @brief @return Full name of the type. - */ - static string full() - { - return ::LvArray::system::demangle( typeid( T ).name() ); - } - - /** - * @brief @return brief name of the type (ignoring namespaces). - */ - static string brief() - { - string const full_name = full(); - string::size_type const pos = full_name.find_last_of( "::" ); - return ( pos == string::npos ) ? full_name : full_name.substr( pos ); - } -}; - -} - -/** - * @brief Format to be able to directly use a std::optional. - * @param T The type of the value contained std::optional and GEOS_FMT_NS::formatter. - */ -template< typename T > -struct GEOS_FMT_NS::formatter< std::optional< T > > : GEOS_FMT_NS::formatter< T > -{ - /** - * @brief Format the std::optional to a string. - * @param opt The std::optional< T > value to format - * @param ctx formatting state consisting of the formatting arguments and the output iterator - * @return return the corresponding value string. If std::optional is empty retun an empty string - */ - auto format( std::optional< T > const & opt, format_context & ctx ) const - { - if( opt ) - { - return GEOS_FMT_NS::formatter< T >::format( *opt, ctx ); - } - return GEOS_FMT_NS::format_to( ctx.out(), "" ); - } -}; - - +} /* namespace geos */ #endif /* GEOS_COMMON_DATATYPES_HPP */ diff --git a/src/coreComponents/common/FixedSizeDeque.hpp b/src/coreComponents/common/FixedSizeDeque.hpp index 11b0a58fc17..629f1d8f42e 100644 --- a/src/coreComponents/common/FixedSizeDeque.hpp +++ b/src/coreComponents/common/FixedSizeDeque.hpp @@ -19,7 +19,7 @@ #include "LvArray/src/Array.hpp" #include "LvArray/src/memcpy.hpp" #include "LvArray/src/ChaiBuffer.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" /// Get the positive value of a module b #define POSITIVE_MODULO( a, b ) ( ( ( a ) % ( b ) ) + b ) % ( b ) diff --git a/src/coreComponents/common/MemoryInfos.hpp b/src/coreComponents/common/MemoryInfos.hpp index 3f048d5ac8a..90763a7f18d 100644 --- a/src/coreComponents/common/MemoryInfos.hpp +++ b/src/coreComponents/common/MemoryInfos.hpp @@ -17,7 +17,7 @@ #define GEOS_COMMON_MemoryInfos_HPP_ #include "umpire/util/MemoryResourceTraits.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include #include #if defined( GEOS_USE_CUDA ) diff --git a/src/coreComponents/common/MpiWrapper.cpp b/src/coreComponents/common/MpiWrapper.cpp index 521f54fd210..8b8a0afc6a2 100644 --- a/src/coreComponents/common/MpiWrapper.cpp +++ b/src/coreComponents/common/MpiWrapper.cpp @@ -32,6 +32,12 @@ namespace geos { +#ifdef GEOS_USE_MPI +MPI_Comm MPI_COMM_GEOS; +#else +int MPI_COMM_GEOS = 0; +#endif + void MpiWrapper::barrier( MPI_Comm const & MPI_PARAM( comm ) ) { #ifdef GEOS_USE_MPI diff --git a/src/coreComponents/common/MpiWrapper.hpp b/src/coreComponents/common/MpiWrapper.hpp index 12633b63632..9f165e682d3 100644 --- a/src/coreComponents/common/MpiWrapper.hpp +++ b/src/coreComponents/common/MpiWrapper.hpp @@ -98,6 +98,13 @@ struct MPI_Status namespace geos { +/// Global MPI communicator used by GEOSX. +#ifdef GEOS_USE_MPI +extern MPI_Comm MPI_COMM_GEOS; +#else +extern int MPI_COMM_GEOS; +#endif + /** * @struct MpiWrapper * This struct is a wrapper for all mpi.h functions that are used in GEOSX, and provides a collection of diff --git a/src/coreComponents/common/Path.cpp b/src/coreComponents/common/Path.cpp index 50993a1a2da..853f4557904 100644 --- a/src/coreComponents/common/Path.cpp +++ b/src/coreComponents/common/Path.cpp @@ -14,7 +14,7 @@ */ #include "Path.hpp" -#include "Logger.hpp" +#include "logger/Logger.hpp" #include #include diff --git a/src/coreComponents/common/Span.hpp b/src/coreComponents/common/Span.hpp index 40c6c180576..4623fdcdf5f 100644 --- a/src/coreComponents/common/Span.hpp +++ b/src/coreComponents/common/Span.hpp @@ -21,7 +21,7 @@ #define GEOS_COMMON_SPAN_HPP #include "codingUtilities/traits.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include #include diff --git a/src/coreComponents/common/TypeDispatch.hpp b/src/coreComponents/common/TypeDispatch.hpp index 0d4f1a8d761..d01ddf58637 100644 --- a/src/coreComponents/common/TypeDispatch.hpp +++ b/src/coreComponents/common/TypeDispatch.hpp @@ -23,6 +23,7 @@ #define GEOS_COMMON_TYPEDISPATCH_HPP #include "common/DataTypes.hpp" +#include "common/logger/Logger.hpp" #include diff --git a/src/coreComponents/common/Units.hpp b/src/coreComponents/common/Units.hpp index 80b94a94d8d..4749c89ad4a 100644 --- a/src/coreComponents/common/Units.hpp +++ b/src/coreComponents/common/Units.hpp @@ -22,6 +22,7 @@ #include "common/DataTypes.hpp" #include "common/PhysicsConstants.hpp" +#include "common/format/Format.hpp" namespace geos { diff --git a/src/coreComponents/common/Format.hpp b/src/coreComponents/common/format/Format.hpp similarity index 83% rename from src/coreComponents/common/Format.hpp rename to src/coreComponents/common/format/Format.hpp index 58bf6843c39..d8dcb832cf0 100644 --- a/src/coreComponents/common/Format.hpp +++ b/src/coreComponents/common/format/Format.hpp @@ -17,6 +17,7 @@ #define GEOS_COMMON_FORMAT_HPP_ #include +#include #if __cplusplus < 202002L #define GEOS_USE_FMT @@ -88,6 +89,36 @@ struct fmt::formatter< T, std::enable_if_t< std::is_enum< T >::value > > */ #define GEOS_FMT_TO( iter, size, msg, ... ) *GEOS_FMT_NS::format_to_n( iter, size - 1, msg, __VA_ARGS__ ).out = '\0' +/** + * @name Custom formatters + */ +///@{ + +/** + * @brief Format to be able to directly use a std::optional. + * @param T The type of the value contained std::optional and GEOS_FMT_NS::formatter. + */ +template< typename T > +struct GEOS_FMT_NS::formatter< std::optional< T > > : GEOS_FMT_NS::formatter< T > +{ + /** + * @brief Format the std::optional to a string. + * @param opt The std::optional< T > value to format + * @param ctx formatting state consisting of the formatting arguments and the output iterator + * @return return the corresponding value string. If std::optional is empty retun an empty string + */ + auto format( std::optional< T > const & opt, format_context & ctx ) const + { + if( opt ) + { + return GEOS_FMT_NS::formatter< T >::format( *opt, ctx ); + } + return GEOS_FMT_NS::format_to( ctx.out(), "" ); + } +}; + +///@} + // The following workaround is needed to fix compilation with NVCC on some PowerPC machines. // The issue causes the following assertion error message: // "Cannot format an argument. To make type T formattable provide a formatter specialization" diff --git a/src/coreComponents/codingUtilities/StringUtilities.cpp b/src/coreComponents/common/format/StringUtilities.cpp similarity index 98% rename from src/coreComponents/codingUtilities/StringUtilities.cpp rename to src/coreComponents/common/format/StringUtilities.cpp index 2a1face950c..0c692f6a17d 100644 --- a/src/coreComponents/codingUtilities/StringUtilities.cpp +++ b/src/coreComponents/common/format/StringUtilities.cpp @@ -18,6 +18,7 @@ */ #include "StringUtilities.hpp" +#include "common/logger/Logger.hpp" #include "limits.h" #include diff --git a/src/coreComponents/codingUtilities/StringUtilities.hpp b/src/coreComponents/common/format/StringUtilities.hpp similarity index 94% rename from src/coreComponents/codingUtilities/StringUtilities.hpp rename to src/coreComponents/common/format/StringUtilities.hpp index 7f339d49fec..a03e44ac8ea 100644 --- a/src/coreComponents/codingUtilities/StringUtilities.hpp +++ b/src/coreComponents/common/format/StringUtilities.hpp @@ -17,8 +17,8 @@ * @file StringUtilities.hpp */ -#ifndef GEOS_CODINGUTILITIES_STRINGUTILITIES_HPP_ -#define GEOS_CODINGUTILITIES_STRINGUTILITIES_HPP_ +#ifndef GEOS_COMMON_FORMAT_STRINGUTILITIES_HPP_ +#define GEOS_COMMON_FORMAT_STRINGUTILITIES_HPP_ #include "common/DataTypes.hpp" @@ -65,8 +65,8 @@ string join( IT first, IT last, S const & delim = S() ) /** * @brief Join strings or other printable objects with a delimiter. * @tparam CONTAINER type of container to join - * @tparam S type of delimiter, usually char, char const * or string - * @param container container to join + * @tparam S the type of delimiter, usually char, char const * or string + * @param cont the container to join * @param delim delimiter used to glue together strings * @return a string containing input values concatenated with a delimiter */ @@ -216,9 +216,10 @@ template< typename T > string toMetricPrefixString( T const & value ); /** - * @brief Compute the length of a constant string at compile-time. + * @return The length of a constant string computed at compile-time. + * @param str The null-character terminated constant string + * @todo c++17: this function is to remove in favor of std::string_view */ -// TODO c++17: this function is to remove in favor of std::string_view constexpr size_t cstrlen( char const * const str ) { if( str ) @@ -280,4 +281,4 @@ std::ostream & operator<<( std::ostream & os, std::optional< T > const & optValu } // namespace stringutilities } // namespace geos -#endif /* GEOS_CODINGUTILITIES_STRINGUTILITIES_HPP_ */ +#endif /* GEOS_COMMON_FORMAT_STRINGUTILITIES_HPP_ */ diff --git a/src/coreComponents/fileIO/Table/TableData.cpp b/src/coreComponents/common/format/table/TableData.cpp similarity index 100% rename from src/coreComponents/fileIO/Table/TableData.cpp rename to src/coreComponents/common/format/table/TableData.cpp diff --git a/src/coreComponents/fileIO/Table/TableData.hpp b/src/coreComponents/common/format/table/TableData.hpp similarity index 95% rename from src/coreComponents/fileIO/Table/TableData.hpp rename to src/coreComponents/common/format/table/TableData.hpp index 67ce37cafb3..005e3dda7bc 100644 --- a/src/coreComponents/fileIO/Table/TableData.hpp +++ b/src/coreComponents/common/format/table/TableData.hpp @@ -17,11 +17,11 @@ * @file TableData.hpp */ -#ifndef GEOS_COMMON_TableData_HPP -#define GEOS_COMMON_TableData_HPP +#ifndef GEOS_COMMON_FORMAT_TABLE_TABLEDATA_HPP +#define GEOS_COMMON_FORMAT_TABLE_TABLEDATA_HPP #include "common/DataTypes.hpp" -#include "common/Format.hpp" +#include "common/format/Format.hpp" namespace geos { @@ -144,4 +144,4 @@ void TableData2D::addCell( real64 const rowValue, real64 const columnValue, T co } } -#endif +#endif /* GEOS_COMMON_FORMAT_TABLE_TABLEDATA_HPP */ diff --git a/src/coreComponents/fileIO/Table/TableFormatter.cpp b/src/coreComponents/common/format/table/TableFormatter.cpp similarity index 99% rename from src/coreComponents/fileIO/Table/TableFormatter.cpp rename to src/coreComponents/common/format/table/TableFormatter.cpp index d6e145b6a9c..13956a41cd0 100644 --- a/src/coreComponents/fileIO/Table/TableFormatter.cpp +++ b/src/coreComponents/common/format/table/TableFormatter.cpp @@ -18,7 +18,7 @@ */ #include -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" #include "TableFormatter.hpp" namespace geos { diff --git a/src/coreComponents/fileIO/Table/TableFormatter.hpp b/src/coreComponents/common/format/table/TableFormatter.hpp similarity index 97% rename from src/coreComponents/fileIO/Table/TableFormatter.hpp rename to src/coreComponents/common/format/table/TableFormatter.hpp index b06a136e687..21ddc8c5b11 100644 --- a/src/coreComponents/fileIO/Table/TableFormatter.hpp +++ b/src/coreComponents/common/format/table/TableFormatter.hpp @@ -17,8 +17,8 @@ * @file TableFormatter.hpp */ -#ifndef GEOS_COMMON_TABLEFORMATTER_HPP -#define GEOS_COMMON_TABLEFORMATTER_HPP +#ifndef GEOS_COMMON_FORMAT_TABLE_TABLEFORMATTER_HPP +#define GEOS_COMMON_FORMAT_TABLE_TABLEFORMATTER_HPP #include "TableData.hpp" #include "TableLayout.hpp" @@ -219,4 +219,4 @@ class TableTextFormatter : public TableFormatter }; } -#endif +#endif /* GEOS_COMMON_FORMAT_TABLE_TABLEFORMATTER_HPP */ diff --git a/src/coreComponents/fileIO/Table/TableLayout.cpp b/src/coreComponents/common/format/table/TableLayout.cpp similarity index 100% rename from src/coreComponents/fileIO/Table/TableLayout.cpp rename to src/coreComponents/common/format/table/TableLayout.cpp diff --git a/src/coreComponents/fileIO/Table/TableLayout.hpp b/src/coreComponents/common/format/table/TableLayout.hpp similarity index 96% rename from src/coreComponents/fileIO/Table/TableLayout.hpp rename to src/coreComponents/common/format/table/TableLayout.hpp index 9c45c727b22..1c4608e3ea5 100644 --- a/src/coreComponents/fileIO/Table/TableLayout.hpp +++ b/src/coreComponents/common/format/table/TableLayout.hpp @@ -17,8 +17,8 @@ * @file TableLayout.hpp */ -#ifndef GEOS_COMMON_TABLELAYOUT_HPP -#define GEOS_COMMON_TABLELAYOUT_HPP +#ifndef GEOS_COMMON_FORMAT_TABLE_TABLELAYOUT_HPP +#define GEOS_COMMON_FORMAT_TABLE_TABLELAYOUT_HPP #include "common/DataTypes.hpp" @@ -154,4 +154,4 @@ class TableLayout }; } -#endif +#endif /* GEOS_COMMON_FORMAT_TABLE_TABLELAYOUT_HPP */ diff --git a/src/coreComponents/fileIO/Table/unitTests/CMakeLists.txt b/src/coreComponents/common/format/table/unitTests/CMakeLists.txt similarity index 90% rename from src/coreComponents/fileIO/Table/unitTests/CMakeLists.txt rename to src/coreComponents/common/format/table/unitTests/CMakeLists.txt index 4db71486656..f5a4a358e97 100644 --- a/src/coreComponents/fileIO/Table/unitTests/CMakeLists.txt +++ b/src/coreComponents/common/format/table/unitTests/CMakeLists.txt @@ -2,7 +2,7 @@ set( gtest_geosx_tests testTable.cpp ) -set( dependencyList gtest fileIO ${parallelDeps} ) +set( dependencyList gtest common ${parallelDeps} ) # Add gtest C++ based tests foreach(test ${gtest_geosx_tests}) diff --git a/src/coreComponents/fileIO/Table/unitTests/testTable.cpp b/src/coreComponents/common/format/table/unitTests/testTable.cpp similarity index 99% rename from src/coreComponents/fileIO/Table/unitTests/testTable.cpp rename to src/coreComponents/common/format/table/unitTests/testTable.cpp index 0a5f0194680..37c78d01db6 100644 --- a/src/coreComponents/fileIO/Table/unitTests/testTable.cpp +++ b/src/coreComponents/common/format/table/unitTests/testTable.cpp @@ -14,9 +14,9 @@ */ // Source includes -#include "fileIO/Table/TableData.hpp" -#include "fileIO/Table/TableFormatter.hpp" -#include "fileIO/Table/TableLayout.hpp" +#include "common/format/table/TableData.hpp" +#include "common/format/table/TableFormatter.hpp" +#include "common/format/table/TableLayout.hpp" #include "dataRepository/Group.hpp" // TPL includes #include diff --git a/src/coreComponents/common/format/unitTests/CMakeLists.txt b/src/coreComponents/common/format/unitTests/CMakeLists.txt new file mode 100644 index 00000000000..1684cd24bee --- /dev/null +++ b/src/coreComponents/common/format/unitTests/CMakeLists.txt @@ -0,0 +1,19 @@ +# Specify list of tests +set( testSources + testStringUtilities.cpp ) + +set( dependencyList gtest common ${parallelDeps} ) + +# Add gtest C++ based tests +foreach( test ${testSources} ) + + get_filename_component( test_name ${test} NAME_WE ) + blt_add_executable( NAME ${test_name} + SOURCES ${test} + OUTPUT_DIR ${TEST_OUTPUT_DIRECTORY} + DEPENDS_ON ${dependencyList} ) + + geos_add_test( NAME ${test_name} + COMMAND ${test_name} ) + +endforeach() diff --git a/src/coreComponents/codingUtilities/tests/testStringUtilities.cpp b/src/coreComponents/common/format/unitTests/testStringUtilities.cpp similarity index 100% rename from src/coreComponents/codingUtilities/tests/testStringUtilities.cpp rename to src/coreComponents/common/format/unitTests/testStringUtilities.cpp diff --git a/src/coreComponents/common/initializeEnvironment.cpp b/src/coreComponents/common/initializeEnvironment.cpp index 61624d55420..03bf8bfcea0 100644 --- a/src/coreComponents/common/initializeEnvironment.cpp +++ b/src/coreComponents/common/initializeEnvironment.cpp @@ -18,9 +18,7 @@ #include "TimingMacros.hpp" #include "Path.hpp" #include "LvArray/src/system.hpp" -#include "fileIO/Table/TableLayout.hpp" -#include "fileIO/Table/TableData.hpp" -#include "fileIO/Table/TableFormatter.hpp" +#include "common/format/table/TableFormatter.hpp" #include "common/LifoStorageCommon.hpp" #include "common/MemoryInfos.hpp" #include diff --git a/src/coreComponents/common/Logger.cpp b/src/coreComponents/common/logger/Logger.cpp similarity index 98% rename from src/coreComponents/common/Logger.cpp rename to src/coreComponents/common/logger/Logger.cpp index 77a8946b000..c730e8168ad 100644 --- a/src/coreComponents/common/Logger.cpp +++ b/src/coreComponents/common/logger/Logger.cpp @@ -19,8 +19,8 @@ // Source includes #include "Logger.hpp" -#include "Path.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/Path.hpp" +#include "common/format/StringUtilities.hpp" namespace geos { diff --git a/src/coreComponents/common/Logger.hpp b/src/coreComponents/common/logger/Logger.hpp similarity index 99% rename from src/coreComponents/common/Logger.hpp rename to src/coreComponents/common/logger/Logger.hpp index 75ac08d2375..017a6599a88 100644 --- a/src/coreComponents/common/Logger.hpp +++ b/src/coreComponents/common/logger/Logger.hpp @@ -23,7 +23,7 @@ // Source incldes #include "common/GeosxConfig.hpp" #include "common/GeosxMacros.hpp" -#include "common/Format.hpp" +#include "common/format/Format.hpp" #include "LvArray/src/Macros.hpp" // System includes diff --git a/src/coreComponents/constitutive/ConstitutivePassThruHandler.hpp b/src/coreComponents/constitutive/ConstitutivePassThruHandler.hpp index 6430e1dfa78..631b32d6b2f 100644 --- a/src/coreComponents/constitutive/ConstitutivePassThruHandler.hpp +++ b/src/coreComponents/constitutive/ConstitutivePassThruHandler.hpp @@ -20,6 +20,7 @@ #define GEOS_CONSTITUTIVEPASSTHRUHANDLER_HPP #include "codingUtilities/traits.hpp" +#include "codingUtilities/RTTypes.hpp" #include "common/DataTypes.hpp" namespace geos diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/CO2EOSSolver.cpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/CO2EOSSolver.cpp index 1e314cbe6ee..8bae9da6bd3 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/CO2EOSSolver.cpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/CO2EOSSolver.cpp @@ -20,6 +20,7 @@ #include "constitutive/fluid/multifluid/CO2Brine/functions/CO2EOSSolver.hpp" #include "common/Units.hpp" +#include "common/logger/Logger.hpp" namespace geos diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PVTFunctionHelpers.hpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PVTFunctionHelpers.hpp index 346d520acd3..1d93b628265 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PVTFunctionHelpers.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PVTFunctionHelpers.hpp @@ -19,8 +19,8 @@ #include "common/DataTypes.hpp" #include "common/Units.hpp" - -#include "codingUtilities/StringUtilities.hpp" +#include "common/logger/Logger.hpp" +#include "common/format/StringUtilities.hpp" #ifndef GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_CO2BRINE_FUNCTIONS_PVTFUNCTIONHELPERS_HPP_ #define GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_CO2BRINE_FUNCTIONS_PVTFUNCTIONHELPERS_HPP_ diff --git a/src/coreComponents/constitutive/fluid/multifluid/PVTDriver.cpp b/src/coreComponents/constitutive/fluid/multifluid/PVTDriver.cpp index 21cc399b274..8a987d2168b 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/PVTDriver.cpp +++ b/src/coreComponents/constitutive/fluid/multifluid/PVTDriver.cpp @@ -27,7 +27,7 @@ #include "fileIO/Outputs/OutputBase.hpp" #include "functions/FunctionManager.hpp" #include "functions/TableFunction.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" #include diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/functions/CubicEOSPhaseModel.hpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/functions/CubicEOSPhaseModel.hpp index 7b3a860bf37..d992157f521 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/compositional/functions/CubicEOSPhaseModel.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/functions/CubicEOSPhaseModel.hpp @@ -21,6 +21,7 @@ #define GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_COMPOSITIONAL_FUNCTIONS_CUBICEOSPHASEMODEL_HPP_ #include "common/DataTypes.hpp" +#include "common/logger/Logger.hpp" #include "constitutive/fluid/multifluid/MultiFluidConstants.hpp" #include "constitutive/fluid/multifluid/Layouts.hpp" #include "constitutive/fluid/multifluid/compositional/models/ComponentProperties.hpp" diff --git a/src/coreComponents/constitutive/solid/DamageSpectralUtilities.hpp b/src/coreComponents/constitutive/solid/DamageSpectralUtilities.hpp index eb8a32de7a9..bd0584af82c 100644 --- a/src/coreComponents/constitutive/solid/DamageSpectralUtilities.hpp +++ b/src/coreComponents/constitutive/solid/DamageSpectralUtilities.hpp @@ -26,11 +26,15 @@ #ifndef GEOS_CONSTITUTIVE_SOLID_DAMAGESPECTRALUTILITIES_HPP_ #define GEOS_CONSTITUTIVE_SOLID_DAMAGESPECTRALUTILITIES_HPP_ + #include #include #include #include "LvArray/src/output.hpp" #include "LvArray/src/tensorOps.hpp" +#include "common/DataTypes.hpp" +#include "common/logger/Logger.hpp" + namespace geos { diff --git a/src/coreComponents/dataRepository/BufferOps.hpp b/src/coreComponents/dataRepository/BufferOps.hpp index 5b460851747..65ff284d676 100644 --- a/src/coreComponents/dataRepository/BufferOps.hpp +++ b/src/coreComponents/dataRepository/BufferOps.hpp @@ -19,6 +19,7 @@ #define GEOS_DATAREPOSITORY_BUFFEROPS_HPP_ #include "common/DataTypes.hpp" +#include "common/logger/Logger.hpp" #include "codingUtilities/Utilities.hpp" #include "codingUtilities/traits.hpp" #include "LvArray/src/limits.hpp" diff --git a/src/coreComponents/dataRepository/DataContext.hpp b/src/coreComponents/dataRepository/DataContext.hpp index 99893bc77f7..403b2fb5e55 100644 --- a/src/coreComponents/dataRepository/DataContext.hpp +++ b/src/coreComponents/dataRepository/DataContext.hpp @@ -21,9 +21,9 @@ #define GEOS_DATAREPOSITORY_DATACONTEXT_HPP_ #include "common/DataTypes.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include "xmlWrapper.hpp" -#include "common/Format.hpp" +#include "common/format/Format.hpp" namespace geos { diff --git a/src/coreComponents/dataRepository/Group.cpp b/src/coreComponents/dataRepository/Group.cpp index dccbc2441f8..e420631f5ff 100644 --- a/src/coreComponents/dataRepository/Group.cpp +++ b/src/coreComponents/dataRepository/Group.cpp @@ -16,7 +16,7 @@ // Source includes #include "Group.hpp" #include "ConduitRestart.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" #include "codingUtilities/Utilities.hpp" #include "common/TimingMacros.hpp" #include "GroupContext.hpp" diff --git a/src/coreComponents/dataRepository/HistoryDataSpec.hpp b/src/coreComponents/dataRepository/HistoryDataSpec.hpp index 01930b3e935..3fd0d56b3a5 100644 --- a/src/coreComponents/dataRepository/HistoryDataSpec.hpp +++ b/src/coreComponents/dataRepository/HistoryDataSpec.hpp @@ -22,6 +22,7 @@ #include "codingUtilities/traits.hpp" #include "common/DataTypes.hpp" +#include "common/logger/Logger.hpp" #include "LvArray/src/Array.hpp" namespace geos diff --git a/src/coreComponents/dataRepository/InputFlags.hpp b/src/coreComponents/dataRepository/InputFlags.hpp index f40d868a278..72dc4d862b2 100644 --- a/src/coreComponents/dataRepository/InputFlags.hpp +++ b/src/coreComponents/dataRepository/InputFlags.hpp @@ -21,7 +21,7 @@ #define GEOS_DATAREPOSITORY_INPUTFLAGS_HPP_ #include "common/DataTypes.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" namespace geos { diff --git a/src/coreComponents/dataRepository/MappedVector.hpp b/src/coreComponents/dataRepository/MappedVector.hpp index a10c1d93870..82fd0d6f3b3 100644 --- a/src/coreComponents/dataRepository/MappedVector.hpp +++ b/src/coreComponents/dataRepository/MappedVector.hpp @@ -23,7 +23,7 @@ // Source includes #include "KeyIndexT.hpp" #include "common/GeosxMacros.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include "LvArray/src/limits.hpp" // System includes diff --git a/src/coreComponents/dataRepository/ObjectCatalog.hpp b/src/coreComponents/dataRepository/ObjectCatalog.hpp index 399f4270a4a..71c7d7a2f84 100644 --- a/src/coreComponents/dataRepository/ObjectCatalog.hpp +++ b/src/coreComponents/dataRepository/ObjectCatalog.hpp @@ -27,8 +27,8 @@ * of a */ -#include "common/Logger.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/logger/Logger.hpp" +#include "common/format/StringUtilities.hpp" #include "LvArray/src/system.hpp" #include diff --git a/src/coreComponents/dataRepository/RestartFlags.hpp b/src/coreComponents/dataRepository/RestartFlags.hpp index a37b98f038f..c827ee4d0bb 100644 --- a/src/coreComponents/dataRepository/RestartFlags.hpp +++ b/src/coreComponents/dataRepository/RestartFlags.hpp @@ -13,13 +13,15 @@ * ------------------------------------------------------------------------------------------------------------ */ -#ifndef GEOS_DATAREPOSITORY_RESTARTFLAGS_HPP_ -#define GEOS_DATAREPOSITORY_RESTARTFLAGS_HPP_ - /** * @file RestartFlags.hpp */ +#ifndef GEOS_DATAREPOSITORY_RESTARTFLAGS_HPP_ +#define GEOS_DATAREPOSITORY_RESTARTFLAGS_HPP_ + +#include "common/logger/Logger.hpp" + namespace geos { namespace dataRepository diff --git a/src/coreComponents/dataRepository/xmlWrapper.cpp b/src/coreComponents/dataRepository/xmlWrapper.cpp index 73fc7ad410b..4b4759980a0 100644 --- a/src/coreComponents/dataRepository/xmlWrapper.cpp +++ b/src/coreComponents/dataRepository/xmlWrapper.cpp @@ -21,7 +21,7 @@ #include "xmlWrapper.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" #include "common/MpiWrapper.hpp" #include "dataRepository/KeyNames.hpp" diff --git a/src/coreComponents/dataRepository/xmlWrapper.hpp b/src/coreComponents/dataRepository/xmlWrapper.hpp index 04a27502343..f73f3ecaa7e 100644 --- a/src/coreComponents/dataRepository/xmlWrapper.hpp +++ b/src/coreComponents/dataRepository/xmlWrapper.hpp @@ -26,7 +26,8 @@ #include "common/GEOS_RAJA_Interface.hpp" #include "LvArray/src/output.hpp" #include "LvArray/src/input.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" +#include "codingUtilities/RTTypes.hpp" // TPL includes #include diff --git a/src/coreComponents/denseLinearAlgebra/interfaces/blaslapack/BlasLapackLA.cpp b/src/coreComponents/denseLinearAlgebra/interfaces/blaslapack/BlasLapackLA.cpp index 4f5f5dc9001..e9831519596 100644 --- a/src/coreComponents/denseLinearAlgebra/interfaces/blaslapack/BlasLapackLA.cpp +++ b/src/coreComponents/denseLinearAlgebra/interfaces/blaslapack/BlasLapackLA.cpp @@ -23,6 +23,8 @@ // BLAS and LAPACK function declaration #include "denseLinearAlgebra/interfaces/blaslapack/BlasLapackFunctions.h" +#include "common/logger/Logger.hpp" + #include // Put everything under the geos namespace. diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testSolveLinearSystem.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testSolveLinearSystem.cpp index 343bb7e2d5d..5fc85de2864 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testSolveLinearSystem.cpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testSolveLinearSystem.cpp @@ -19,6 +19,7 @@ // Source includes #include "denseLinearAlgebra/interfaces/blaslapack/BlasLapackLA.hpp" +#include "common/logger/Logger.hpp" #include "gtest/gtest.h" diff --git a/src/coreComponents/events/PeriodicEvent.cpp b/src/coreComponents/events/PeriodicEvent.cpp index 2ead548c7aa..88d24228199 100644 --- a/src/coreComponents/events/PeriodicEvent.cpp +++ b/src/coreComponents/events/PeriodicEvent.cpp @@ -19,7 +19,7 @@ #include "PeriodicEvent.hpp" -#include "common/Format.hpp" +#include "common/format/Format.hpp" #include "functions/FunctionManager.hpp" namespace geos diff --git a/src/coreComponents/fieldSpecification/FieldSpecificationManager.cpp b/src/coreComponents/fieldSpecification/FieldSpecificationManager.cpp index e284099013e..b24582179e4 100644 --- a/src/coreComponents/fieldSpecification/FieldSpecificationManager.cpp +++ b/src/coreComponents/fieldSpecification/FieldSpecificationManager.cpp @@ -15,7 +15,7 @@ #include "FieldSpecificationManager.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" #include "constitutive/ConstitutiveManager.hpp" namespace geos diff --git a/src/coreComponents/fieldSpecification/FieldSpecificationManager.hpp b/src/coreComponents/fieldSpecification/FieldSpecificationManager.hpp index 9e1fcc59390..5ce5f1f9e01 100644 --- a/src/coreComponents/fieldSpecification/FieldSpecificationManager.hpp +++ b/src/coreComponents/fieldSpecification/FieldSpecificationManager.hpp @@ -22,7 +22,7 @@ #include "FieldSpecificationBase.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" #include "common/DataTypes.hpp" #include "common/TimingMacros.hpp" #include "mesh/ObjectManagerBase.hpp" diff --git a/src/coreComponents/fileIO/CMakeLists.txt b/src/coreComponents/fileIO/CMakeLists.txt index 41467c67358..84c758fa2b2 100644 --- a/src/coreComponents/fileIO/CMakeLists.txt +++ b/src/coreComponents/fileIO/CMakeLists.txt @@ -6,9 +6,6 @@ set( fileIO_headers Outputs/OutputUtilities.hpp Outputs/PythonOutput.hpp Outputs/RestartOutput.hpp - Table/TableLayout.hpp - Table/TableFormatter.hpp - Table/TableData.hpp Outputs/TimeHistoryOutput.hpp timeHistory/HDFFile.hpp timeHistory/HistoryCollectionBase.hpp @@ -25,9 +22,6 @@ set( fileIO_sources Outputs/OutputUtilities.cpp Outputs/PythonOutput.cpp Outputs/RestartOutput.cpp - Table/TableLayout.cpp - Table/TableFormatter.cpp - Table/TableData.cpp Outputs/TimeHistoryOutput.cpp timeHistory/HDFFile.cpp timeHistory/HistoryCollectionBase.cpp @@ -94,9 +88,6 @@ blt_add_library( NAME fileIO target_include_directories( fileIO PUBLIC ${CMAKE_SOURCE_DIR}/coreComponents ) -if( GEOS_ENABLE_TESTS ) - add_subdirectory( Table/unitTests ) -endif() diff --git a/src/coreComponents/fileIO/Outputs/OutputUtilities.cpp b/src/coreComponents/fileIO/Outputs/OutputUtilities.cpp index 71814f162c3..a52c011ff57 100644 --- a/src/coreComponents/fileIO/Outputs/OutputUtilities.cpp +++ b/src/coreComponents/fileIO/Outputs/OutputUtilities.cpp @@ -19,7 +19,7 @@ #include "OutputUtilities.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include "mesh/ElementRegionManager.hpp" #include "mesh/NodeManager.hpp" diff --git a/src/coreComponents/fileIO/silo/SiloFile.cpp b/src/coreComponents/fileIO/silo/SiloFile.cpp index 73c5533c44e..4abcb5894d4 100644 --- a/src/coreComponents/fileIO/silo/SiloFile.cpp +++ b/src/coreComponents/fileIO/silo/SiloFile.cpp @@ -25,7 +25,7 @@ #include "codingUtilities/Utilities.hpp" #include "common/DataTypes.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include "common/MpiWrapper.hpp" #include "common/TypeDispatch.hpp" #include "constitutive/ConstitutiveManager.hpp" diff --git a/src/coreComponents/fileIO/timeHistory/HDFHistoryIO.hpp b/src/coreComponents/fileIO/timeHistory/HDFHistoryIO.hpp index 9a2b70c2def..8d76f38e243 100644 --- a/src/coreComponents/fileIO/timeHistory/HDFHistoryIO.hpp +++ b/src/coreComponents/fileIO/timeHistory/HDFHistoryIO.hpp @@ -20,6 +20,7 @@ #include "dataRepository/HistoryDataSpec.hpp" #include "BufferedHistoryIO.hpp" #include "common/DataTypes.hpp" +#include "common/MpiWrapper.hpp" #include diff --git a/src/coreComponents/fileIO/vtk/VTKPolyDataWriterInterface.cpp b/src/coreComponents/fileIO/vtk/VTKPolyDataWriterInterface.cpp index 29df130fb63..81b2ee70fd4 100644 --- a/src/coreComponents/fileIO/vtk/VTKPolyDataWriterInterface.cpp +++ b/src/coreComponents/fileIO/vtk/VTKPolyDataWriterInterface.cpp @@ -16,7 +16,7 @@ // Source includes #include "VTKPolyDataWriterInterface.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include "common/TypeDispatch.hpp" #include "dataRepository/Group.hpp" #include "mesh/DomainPartition.hpp" diff --git a/src/coreComponents/linearAlgebra/common/common.hpp b/src/coreComponents/linearAlgebra/common/common.hpp index 236e7811eba..214441231c3 100644 --- a/src/coreComponents/linearAlgebra/common/common.hpp +++ b/src/coreComponents/linearAlgebra/common/common.hpp @@ -20,6 +20,7 @@ #define GEOS_LINEARALGEBRA_INTERFACES_COMMON_HPP_ #include "common/DataTypes.hpp" +#include "common/logger/Logger.hpp" /** * Whether to check preconditions at runtime in LAI functions diff --git a/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraMatrix.cpp b/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraMatrix.cpp index bca0578a432..874a84a4475 100644 --- a/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraMatrix.cpp +++ b/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraMatrix.cpp @@ -19,6 +19,7 @@ #include "EpetraMatrix.hpp" +#include "codingUtilities/RTTypes.hpp" #include "codingUtilities/Utilities.hpp" #include "linearAlgebra/interfaces/trilinos/EpetraUtils.hpp" diff --git a/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraVector.cpp b/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraVector.cpp index 02016e5ffd0..27e891d88c9 100644 --- a/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraVector.cpp +++ b/src/coreComponents/linearAlgebra/interfaces/trilinos/EpetraVector.cpp @@ -19,6 +19,7 @@ #include "EpetraVector.hpp" +#include "codingUtilities/RTTypes.hpp" #include "codingUtilities/Utilities.hpp" #include "linearAlgebra/interfaces/trilinos/EpetraUtils.hpp" diff --git a/src/coreComponents/linearAlgebra/utilities/ComponentMask.hpp b/src/coreComponents/linearAlgebra/utilities/ComponentMask.hpp index 820a119692e..c7aa5f5ad4a 100644 --- a/src/coreComponents/linearAlgebra/utilities/ComponentMask.hpp +++ b/src/coreComponents/linearAlgebra/utilities/ComponentMask.hpp @@ -21,7 +21,7 @@ #define GEOS_LINEARALGEBRA_UTILITIES_COMPONENTMASK_HPP_ #include "common/GeosxMacros.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include diff --git a/src/coreComponents/mainInterface/GeosxState.hpp b/src/coreComponents/mainInterface/GeosxState.hpp index ecefd151fa4..8d6866827d7 100644 --- a/src/coreComponents/mainInterface/GeosxState.hpp +++ b/src/coreComponents/mainInterface/GeosxState.hpp @@ -22,6 +22,7 @@ // Source includes #include "common/DataTypes.hpp" +#include "common/logger/Logger.hpp" // System includes #include diff --git a/src/coreComponents/mainInterface/ProblemManager.cpp b/src/coreComponents/mainInterface/ProblemManager.cpp index 90a57dcb56e..ff063aa555a 100644 --- a/src/coreComponents/mainInterface/ProblemManager.cpp +++ b/src/coreComponents/mainInterface/ProblemManager.cpp @@ -20,7 +20,7 @@ #include "GeosxState.hpp" #include "initialization.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" #include "common/Path.hpp" #include "common/TimingMacros.hpp" #include "constitutive/ConstitutiveManager.hpp" diff --git a/src/coreComponents/mainInterface/version.cpp b/src/coreComponents/mainInterface/version.cpp index 196fef6739d..eb74e831080 100644 --- a/src/coreComponents/mainInterface/version.cpp +++ b/src/coreComponents/mainInterface/version.cpp @@ -14,7 +14,7 @@ */ #include "common/GeosxConfig.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include "mainInterface/GeosxVersion.hpp" namespace geos diff --git a/src/coreComponents/mesh/FaceManager.cpp b/src/coreComponents/mesh/FaceManager.cpp index a397986186c..7942f825f29 100644 --- a/src/coreComponents/mesh/FaceManager.cpp +++ b/src/coreComponents/mesh/FaceManager.cpp @@ -20,7 +20,7 @@ #include "FaceManager.hpp" #include "common/GEOS_RAJA_Interface.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include "common/TimingMacros.hpp" #include "LvArray/src/tensorOps.hpp" #include "mesh/BufferOps.hpp" diff --git a/src/coreComponents/mesh/FieldIdentifiers.hpp b/src/coreComponents/mesh/FieldIdentifiers.hpp index 77348072190..9d78e471933 100644 --- a/src/coreComponents/mesh/FieldIdentifiers.hpp +++ b/src/coreComponents/mesh/FieldIdentifiers.hpp @@ -21,7 +21,8 @@ #define GEOS_MESH_MPICOMMUNICATIONS_FIELDIDENTIFIERS_HPP_ #include "common/DataTypes.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" +#include "common/logger/Logger.hpp" namespace geos { diff --git a/src/coreComponents/mesh/generators/VTKMeshGeneratorTools.hpp b/src/coreComponents/mesh/generators/VTKMeshGeneratorTools.hpp index 8d368dd0d67..d38d25db874 100644 --- a/src/coreComponents/mesh/generators/VTKMeshGeneratorTools.hpp +++ b/src/coreComponents/mesh/generators/VTKMeshGeneratorTools.hpp @@ -27,7 +27,7 @@ #include // NOTE: do NOT include anything from GEOS here. -// In particular, nothing that directly or transitively includes "common/Format.hpp". +// In particular, nothing that directly or transitively includes "common/format/Format.hpp". // The reason is "diy2" library includes an older version of {fmt} than the one used by GEOS. // Collision of includes leads to all kinds of impossible to fix compilation errors. // Thankfully, no link errors, owing to namespace versioning employed by {fmt}. diff --git a/src/coreComponents/mesh/generators/WellGeneratorBase.cpp b/src/coreComponents/mesh/generators/WellGeneratorBase.cpp index 2266865df4d..2b96c0755d3 100644 --- a/src/coreComponents/mesh/generators/WellGeneratorBase.cpp +++ b/src/coreComponents/mesh/generators/WellGeneratorBase.cpp @@ -18,10 +18,8 @@ #include "mesh/Perforation.hpp" #include "mesh/generators/LineBlockABC.hpp" #include "LvArray/src/genericTensorOps.hpp" -#include "fileIO/Table/TableLayout.hpp" -#include "fileIO/Table/TableData.hpp" -#include "fileIO/Table/TableFormatter.hpp" -#include "common/Format.hpp" +#include "common/format/table/TableFormatter.hpp" +#include "common/format/Format.hpp" namespace geos { using namespace dataRepository; diff --git a/src/coreComponents/mesh/mpiCommunications/CommID.cpp b/src/coreComponents/mesh/mpiCommunications/CommID.cpp index b7150525b3d..b4310c23fb8 100644 --- a/src/coreComponents/mesh/mpiCommunications/CommID.cpp +++ b/src/coreComponents/mesh/mpiCommunications/CommID.cpp @@ -15,7 +15,7 @@ #include "CommID.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include diff --git a/src/coreComponents/mesh/simpleGeometricObjects/SimpleGeometricObjectBase.hpp b/src/coreComponents/mesh/simpleGeometricObjects/SimpleGeometricObjectBase.hpp index af81576df1e..a4b2665b9c3 100644 --- a/src/coreComponents/mesh/simpleGeometricObjects/SimpleGeometricObjectBase.hpp +++ b/src/coreComponents/mesh/simpleGeometricObjects/SimpleGeometricObjectBase.hpp @@ -21,7 +21,7 @@ #define GEOS_MESH_SIMPLEGEOMETRICOBJECTS_SIMPLEGEOMETRICOBJECTBASE_HPP_ #include "dataRepository/Group.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" #include "dataRepository/ObjectCatalog.hpp" class Function; diff --git a/src/coreComponents/physicsSolvers/LinearSolverParameters.cpp b/src/coreComponents/physicsSolvers/LinearSolverParameters.cpp index 61895d45695..153703c0eb0 100644 --- a/src/coreComponents/physicsSolvers/LinearSolverParameters.cpp +++ b/src/coreComponents/physicsSolvers/LinearSolverParameters.cpp @@ -18,7 +18,7 @@ */ #include "LinearSolverParameters.hpp" -#include "fileIO/Table/TableFormatter.hpp" +#include "common/format/table/TableFormatter.hpp" namespace geos { diff --git a/src/coreComponents/physicsSolvers/NonlinearSolverParameters.cpp b/src/coreComponents/physicsSolvers/NonlinearSolverParameters.cpp index b7878d79081..8316485d56f 100644 --- a/src/coreComponents/physicsSolvers/NonlinearSolverParameters.cpp +++ b/src/coreComponents/physicsSolvers/NonlinearSolverParameters.cpp @@ -14,8 +14,8 @@ */ #include "NonlinearSolverParameters.hpp" -#include "common/Logger.hpp" -#include "fileIO/Table/TableFormatter.hpp" +#include "common/logger/Logger.hpp" +#include "common/format/table/TableFormatter.hpp" namespace geos { diff --git a/src/coreComponents/schema/schemaUtilities.cpp b/src/coreComponents/schema/schemaUtilities.cpp index 80a657db4a2..4be8a32ab5d 100644 --- a/src/coreComponents/schema/schemaUtilities.cpp +++ b/src/coreComponents/schema/schemaUtilities.cpp @@ -20,7 +20,7 @@ /// Source includes #include "schemaUtilities.hpp" -#include "codingUtilities/StringUtilities.hpp" +#include "common/format/StringUtilities.hpp" #include "common/DataTypes.hpp" #include "dataRepository/Group.hpp" #include "dataRepository/InputFlags.hpp" diff --git a/src/coreComponents/unitTests/dataRepositoryTests/testObjectCatalog.cpp b/src/coreComponents/unitTests/dataRepositoryTests/testObjectCatalog.cpp index 2d7f0631b71..365e1c1124b 100644 --- a/src/coreComponents/unitTests/dataRepositoryTests/testObjectCatalog.cpp +++ b/src/coreComponents/unitTests/dataRepositoryTests/testObjectCatalog.cpp @@ -17,7 +17,7 @@ // Source includes #include "dataRepository/ObjectCatalog.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include "mainInterface/initialization.hpp" // TPL includes diff --git a/src/coreComponents/unitTests/finiteVolumeTests/testMimeticInnerProducts.cpp b/src/coreComponents/unitTests/finiteVolumeTests/testMimeticInnerProducts.cpp index aa5fd0b8b5a..fa265348074 100644 --- a/src/coreComponents/unitTests/finiteVolumeTests/testMimeticInnerProducts.cpp +++ b/src/coreComponents/unitTests/finiteVolumeTests/testMimeticInnerProducts.cpp @@ -15,7 +15,7 @@ // Source includes #include "codingUtilities/UnitTestUtilities.hpp" -#include "common/Logger.hpp" +#include "common/logger/Logger.hpp" #include "finiteVolume/mimeticInnerProducts/MimeticInnerProductBase.hpp" #include "finiteVolume/mimeticInnerProducts/TPFAInnerProduct.hpp" #include "finiteVolume/mimeticInnerProducts/QuasiTPFAInnerProduct.hpp" diff --git a/src/main/main.cpp b/src/main/main.cpp index 731496fb5b0..375b456aadf 100644 --- a/src/main/main.cpp +++ b/src/main/main.cpp @@ -15,7 +15,7 @@ // Source includes #include "common/DataTypes.hpp" -#include "common/Format.hpp" +#include "common/format/Format.hpp" #include "common/TimingMacros.hpp" #include "common/Units.hpp" #include "mainInterface/initialization.hpp" From 159830248639976e2191081bcaa8b11ad826097f Mon Sep 17 00:00:00 2001 From: Randolph Settgast Date: Mon, 5 Aug 2024 16:20:05 -1000 Subject: [PATCH 06/42] fix: testUnits failure on MacOS (#3269) * change the SystemClock from std::chrono::system_clock to std::chrono::high_resolution_clock to avoid truncation problems on MacOS --- src/coreComponents/common/Units.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreComponents/common/Units.hpp b/src/coreComponents/common/Units.hpp index 4749c89ad4a..ad49a1d30ce 100644 --- a/src/coreComponents/common/Units.hpp +++ b/src/coreComponents/common/Units.hpp @@ -182,7 +182,7 @@ inline string formatValue( real64 value, Unit unit ) /// Clock in use in GEOS to manipulate system times. -using SystemClock = std::chrono::system_clock; +using SystemClock = std::chrono::high_resolution_clock; /// One year = 365.2425 days (= 146097 / 400) following the Gregorian calendar and the C++ convention. using YearDaysRatio = std::ratio< 146097, 400 >; From 69727912de203077e83ba20a0cd724f785e7136d Mon Sep 17 00:00:00 2001 From: MelReyCG <122801580+MelReyCG@users.noreply.github.com> Date: Tue, 6 Aug 2024 04:33:50 +0200 Subject: [PATCH 07/42] feat: Transmissibility output (#3091) * added transmissibility unit * Added Cell-To-Cell output * Add the logLevel viewkey & description (cherrypick from feature/rey/sourceflux-stats) * Refactor the StencilOutput so the PackCollection can read it. Point is to allow to do an HDF output, and remove the CSV one. * Changing the Problem sub-groups init order so the outputs are at the end. Point is to solve a bug where the StencilDataCollection buffer size are not known for the HDF chunk sizes. * freeOnDevice fix test --- ...eadoil_3ph_staircase_3d_transmi_output.xml | 81 ++++ src/coreComponents/common/Units.hpp | 96 ++--- src/coreComponents/common/logger/Logger.hpp | 17 + src/coreComponents/dataRepository/Group.hpp | 16 +- .../fileIO/timeHistory/PackCollection.cpp | 3 +- .../finiteVolume/docs/StencilModel.plantuml | 362 ++++++++++++++++++ .../mainInterface/ProblemManager.cpp | 27 +- .../physicsSolvers/fluidFlow/CMakeLists.txt | 2 + .../fluidFlow/StencilDataCollection.cpp | 296 ++++++++++++++ .../fluidFlow/StencilDataCollection.hpp | 178 +++++++++ .../CoupledReservoirAndWellsBase.hpp | 4 +- .../schema/docs/CellToCellDataCollection.rst | 12 + .../docs/CellToCellDataCollection_other.rst | 12 + src/coreComponents/schema/docs/Tasks.rst | 1 + .../schema/docs/Tasks_other.rst | 1 + src/coreComponents/schema/schema.xsd | 15 + src/coreComponents/schema/schema.xsd.other | 11 + .../unitTests/fluidFlowTests/CMakeLists.txt | 3 +- .../fluidFlowTests/testTransmissibility.cpp | 332 ++++++++++++++++ src/docs/sphinx/CompleteXMLSchema.rst | 14 + 20 files changed, 1418 insertions(+), 65 deletions(-) create mode 100644 inputFiles/compositionalMultiphaseFlow/deadoil_3ph_staircase_3d_transmi_output.xml create mode 100644 src/coreComponents/finiteVolume/docs/StencilModel.plantuml create mode 100644 src/coreComponents/physicsSolvers/fluidFlow/StencilDataCollection.cpp create mode 100644 src/coreComponents/physicsSolvers/fluidFlow/StencilDataCollection.hpp create mode 100644 src/coreComponents/schema/docs/CellToCellDataCollection.rst create mode 100644 src/coreComponents/schema/docs/CellToCellDataCollection_other.rst create mode 100644 src/coreComponents/unitTests/fluidFlowTests/testTransmissibility.cpp diff --git a/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_staircase_3d_transmi_output.xml b/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_staircase_3d_transmi_output.xml new file mode 100644 index 00000000000..121881e8650 --- /dev/null +++ b/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_staircase_3d_transmi_output.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/coreComponents/common/Units.hpp b/src/coreComponents/common/Units.hpp index ad49a1d30ce..9b28532f0eb 100644 --- a/src/coreComponents/common/Units.hpp +++ b/src/coreComponents/common/Units.hpp @@ -96,6 +96,9 @@ enum Unit : integer /// Mole rate in mol/s MoleRate, + + /// Transmissibility in m2/s + Transmissibility, }; @@ -107,21 +110,22 @@ constexpr inline std::string_view getDescription( Unit unit ) { switch( unit ) { - default: return "unknown [?]"; - case Dimensionless: return "dimensionless [1]"; - case Pressure: return "pressure [Pa]"; - case Temperature: return "temperature [K]"; - case TemperatureInC: return "temperature [C]"; - case Distance: return "distance [m]"; - case Time: return "time [s]"; - case Viscosity: return "viscosity [Pa*s]"; - case Enthalpy: return "enthalpy [J/kg]"; - case Density: return "density [kg/m3]"; - case Solubility: return "solubility [g/L]"; - case Mass: return "mass [kg]"; - case Mole: return "mole [mol]"; - case MassRate: return "mass rate [kg/s]"; - case MoleRate: return "mole rate [mol/s]"; + default: return "unknown [?]"; + case Dimensionless: return "dimensionless [1]"; + case Pressure: return "pressure [Pa]"; + case Temperature: return "temperature [K]"; + case TemperatureInC: return "temperature [C]"; + case Distance: return "distance [m]"; + case Time: return "time [s]"; + case Viscosity: return "viscosity [Pa*s]"; + case Enthalpy: return "enthalpy [J/kg]"; + case Density: return "density [kg/m3]"; + case Solubility: return "solubility [g/L]"; + case Mass: return "mass [kg]"; + case Mole: return "mole [mol]"; + case MassRate: return "mass rate [kg/s]"; + case MoleRate: return "mole rate [mol/s]"; + case Transmissibility: return "transmissibility [(Pa*s*rm3/s)/Pa]"; } } @@ -133,21 +137,22 @@ constexpr inline std::string_view getSymbol( Unit unit ) { switch( unit ) { - default: return "?"; - case Dimensionless: return "1"; - case Pressure: return "Pa"; - case Temperature: return "K"; - case TemperatureInC: return "C"; - case Distance: return "m"; - case Time: return "s"; - case Viscosity: return "Pa*s"; - case Enthalpy: return "J/kg"; - case Density: return "kg/m3"; - case Solubility: return "g/L"; - case Mass: return "kg"; - case Mole: return "mol"; - case MassRate: return "kg/s"; - case MoleRate: return "mol/s"; + default: return "?"; + case Dimensionless: return "1"; + case Pressure: return "Pa"; + case Temperature: return "K"; + case TemperatureInC: return "C"; + case Distance: return "m"; + case Time: return "s"; + case Viscosity: return "Pa*s"; + case Enthalpy: return "J/kg"; + case Density: return "kg/m3"; + case Solubility: return "g/L"; + case Mass: return "kg"; + case Mole: return "mol"; + case MassRate: return "kg/s"; + case MoleRate: return "mol/s"; + case Transmissibility: return "(Pa*s*rm3/s)/Pa"; } } @@ -162,21 +167,22 @@ inline string formatValue( real64 value, Unit unit ) { switch( unit ) { - default: return GEOS_FMT( "value of {} [?]", value ); - case Dimensionless: return GEOS_FMT( "value of {} [1]", value ); - case Pressure: return GEOS_FMT( "pressure of {} [Pa]", value ); - case Temperature: return GEOS_FMT( "temperature of {} [K]", value ); - case TemperatureInC: return GEOS_FMT( "temperature of {} [K]", convertCToK( value ) ); - case Distance: return GEOS_FMT( "distance of {} [s]", value ); - case Time: return GEOS_FMT( "time of {} [s]", value ); - case Viscosity: return GEOS_FMT( "viscosity of {} [Pa*s]", value ); - case Enthalpy: return GEOS_FMT( "enthalpy of {} [J/kg]", value ); - case Density: return GEOS_FMT( "density of {} [kg/m3]", value ); - case Solubility: return GEOS_FMT( "solubility of {} [g/L]", value ); - case Mass: return GEOS_FMT( "mass of {} [kg]", value ); - case Mole: return GEOS_FMT( "mole of {} [mol]", value ); - case MassRate: return GEOS_FMT( "mass rate of {} [kg/s]", value ); - case MoleRate: return GEOS_FMT( "mole rate of {} [mol/s]", value ); + default: return GEOS_FMT( "value of {} [?]", value ); + case Dimensionless: return GEOS_FMT( "value of {} [1]", value ); + case Pressure: return GEOS_FMT( "pressure of {} [Pa]", value ); + case Temperature: return GEOS_FMT( "temperature of {} [K]", value ); + case TemperatureInC: return GEOS_FMT( "temperature of {} [K]", convertCToK( value ) ); + case Distance: return GEOS_FMT( "distance of {} [s]", value ); + case Time: return GEOS_FMT( "time of {} [s]", value ); + case Viscosity: return GEOS_FMT( "viscosity of {} [Pa*s]", value ); + case Enthalpy: return GEOS_FMT( "enthalpy of {} [J/kg]", value ); + case Density: return GEOS_FMT( "density of {} [kg/m3]", value ); + case Solubility: return GEOS_FMT( "solubility of {} [g/L]", value ); + case Mass: return GEOS_FMT( "mass of {} [kg]", value ); + case Mole: return GEOS_FMT( "mole of {} [mol]", value ); + case MassRate: return GEOS_FMT( "mass rate of {} [kg/s]", value ); + case MoleRate: return GEOS_FMT( "mole rate of {} [mol/s]", value ); + case Transmissibility: return GEOS_FMT( "transmissibility of {} [(Pa*s*rm3/s)/Pa]", value ); } } diff --git a/src/coreComponents/common/logger/Logger.hpp b/src/coreComponents/common/logger/Logger.hpp index 017a6599a88..2988677aaa8 100644 --- a/src/coreComponents/common/logger/Logger.hpp +++ b/src/coreComponents/common/logger/Logger.hpp @@ -536,6 +536,23 @@ struct SimulationError : public std::runtime_error SimulationError( std::exception const & subException, std::string const & msgToInsert ); }; +/** + * @brief Exception class used to report errors from type conversion + * @todo (ErrorManager EPIC #2940) Consider adding a way to precise custom exception parameters, to add + * expected & encountered typeid for this one (in order to manage the exception output more precisely). + * We could also manage this by having: BadTypeErrorABC <|--- BadTypeError< T > /!\ compilation time + */ +struct BadTypeError : public std::runtime_error +{ + /** + * @brief Constructor + * @param what the error message + */ + BadTypeError( std::string const & what ): + std::runtime_error( what ) + {} +}; + /** * @brief Exception class used for special control flow. */ diff --git a/src/coreComponents/dataRepository/Group.hpp b/src/coreComponents/dataRepository/Group.hpp index b6d6ff08cfd..afae64bde36 100644 --- a/src/coreComponents/dataRepository/Group.hpp +++ b/src/coreComponents/dataRepository/Group.hpp @@ -338,8 +338,12 @@ class Group "Group " << getDataContext() << " has no child named " << key << std::endl << dumpSubGroupsNames(), std::domain_error ); - - return dynamicCast< T & >( *child ); + T * const castedChild = dynamicCast< T * >( child ); + GEOS_THROW_IF( castedChild == nullptr, + GEOS_FMT( "{} was expected to be a '{}'.", + child->getDataContext(), LvArray::system::demangleType< T >() ), + BadTypeError ); + return *castedChild; } /** @@ -353,8 +357,12 @@ class Group "Group " << getDataContext() << " has no child named " << key << std::endl << dumpSubGroupsNames(), std::domain_error ); - - return dynamicCast< T const & >( *child ); + T const * const castedChild = dynamicCast< T const * >( child ); + GEOS_THROW_IF( castedChild == nullptr, + GEOS_FMT( "{} was expected to be a '{}'.", + child->getDataContext(), LvArray::system::demangleType< T >() ), + BadTypeError ); + return *castedChild; } /** diff --git a/src/coreComponents/fileIO/timeHistory/PackCollection.cpp b/src/coreComponents/fileIO/timeHistory/PackCollection.cpp index d2302b5a949..14b06f61a0b 100644 --- a/src/coreComponents/fileIO/timeHistory/PackCollection.cpp +++ b/src/coreComponents/fileIO/timeHistory/PackCollection.cpp @@ -72,6 +72,7 @@ void PackCollection::initializePostSubGroups( ) { // coord meta collectors should have m_disableCoordCollection == true to avoid // infinite recursive init calls here + // (side note: should we create a m_isMetaCollector field to prevent any confusion?) metaCollector->initializePostSubGroups(); } m_initialized = true; @@ -255,7 +256,7 @@ localIndex PackCollection::numMetaDataCollectors() const void PackCollection::buildMetaDataCollectors() { - if( !m_disableCoordCollection ) + if( !m_disableCoordCollection && m_targetIsMeshObject ) { char const * coordField = nullptr; if( m_objectPath.find( "nodeManager" ) != string::npos ) diff --git a/src/coreComponents/finiteVolume/docs/StencilModel.plantuml b/src/coreComponents/finiteVolume/docs/StencilModel.plantuml new file mode 100644 index 00000000000..fa7b49c49b4 --- /dev/null +++ b/src/coreComponents/finiteVolume/docs/StencilModel.plantuml @@ -0,0 +1,362 @@ +@startuml StencilModel + +' left to right direction + +skinparam classAttributeIconSize 0 +skinparam groupInheritance 0 + + + + +' ############################# +' # external classes +' ############################# +class array2d +hide array2d + + + +' ############################# +' # Stencil traits templates +' ############################# + + +package "Stencil traits" <> { + class StencilTraits << template >> { + CONTAINER : class + MAX_NUM_POINTS_IN_FLUX : localIndex + MAX_STENCIL_SIZE : localIndex + MAX_NUM_CONNECTIONS : localIndex + } + + map TwoPointStencilTraits { + CONTAINER => array2d + MAX_NUM_POINTS_IN_FLUX => 2 + MAX_STENCIL_SIZE => 2 + MAX_NUM_CONNECTIONS => 1 + } + map CellElementStencilMPFATraits { + CONTAINER => ArrayOfArrays + MAX_NUM_POINTS_IN_FLUX => 2 + MAX_STENCIL_SIZE => 18 + MAX_NUM_CONNECTIONS => 1 + } + map SurfaceElementStencilTraits { + CONTAINER => ArrayOfArrays + MAX_NUM_POINTS_IN_FLUX => 6 + MAX_STENCIL_SIZE => 6 + MAX_NUM_CONNECTIONS => 15 + } + + StencilTraits <|--u TwoPointStencilTraits : << template instance >> + StencilTraits <|--u CellElementStencilMPFATraits : << template instance >> + StencilTraits <|--u SurfaceElementStencilTraits : << template instance >> +} + + +' ############################# +' # Stencil classes +' ############################# +class StencilBase< TRAITS > { + - m_elementRegionIndices : IndexContainerView + - m_elementSubRegionIndices : IndexContainerView + - m_elementIndices : IndexContainerView + - m_weights : WeightContainerView + - m_connectorIndices + + getElementRegionIndices() : IndexContainerView + getElementSubRegionIndices() : IndexContainerView + getElementIndices() : IndexContainerView + getWeights() : WeightContainerView + + {abstract} reserve() : void + {abstract} add(N, elemRegionIds[N], elemSubRegionIds[N], elemIds[N], weights[N], connIndex) : void + {abstract} move() : void + {abstract} zero() : bool + {abstract} size() : localIndex + setName() : void +} +note right : Provides management of the interior stencil points +StencilTraits <|-d- StencilBase : TRAITS : StencilTraits + + +class CellElementStencilTPFA { + createKernelWrapper() : CellElementStencilTPFAWrapper + addVectors( transMultipler, geomStabilizationCoef faceNormal[3], cellToFace[2][3] ) +} +note left : Provides management of the interior stencil points when using Two-Point flux approximation. +StencilBase <|-- CellElementStencilTPFA : << TRAITS : TwoPointStencilTraits >> + + +class BoundaryStencil { + createKernelWrapper() : BoundaryStencilWrapper + addVectors( transMultipler, faceNormal[3], cellToFace[2][3] ) +} +note right : Provides management of the boundary stencil points(stencils used to prescribe boundary conditions on domain boundaries, i.e. faces) +StencilBase <|-- BoundaryStencil : << TRAITS : TwoPointStencilTraits >> + + +class CellElementStencilMPFA { +} +note right : Provides management of the interior stencil points when using a Multi-point flux approximation. +StencilBase <|-- CellElementStencilMPFA : << TRAITS : CellElementStencilMPFATraits >> + + +class FaceElementToCellStencil { + createKernelWrapper() : FaceElementToCellStencilWrapper + addVectors( transMultipler, faceNormal[3], cellToFace[2][3] ) +} +note right : Provides management of the interior stencil points for a face elements when using Two-Point flux approximation. +StencilBase <|-- FaceElementToCellStencil : << TRAITS : TwoPointStencilTraits >> + + +class EmbeddedSurfaceToCellStencil { + createKernelWrapper() : EmbeddedSurfaceToCellStencilWrapper +} +note right : Provides management of the interior stencil points for a face elements when using Two-Point flux approximation. +StencilBase <|-- EmbeddedSurfaceToCellStencil : << TRAITS : TwoPointStencilTraits >> + + +class SurfaceElementStencil { + createKernelWrapper() : SurfaceElementStencilWrapper +} +note right : Provides management of the interior stencil points for a face elements when using Two-Point flux approximation. +StencilBase <|-- SurfaceElementStencil : << TRAITS : SurfaceElementStencilTraits >> + + +CellElementStencilTPFA -[hidden]u- BoundaryStencil +BoundaryStencil -[hidden]u- CellElementStencilMPFA +CellElementStencilMPFA -[hidden]u- FaceElementToCellStencil +FaceElementToCellStencil -[hidden]u- EmbeddedSurfaceToCellStencil +EmbeddedSurfaceToCellStencil -[hidden]u- SurfaceElementStencil + + +' ############################# +' # Stencil Wrapper classes +' ############################# +class StencilWrapperBase< TRAITS > { + - m_elementRegionIndices : IndexContainerView + - m_elementSubRegionIndices : IndexContainerView + - m_elementIndices : IndexContainerView + - m_weights : WeightContainerView + + getElementRegionIndices() : IndexContainerView + getElementSubRegionIndices() : IndexContainerView + getElementIndices() : IndexContainerView + getWeights() : WeightContainerView + + void {abstract} computeWeights(iconn, coefficient, weight) +} +note right of StencilWrapperBase + Class to provide access to the computation of stencil weights that may be called from a kernel function. +end note +note left of StencilWrapperBase::"computeWeights(iconn, coefficient, weight, [...])" + Present in the inheriting classes with different signatures. + Compute transmissibility for the "iconn" cell-cell connection taking the "coefficient" (= permeability) and the stencil value into account to compute "weight": + transmissibility = stencilWeight * permeability +end note +StencilTraits <|-d- StencilWrapperBase : TRAITS : StencilTraits + + +class BoundaryStencilWrapper { + - m_faceNormal : arrayView2D< real64 > + - m_cellToFaceVec : arrayView2D< real64 > + - m_weightMultiplier : arrayView2D< real64 > + + void computeWeights( iconn, coefficient, &weight, ... ) +} +note right : Provides access to the boundary stencil that may be called from a kernel function. +StencilWrapperBase <|-- BoundaryStencilWrapper : << TRAITS : TwoPointStencilTraits >> + + +class CellElementStencilTPFAWrapper { + m_faceNormal : arrayView2d< real64 > + m_cellToFaceVec : arrayView3d< real64 > + m_transMultiplier : arrayView1d< real64 > + m_geometricStabilizationCoef : arrayView1d< real64 > + + void computeWeights( iconn, coefficient, &weight[1][2], ... ) +} +note right : Provides access to the cellElement stencil that may be called from a kernel function. +StencilWrapperBase <|-- CellElementStencilTPFAWrapper : << TRAITS : TwoPointStencilTraits >> + + +class FaceElementToCellStencilWrapper { + m_faceNormal : arrayView2d< real64 > + m_cellToFaceVec : arrayView3d< real64 > + m_transMultiplier : arrayView1d< real64 > + + void computeWeights( iconn, coefficient, &weight[1][2], ... ) +} +note right : Provides access to the FaceElementToCellStencil that may be called from a kernel function. +StencilWrapperBase <|-- FaceElementToCellStencilWrapper : << TRAITS : TwoPointStencilTraits >> + + +class SurfaceElementStencilWrapper { + m_cellCenterToEdgeCenters ArrayOfArraysView + m_meanPermCoefficient real64 + + void computeWeights( iconn, coefficient, &weight[1][2], ... ) +} +note right : Provides access to the SurfaceElementStencil that may be called from a kernel function. +StencilWrapperBase <|-- SurfaceElementStencilWrapper : << TRAITS : SurfaceElementStencilTraits >> + + +class EmbeddedSurfaceToCellStencilWrapper { + void computeWeights( iconn, coefficient, &weight[1][2], ... ) +} +note right : Provide access to the EmbeddedSurfaceToCellStencil that may be called from a kernel function. +StencilWrapperBase <|-- EmbeddedSurfaceToCellStencilWrapper : << TRAITS : TwoPointStencilTraits >> + + +BoundaryStencilWrapper -[hidden]down- CellElementStencilTPFAWrapper +CellElementStencilTPFAWrapper -[hidden]down- FaceElementToCellStencilWrapper +FaceElementToCellStencilWrapper -[hidden]down- SurfaceElementStencilWrapper +SurfaceElementStencilWrapper -[hidden]down- EmbeddedSurfaceToCellStencilWrapper + + +' ############################# +' # Physics solver classes +' ############################# + + +class SinglePhaseFVM { + assembleFluxTerms( dt, domain ) +} + +package singlePhaseFVMKernels { + + class FaceBasedAssemblyKernelBase { + - m_rankOffset : globalIndex + - m_dt : real64 + - m_permeability : arrayView3d< real64 > + - m_pres : arrayView1d< real64 > + - m_dens : arrayView2d< real64 > + - ... + } + + class FaceBasedAssemblyKernel< STENCIL_WRAPPER > { + {static} launch(int numConnections, FaceBasedAssemblyKernel kernel) + setup(localIndex iconn, StackVariables & stack) + computeFlux(localIndex iconn, StackVariables & stack) + complete(localIndex iconn, StackVariables & stack) + } + note left: Define the interface for the assembly kernel in charge of flux terms (there are more classes of this type) + note right of FaceBasedAssemblyKernel::launch + Performs the kernel launch: setup(), computeFlux(), complete() + end note + note right of FaceBasedAssemblyKernel::computeFlux + Compute the local flux contributions. + - Depends on StencilWrapperBase::computeWeights() to compute the transmissibility for the current timestep (because permeability can change) + end note + FaceBasedAssemblyKernelBase <|-- FaceBasedAssemblyKernel + FaceBasedAssemblyKernel *-- StencilWrapperBase : contains a << STENCIL_WRAPPER : StencilWrapperBase >> + + class StackVariables { + - stencilSize : localIndex + - numFluxElems : localIndex + - transmissibility : real64[][2] + - dTrans_dPres : real64[][2] + - dofColIndices : stackArray1d< globalIndex > + - localFlux : stackArray1d< real64 > + - localFluxJacobian : stackArray2d< real64 > + } + FaceBasedAssemblyKernel ..> StackVariables : depends on + + class FaceBasedAssemblyKernelFactory< STENCIL_WRAPPER > { + {static} createAndLaunch([...], STENCIL_WRAPPER stencilWrapper, [...]) + } + note right of FaceBasedAssemblyKernelFactory::createAndLaunch + Create and call a FaceBasedAssemblyKernel after the StencilWrapperBase + end note + FaceBasedAssemblyKernelFactory ..> FaceBasedAssemblyKernel : creates a + FaceBasedAssemblyKernelFactory ..> StencilWrapperBase : depends on << STENCIL_WRAPPER : StencilWrapperBase >> + SinglePhaseFVM::assembleFluxTerms ..> FaceBasedAssemblyKernelFactory : launches + +} +note top of singlePhaseFVMKernels: Namespace that groups device kernel classes for the SinglePhaseFVM physics solver + + +' ############################# +' # FIELDS +' ############################# + + +package fields { + +' class ghostRank +' class elementVolume + + package permeability { + class permeability + class permeabilityMultiplier +' class dPerm_dPressure + } + note "constitutive/permeability/PermeabilityFields.hpp" as permeabilityN + permeabilityN .. permeability + + package flow { + class pressure +' class initialPressure +' class deltaPressure + class temperature +' class netToGross +' class deltaVolume +' class gravityCoefficient + + class transMultiplier + note right of transMultiplier : Permeability multiplier in transmissibility calculation + } + note "physicsSolvers/fluidFlow/FlowSolverBaseFields.hpp" as flowN + flowN .. flow +} +note top of fields : mesh/MeshFields.hpp + + +' ############################# +' # Flux classes +' ############################# + + +class FluxApproximationBase { + initializePostInitialConditionsPreSubGroups() + {abstract} computeCellStencil( mesh ) + {abstract} computeBoundaryStencil( mesh ) + {abstract} computeAquiferStencil( domain, mesh ) + [...] +} +note top of FluxApproximationBase + Base class for various flux approximation classes. + Stores the main and boundary stencils, construction is implemented in derived classes. +end note +note right of FluxApproximationBase::initializePostInitialConditionsPreSubGroups + Call : + - computeCellStencil() + - computeBoundaryStencil() + - computeAquiferStencil() +end note +note right of FluxApproximationBase::computeCellStencil + Compute the "Main stencil" **(=CellElementStencilXPFA)** for cell-cell fluxes. +end note +note right of FluxApproximationBase::computeBoundaryStencil + Boundary stencils are for Dirichlet boundary conditions +end note +note right of FluxApproximationBase::computeAquiferStencil + Called for each "Aquifer" +end note + +class TwoPointFluxApproximation { + computeCellStencil( mesh ) + computeBoundaryStencil( mesh ) + computeAquiferStencil( domain, mesh ) + [...] +} +FluxApproximationBase <|-- TwoPointFluxApproximation : creates a +CellElementStencilTPFA <..r... TwoPointFluxApproximation::computeCellStencil : computeCellStencil()\nwrites in + + +@enduml \ No newline at end of file diff --git a/src/coreComponents/mainInterface/ProblemManager.cpp b/src/coreComponents/mainInterface/ProblemManager.cpp index ff063aa555a..23ca5862dc0 100644 --- a/src/coreComponents/mainInterface/ProblemManager.cpp +++ b/src/coreComponents/mainInterface/ProblemManager.cpp @@ -541,22 +541,22 @@ void ProblemManager::initializationOrder( string_array & order ) { SortedArray< string > usedNames; + // first, numerical methods + order.emplace_back( groupKeys.numericalMethodsManager.key() ); + usedNames.insert( groupKeys.numericalMethodsManager.key() ); - { - order.emplace_back( groupKeys.numericalMethodsManager.key() ); - usedNames.insert( groupKeys.numericalMethodsManager.key() ); - } + // next, domain + order.emplace_back( groupKeys.domain.key() ); + usedNames.insert( groupKeys.domain.key() ); - { - order.emplace_back( groupKeys.domain.key() ); - usedNames.insert( groupKeys.domain.key() ); - } + // next, events + order.emplace_back( groupKeys.eventManager.key() ); + usedNames.insert( groupKeys.eventManager.key() ); - { - order.emplace_back( groupKeys.eventManager.key() ); - usedNames.insert( groupKeys.eventManager.key() ); - } + // (keeping outputs for the end) + usedNames.insert( groupKeys.outputManager.key() ); + // next, everything... for( auto const & subGroup : this->getSubGroups() ) { if( usedNames.count( subGroup.first ) == 0 ) @@ -564,6 +564,9 @@ void ProblemManager::initializationOrder( string_array & order ) order.emplace_back( subGroup.first ); } } + + // end with outputs (in order to define the chunk sizes after any data source) + order.emplace_back( groupKeys.outputManager.key() ); } diff --git a/src/coreComponents/physicsSolvers/fluidFlow/CMakeLists.txt b/src/coreComponents/physicsSolvers/fluidFlow/CMakeLists.txt index ee3263c50b2..37b41360330 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/CMakeLists.txt +++ b/src/coreComponents/physicsSolvers/fluidFlow/CMakeLists.txt @@ -39,6 +39,7 @@ set( physicsSolvers_headers fluidFlow/StabilizedCompositionalMultiphaseFVMKernels.hpp fluidFlow/StabilizedSinglePhaseFVMKernels.hpp fluidFlow/StencilAccessors.hpp + fluidFlow/StencilDataCollection.hpp fluidFlow/ThermalSinglePhaseBaseKernels.hpp fluidFlow/ThermalSinglePhaseFVMKernels.hpp fluidFlow/wells/CompositionalMultiphaseWell.hpp @@ -73,6 +74,7 @@ set( physicsSolvers_sources fluidFlow/SinglePhaseProppantBase.cpp fluidFlow/SinglePhaseProppantFluxKernels.cpp fluidFlow/SourceFluxStatistics.cpp + fluidFlow/StencilDataCollection.cpp fluidFlow/wells/CompositionalMultiphaseWell.cpp fluidFlow/wells/CompositionalMultiphaseWellKernels.cpp fluidFlow/wells/SinglePhaseWell.cpp diff --git a/src/coreComponents/physicsSolvers/fluidFlow/StencilDataCollection.cpp b/src/coreComponents/physicsSolvers/fluidFlow/StencilDataCollection.cpp new file mode 100644 index 00000000000..9a4a4dc06aa --- /dev/null +++ b/src/coreComponents/physicsSolvers/fluidFlow/StencilDataCollection.cpp @@ -0,0 +1,296 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 StencilDataCollection.cpp + */ + +#include "StencilDataCollection.hpp" + +#include "common/Units.hpp" +#include "finiteVolume/FluxApproximationBase.hpp" +#include "finiteVolume/TwoPointFluxApproximation.hpp" +#include "constitutive/permeability/PermeabilityBase.hpp" +#include "constitutive/permeability/PermeabilityFields.hpp" +#include "physicsSolvers/fluidFlow/StencilAccessors.hpp" +#include "mainInterface/ProblemManager.hpp" +#include "physicsSolvers/PhysicsSolverManager.hpp" +#include "common/format/table/TableFormatter.hpp" + +namespace geos +{ + +using namespace constitutive; +using namespace dataRepository; + + +StencilDataCollection::StencilDataCollection( const string & name, + Group * const parent ): + Base( name, parent ) +{ + enableLogLevelInput(); + getWrapperBase( Group::viewKeyStruct::logLevelString() ). + setDescription( "When higher than 1: Display store events details." ); + + registerWrapper( viewKeyStruct::solverNameString(), &m_solverName ). + setRTTypeName( rtTypes::CustomTypes::groupNameRef ). + setInputFlag( dataRepository::InputFlags::REQUIRED ). + setDescription( "Name of the flow solver, to get the permeabilities." ); + registerWrapper( viewKeyStruct::meshNameString(), &m_meshName ). + setRTTypeName( rtTypes::CustomTypes::groupNameRef ). + setInputFlag( dataRepository::InputFlags::REQUIRED ). + setDescription( "Name of the target " ); + + // registerWrapper( viewKeyStruct::connectionDataString(), &m_currentConnData ); + registerWrapper( viewKeyStruct::cellAGlobalIdString(), &m_cellAGlobalId ); + registerWrapper( viewKeyStruct::cellBGlobalIdString(), &m_cellBGlobalId ); + registerWrapper( viewKeyStruct::transmissibilityABString(), &m_transmissibilityAB ); + registerWrapper( viewKeyStruct::transmissibilityBAString(), &m_transmissibilityBA ); +} + +void StencilDataCollection::postInputInitialization() +{ + ProblemManager & problemManager = this->getGroupByPath< ProblemManager >( "/Problem" ); + + { // find targeted solver + PhysicsSolverManager & physicsSolverManager = problemManager.getPhysicsSolverManager(); + + m_solver = physicsSolverManager.getGroupPointer< FlowSolverBase >( m_solverName ); + GEOS_THROW_IF( m_solver == nullptr, + GEOS_FMT( "{}: Could not find flow solver named '{}'.", + getDataContext(), + m_solverName ), + InputError ); + } + + { // find mesh & discretization + DomainPartition & domain = problemManager.getDomainPartition(); + + MeshBody const & meshBody = domain.getMeshBody( m_meshName ); + m_meshLevel = &meshBody.getBaseDiscretization(); + + NumericalMethodsManager const & numericalMethodManager = domain.getNumericalMethodManager(); + FiniteVolumeManager const & fvManager = numericalMethodManager.getFiniteVolumeManager(); + try + { + string const discretizationName = m_solver->getDiscretizationName(); + m_discretization = &fvManager.getFluxApproximation( discretizationName ); + } catch( BadTypeError const & e ) + { + // only TPFA is supported for now + GEOS_ERROR( GEOS_FMT( "{}: target discretization is not supported by {} (for now, only '{}' is).", + getDataContext(), catalogName(), TwoPointFluxApproximation::catalogName() ) ); + } + } +} + +void StencilDataCollection::initializePostInitialConditionsPostSubGroups() +{ + // asserting that there is exactly one supported stencil + integer supportedStencilCount = 0; + m_discretization->forStencils< CellElementStencilTPFA >( *m_meshLevel, [&]( auto const & stencil ) + { + globalIndex connCount = stencil.size(); + m_cellAGlobalId.resize( connCount ); + m_cellBGlobalId.resize( connCount ); + m_transmissibilityAB.resize( connCount ); + m_transmissibilityBA.resize( connCount ); + GEOS_LOG_LEVEL_BY_RANK( 1, GEOS_FMT( "{}: initialized {} connection buffer for '{}'.", + getName(), connCount, m_discretization->getName() ) ); + ++supportedStencilCount; + } ); + GEOS_ERROR_IF( supportedStencilCount == 0, GEOS_FMT( "{}: No compatible discretization was found.", getDataContext() ) ); + GEOS_ERROR_IF( supportedStencilCount > 1, GEOS_FMT( "{}: Multiple discretization was found.", getDataContext() ) ); +} + + +bool StencilDataCollection::execute( real64 const GEOS_UNUSED_PARAM( time_n ), + real64 const GEOS_UNUSED_PARAM( dt ), + integer const GEOS_UNUSED_PARAM( cycleNumber ), + integer const GEOS_UNUSED_PARAM( eventCounter ), + real64 const GEOS_UNUSED_PARAM( eventProgress ), + DomainPartition & GEOS_UNUSED_PARAM( domain ) ) +{ + m_discretization->forStencils< CellElementStencilTPFA >( *m_meshLevel, [&]( auto const & stencil ) + { + // gather + auto const stencilWrapper = stencil.createKernelWrapper(); + array1d< KernelConnectionData > const kernelData = gatherConnectionData( stencilWrapper ); + // output + storeConnectionData( m_discretization->getName(), kernelData.toView() ); + } ); + + return false; +} + + +string showKernelDataExtract( arrayView1d< StencilDataCollection::KernelConnectionData > const & kernelData, + globalIndex maxLines = std::numeric_limits< globalIndex >::max() ); + +class StencilDataCollection::Kernel +{ +public: + template< typename VIEWTYPE > + using ElementViewConst = ElementRegionManager::ElementViewConst< VIEWTYPE >; + + using PermeabilityAccessors = StencilMaterialAccessors< PermeabilityBase, + fields::permeability::permeability >; + + + /** + * @brief launch a kernel to compute the element-element connection data using a given StencilWrapper. + * @tparam POLICY the Raja host / device launching policy + * @tparam STENCILWRAPPER_T + * @param connData The buffer where the connection data will be written + * @param stencilWrapper the StencilWrapper to use to compute the element-element connection data + * @param permeability the permeability data that will be used to compute the transmissibility + */ + template< typename POLICY, typename STENCILWRAPPER_T > + static void launch( arrayView1d< StencilDataCollection::KernelConnectionData > const & connData, + STENCILWRAPPER_T const & stencilWrapper, + ElementViewConst< arrayView3d< real64 const > > const & permeability ) + { + using IndexContainerType = typename STENCILWRAPPER_T::IndexContainerViewConstType; + IndexContainerType const & elemRegionIndices = stencilWrapper.getElementRegionIndices(); + IndexContainerType const & elemSubRegionIndices = stencilWrapper.getElementSubRegionIndices(); + IndexContainerType const & elementIndices = stencilWrapper.getElementIndices(); + + forAll< POLICY >( stencilWrapper.size(), [=] GEOS_HOST_DEVICE ( localIndex const iConn ) + { + real64 transmissibility[1][2]; + real64 dummy[1][2]; + + stencilWrapper.computeWeights( iConn, + permeability, + permeability, // we don't need derivatives + transmissibility, + dummy ); // we don't need derivatives + + for( localIndex i = 0; i < 2; ++i ) + { + connData[iConn].m_transmissibility[i] = transmissibility[0][i]; + connData[iConn].m_regionId[i] = elemRegionIndices( iConn, i ); + connData[iConn].m_subRegionId[i] = elemSubRegionIndices( iConn, i ); + connData[iConn].m_elementId[i] = elementIndices( iConn, i ); + } + } ); + connData.move( LvArray::MemorySpace::host ); + } + +private: + Kernel() = delete; +}; + +template< typename STENCILWRAPPER_T > +array1d< StencilDataCollection::KernelConnectionData > +StencilDataCollection::gatherConnectionData( STENCILWRAPPER_T const & stencilWrapper ) const +{ + ElementRegionManager const & elemManager = m_meshLevel->getElemManager(); + + // allocate a large enough buffer to store all connection data + array1d< KernelConnectionData > kernelData{ stencilWrapper.size() }; + typename Kernel::PermeabilityAccessors accessor( elemManager, m_solver->getName() ); + + Kernel::launch< parallelDevicePolicy<> >( kernelData.toView(), stencilWrapper, + accessor.get< fields::permeability::permeability >() ); + + return kernelData; +} + + +StencilDataCollection::ConnectionData +StencilDataCollection::ConnectionData::fromKernel( KernelConnectionData const & kernelData, + LocalToGlobalMap const & localToGlobalMap ) +{ + ConnectionData conn; + for( localIndex i = 0; i < 2; ++i ) + { + conn.m_transmissibility[i] = kernelData.m_transmissibility[i]; + conn.m_globalId[i] = localToGlobalMap[kernelData.m_regionId[i]][kernelData.m_subRegionId[i]][kernelData.m_elementId[i]]; + } + return conn; +} + + +string formatKernelDataExtract( arrayView1d< StencilDataCollection::KernelConnectionData > const & kernelData, + globalIndex maxLines ) +{ + TableData tableData; + auto kernelIterator = kernelData.begin(); + for( int iConn=0; iConn < maxLines && kernelIterator != kernelData.end(); ++iConn, ++kernelIterator ) + { + tableData.addRow( GEOS_FMT( "{} / {}", kernelIterator->m_regionId[0], kernelIterator->m_regionId[1] ), + GEOS_FMT( "{} / {}", kernelIterator->m_subRegionId[0], kernelIterator->m_subRegionId[1] ), + GEOS_FMT( "{} / {}", kernelIterator->m_elementId[0], kernelIterator->m_elementId[1] ), + kernelIterator->m_transmissibility[0], + kernelIterator->m_transmissibility[1] ); + } + TableLayout const tableLayout{ + { "regionId A/B", "subRegionId A/B", "elementId A/B", "transmissibilityAB", "transmissibilityBA" }, + GEOS_FMT( "Kernel data (real row count = {})", kernelData.size() ) + }; + TableTextFormatter const tableFormatter{ tableLayout }; + return tableFormatter.toString( tableData ); +} + +void StencilDataCollection::storeConnectionData( string_view stencilName, + arrayView1d< KernelConnectionData > const & kernelData ) +{ + std::set< ConnectionData > sortedData; + + { // data extraction + ElementRegionManager const & elemManager = m_meshLevel->getElemManager(); + string const & mapVKStr = ObjectManagerBase::viewKeyStruct::localToGlobalMapString(); + LocalToGlobalMap localToGlobalMap = elemManager.constructArrayViewAccessor< globalIndex, 1 >( mapVKStr ); + + std::transform( kernelData.begin(), kernelData.end(), + std::inserter( sortedData, sortedData.end() ), + [&]( auto const & kernelConn ) + { + return ConnectionData::fromKernel( kernelConn, localToGlobalMap ); + } ); + } + + { // data storing + GEOS_ERROR_IF_NE_MSG( size_t( m_cellAGlobalId.size() ), size_t( sortedData.size() ), + GEOS_FMT( "{}: Unexpected stencil size!\n{}", + getDataContext(), formatKernelDataExtract( kernelData, 8 ) ) ); + globalIndex i = 0; + for( ConnectionData const & conn : sortedData ) + { + m_cellAGlobalId[i] = conn.m_globalId[0]; + m_cellBGlobalId[i] = conn.m_globalId[1]; + m_transmissibilityAB[i] = conn.m_transmissibility[0]; + m_transmissibilityBA[i] = conn.m_transmissibility[1]; + ++i; + } + } + + logStoredConnections( stencilName ); +} + +void StencilDataCollection::logStoredConnections( string_view stencilName ) +{ + integer const connCount = MpiWrapper::sum( m_cellAGlobalId.size() ); + GEOS_LOG_LEVEL_RANK_0( 1, GEOS_FMT( "{}: {} connections stored for '{}'.", + getName(), connCount, stencilName ) ); +} + + +REGISTER_CATALOG_ENTRY( TaskBase, + StencilDataCollection, + string const &, dataRepository::Group * const ) + + +} /* namespace geos */ diff --git a/src/coreComponents/physicsSolvers/fluidFlow/StencilDataCollection.hpp b/src/coreComponents/physicsSolvers/fluidFlow/StencilDataCollection.hpp new file mode 100644 index 00000000000..c7685f8706c --- /dev/null +++ b/src/coreComponents/physicsSolvers/fluidFlow/StencilDataCollection.hpp @@ -0,0 +1,178 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 StencilDataCollection.hpp + */ + +#ifndef SRC_CORECOMPONENTS_PHYSICSSOLVERS_FLUIDFLOW_CELLTOCELLDATACOLLECTOR_HPP_ +#define SRC_CORECOMPONENTS_PHYSICSSOLVERS_FLUIDFLOW_CELLTOCELLDATACOLLECTOR_HPP_ + +#include "events/tasks/TaskBase.hpp" +#include "physicsSolvers/fluidFlow/FlowSolverBase.hpp" + +namespace geos +{ + +/** + * @class StencilDataCollection + * Task class allowing the ouput of communicating elements data. + * Only current usage is to output the cell-cell transmissibility (= "CellToCellDataCollection"), but we could add more + * implementations to output the transmissibility of boundary or surface connections (or everything that is managed + * by the stencils). + */ +class StencilDataCollection : public TaskBase +{ +public: + + /** + * @brief Constructor for the statistics class + * @param[in] name the name of the task coming from the xml + * @param[in] parent the parent group of the task + */ + StencilDataCollection( const string & name, + dataRepository::Group * const parent ); + + /// Accessor for the catalog name + static string catalogName() { return "CellToCellDataCollection"; } + + /** + * @defgroup Tasks Interface Functions + * + * This function implements the interface defined by the abstract TaskBase class + */ + /**@{*/ + + virtual bool execute( real64 const time_n, + real64 const dt, + integer const cycleNumber, + integer const eventCounter, + real64 const eventProgress, + DomainPartition & domain ) override; + + /**@}*/ + + struct viewKeyStruct + { + static constexpr char const * solverNameString() { return "flowSolverName"; } + static constexpr char const * meshNameString() { return "meshBody"; } + static constexpr char const * cellAGlobalIdString() { return "cellAGlobalId"; } + static constexpr char const * cellBGlobalIdString() { return "cellBGlobalId"; } + static constexpr char const * transmissibilityABString() { return "transmissibilityAB"; } + static constexpr char const * transmissibilityBAString() { return "transmissibilityBA"; } + }; + + class Kernel; + + /** + * @brief Element-element connection data extracted from the kernel. + */ + struct KernelConnectionData + { + real64 m_transmissibility[2]; + localIndex m_regionId[2]; + localIndex m_subRegionId[2]; + localIndex m_elementId[2]; + }; + +private: + + using Base = TaskBase; + using LocalToGlobalMap = ElementRegionManager::ElementViewAccessor< arrayView1d< globalIndex const > >; + + /** + * @brief Element-element connection data to be output by the class. + */ + struct ConnectionData + { + real64 m_transmissibility[2]; + globalIndex m_globalId[2]; + + + /** + * @return Construct a ConnectionData from the given kernel data. + * @param kernelData the kernel extracted data to be converted. + * @param localToGlobalMap the local to global id map, useful to convert the kernel extracted ids of the elements. + */ + static ConnectionData fromKernel( KernelConnectionData const & kernelData, + LocalToGlobalMap const & localToGlobalMap ); + + /** + * @brief minus operator to be able to sort instances before outputing them. + * The sorting is done by the first global id, then by the second global id. + * @param other compared instance + * @return true if this instance is to sort before the other instance. + */ + bool operator<( ConnectionData const & other ) const + { + return m_globalId[0] != other.m_globalId[0] ? + m_globalId[0] < other.m_globalId[0] : + m_globalId[1] < other.m_globalId[1]; + } + }; + + array1d< globalIndex > m_cellAGlobalId; + array1d< globalIndex > m_cellBGlobalId; + array1d< real64 > m_transmissibilityAB; + array1d< real64 > m_transmissibilityBA; + + /// Name of the target mesh body + string m_meshName; + /// Name of the target discretization + string m_solverName; + + /// Pointer to the target flow solver + FlowSolverBase const * m_solver = nullptr; + /// Pointer to the target mesh body + MeshLevel const * m_meshLevel = nullptr; + /// Pointer to the target discretization + FluxApproximationBase const * m_discretization = nullptr; + + + + void postInputInitialization() override; + + /** + * @brief Initialization of the internal buffers, must happen: + * - after FluxApproximationBase::computeCellStencil() + * - before TimeHistoryOutput::initializePostInitialConditionsPostSubGroups() + */ + void initializePostInitialConditionsPostSubGroups() override; + + /** + * @brief gather the element-element connection data of the current timestep using a given StencilWrapper. + * @tparam STENCILWRAPPER_T the type of the StencilWrapper + * @param mesh the mesh for which we want the data + * @param stencilWrapper the StencilWrapper to use to compute the element-element connection data + * @return Return the gathered data in an LvArray + */ + template< typename STENCILWRAPPER_T > + array1d< KernelConnectionData > gatherConnectionData( STENCILWRAPPER_T const & stencilWrapper ) const; + + /** + * @brief Output the element-element connection data of the current timestep. + * @param mesh the specific mesh for which we output the data. We will also need it to convert the ids to global ids. + * @param stencil the specific mesh for which we output the data. + * @param kernelData the connection data, gathered by a kernel. + */ + void storeConnectionData( string_view stencilName, + arrayView1d< KernelConnectionData > const & kernelData ); + + void logStoredConnections( string_view stencilName ); +}; + + +} /* namespace geos */ + +#endif /* SRC_CORECOMPONENTS_PHYSICSSOLVERS_FLUIDFLOW_CELLTOCELLDATACOLLECTOR_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/multiphysics/CoupledReservoirAndWellsBase.hpp b/src/coreComponents/physicsSolvers/multiphysics/CoupledReservoirAndWellsBase.hpp index 405c2d6421e..665d3bee319 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/CoupledReservoirAndWellsBase.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/CoupledReservoirAndWellsBase.hpp @@ -364,12 +364,12 @@ class CoupledReservoirAndWellsBase : public CoupledSolver< RESERVOIR_SOLVER, WEL forAll< serialPolicy >( perforationData.size(), [=] ( localIndex const iperf ) { GEOS_UNUSED_VAR( iperf ); // unused if geos_error_if is nulld - GEOS_LOG_RANK( GEOS_FMT( "Perforation at ({},{},{}); perforated element center: ({},{},{}); transmissibility: {} Pa.s.rm^3/s/Pa", + GEOS_LOG_RANK( GEOS_FMT( "Perforation at ({},{},{}); perforated element center: ({},{},{}); transmissibility: {} [{}]", perfLocation[iperf][0], perfLocation[iperf][1], perfLocation[iperf][2], elemCenter[resElemRegion[iperf]][resElemSubRegion[iperf]][resElemIndex[iperf]][0], elemCenter[resElemRegion[iperf]][resElemSubRegion[iperf]][resElemIndex[iperf]][1], elemCenter[resElemRegion[iperf]][resElemSubRegion[iperf]][resElemIndex[iperf]][2], - perfTrans[iperf] ) ); + perfTrans[iperf], getSymbol( units::Transmissibility ) ) ); } ); } } ); diff --git a/src/coreComponents/schema/docs/CellToCellDataCollection.rst b/src/coreComponents/schema/docs/CellToCellDataCollection.rst new file mode 100644 index 00000000000..90337122674 --- /dev/null +++ b/src/coreComponents/schema/docs/CellToCellDataCollection.rst @@ -0,0 +1,12 @@ + + +============== ============ ======== =================================================== +Name Type Default Description +============== ============ ======== =================================================== +flowSolverName groupNameRef required Name of the flow solver, to get the permeabilities. +logLevel integer 0 When higher than 1: Display store events details. +meshBody groupNameRef required Name of the target +name groupName required A name is required for any non-unique nodes +============== ============ ======== =================================================== + + diff --git a/src/coreComponents/schema/docs/CellToCellDataCollection_other.rst b/src/coreComponents/schema/docs/CellToCellDataCollection_other.rst new file mode 100644 index 00000000000..4b1a6106d81 --- /dev/null +++ b/src/coreComponents/schema/docs/CellToCellDataCollection_other.rst @@ -0,0 +1,12 @@ + + +================== ================= ========================== +Name Type Description +================== ================= ========================== +cellAGlobalId globalIndex_array (no description available) +cellBGlobalId globalIndex_array (no description available) +transmissibilityAB real64_array (no description available) +transmissibilityBA real64_array (no description available) +================== ================= ========================== + + diff --git a/src/coreComponents/schema/docs/Tasks.rst b/src/coreComponents/schema/docs/Tasks.rst index 7531175fa44..261764bbeaa 100644 --- a/src/coreComponents/schema/docs/Tasks.rst +++ b/src/coreComponents/schema/docs/Tasks.rst @@ -3,6 +3,7 @@ =========================================================== ==== ======= ====================================================================== Name Type Default Description =========================================================== ==== ======= ====================================================================== +CellToCellDataCollection node :ref:`XML_CellToCellDataCollection` CompositionalMultiphaseReservoirPoromechanicsInitialization node :ref:`XML_CompositionalMultiphaseReservoirPoromechanicsInitialization` CompositionalMultiphaseStatistics node :ref:`XML_CompositionalMultiphaseStatistics` HydrofractureInitialization node :ref:`XML_HydrofractureInitialization` diff --git a/src/coreComponents/schema/docs/Tasks_other.rst b/src/coreComponents/schema/docs/Tasks_other.rst index 7abafe4b3b2..bcde01875c0 100644 --- a/src/coreComponents/schema/docs/Tasks_other.rst +++ b/src/coreComponents/schema/docs/Tasks_other.rst @@ -3,6 +3,7 @@ =========================================================== ==== ================================================================================ Name Type Description =========================================================== ==== ================================================================================ +CellToCellDataCollection node :ref:`DATASTRUCTURE_CellToCellDataCollection` CompositionalMultiphaseReservoirPoromechanicsInitialization node :ref:`DATASTRUCTURE_CompositionalMultiphaseReservoirPoromechanicsInitialization` CompositionalMultiphaseStatistics node :ref:`DATASTRUCTURE_CompositionalMultiphaseStatistics` HydrofractureInitialization node :ref:`DATASTRUCTURE_HydrofractureInitialization` diff --git a/src/coreComponents/schema/schema.xsd b/src/coreComponents/schema/schema.xsd index 52e7878e80d..d02adab186c 100644 --- a/src/coreComponents/schema/schema.xsd +++ b/src/coreComponents/schema/schema.xsd @@ -471,6 +471,10 @@ + + + + @@ -3871,6 +3875,7 @@ Local- Add jump stabilization on interior of macro elements--> + @@ -3890,6 +3895,16 @@ Local- Add jump stabilization on interior of macro elements--> + + + + + + + + + + diff --git a/src/coreComponents/schema/schema.xsd.other b/src/coreComponents/schema/schema.xsd.other index 7c377e44c69..73552a29993 100644 --- a/src/coreComponents/schema/schema.xsd.other +++ b/src/coreComponents/schema/schema.xsd.other @@ -1325,6 +1325,7 @@ + @@ -1344,6 +1345,16 @@ + + + + + + + + + + diff --git a/src/coreComponents/unitTests/fluidFlowTests/CMakeLists.txt b/src/coreComponents/unitTests/fluidFlowTests/CMakeLists.txt index 3d91645c2e5..23399171ff5 100644 --- a/src/coreComponents/unitTests/fluidFlowTests/CMakeLists.txt +++ b/src/coreComponents/unitTests/fluidFlowTests/CMakeLists.txt @@ -3,7 +3,8 @@ set( gtest_geosx_tests testSinglePhaseBaseKernels.cpp testThermalCompMultiphaseFlow.cpp testThermalSinglePhaseFlow.cpp - testFlowStatistics.cpp ) + testFlowStatistics.cpp + testTransmissibility.cpp ) set( dependencyList ${parallelDeps} gtest ) diff --git a/src/coreComponents/unitTests/fluidFlowTests/testTransmissibility.cpp b/src/coreComponents/unitTests/fluidFlowTests/testTransmissibility.cpp new file mode 100644 index 00000000000..b35b824f62b --- /dev/null +++ b/src/coreComponents/unitTests/fluidFlowTests/testTransmissibility.cpp @@ -0,0 +1,332 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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. + * ------------------------------------------------------------------------------------------------------------ + */ + + +#include "mainInterface/initialization.hpp" +#include "mainInterface/GeosxState.hpp" +#include "codingUtilities/UnitTestUtilities.hpp" +#include "unitTests/fluidFlowTests/testSingleFlowUtils.hpp" +#include "physicsSolvers/fluidFlow/StencilDataCollection.hpp" +#include "mainInterface/ProblemManager.hpp" + + +using namespace geos; +using namespace geos::dataRepository; +using namespace geos::testing; + + +CommandLineOptions g_commandLineOptions; + + +/// Provide every common xml input for the transmissibility tests +constexpr string_view xmlInputCommon = + R"xml( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +)xml"; + +/// Provide the ending of the xml input for the transmissibility tests +static string_view constexpr xmlInputEnd = + R"xml( + +)xml"; + +/// Path of the StencilDataCollection in the hierarchy +static string_view constexpr stencilDataCollectionPath = "/Tasks/cellToCellDataCollection"; + + +/// a "stack" array to represent 3d floating point data (ie. coords) +using Float3 = std::array< real64, 3 >; +/// a "stack" array to represent 3d integer data (ie. cell count / axis) +using Int3 = std::array< integer, 3 >; + +/// Enumeration of the 3D axis to take into account for a structured mesh. +enum class Axis : integer { X = 0, Y = 1, Z = 2 }; + +/** + * @brief a map of the half transmissibilities, from the first to the second cell identified by the + * key global id. + */ +using TransmissibilityMap = std::map< std::pair< globalIndex, globalIndex >, real64 >; + +/** + * @brief the parameters for a given test instance. + */ +struct TestParams +{ + Int3 m_cellCount; + Float3 m_meshSize; + Float3 m_cellDistance; + + constexpr TestParams( Int3 cellCount, Float3 meshSize ): + m_cellCount( cellCount ), + m_meshSize( meshSize ), + m_cellDistance( { meshSize[0] / real64( cellCount[0] ), + meshSize[1] / real64( cellCount[1] ), + meshSize[2] / real64( cellCount[2] ) } ) + {} +}; + +static real64 constexpr g_transmissibilityTolerance = 1.0e-11; +static Float3 constexpr g_testPermeability = { 2.0e-16, 2.0e-16, 2.0e-16 }; +static real64 constexpr g_testNetToGross = 1.0; + + +void verifyStencilOutputStructured( string_view xmlInput, TestParams const & params ); + + +TEST( TransmissibilityTest, stencilOutputVerificationIso ) +{ + static string_view constexpr meshInput = + R"xml( + + + + +)xml"; + std::ostringstream xmlInput; + xmlInput << xmlInputCommon << meshInput << xmlInputEnd; + + static TestParams constexpr params { + { 3, 3, 3 }, // cellCount + { 30.0, 30.0, 30.0 }, // meshSize + }; + + verifyStencilOutputStructured( xmlInput.str(), params ); +} + +TEST( TransmissibilityTest, StencilOutputVerificationAniso ) +{ + static string_view constexpr meshInput = + R"xml( + + + + +)xml"; + std::ostringstream xmlInput; + xmlInput << xmlInputCommon << meshInput << xmlInputEnd; + + static TestParams constexpr params { + { 3, 4, 5 }, // cellCount + { 70.0, 10.0, 54.321 }, // meshSize + }; + + verifyStencilOutputStructured( xmlInput.str(), params ); +} + + + +/** + * @return The theorical half transmissiblity (from A to B or B to A) within a structured mesh. + * @param params The test parameters + * @param axis The axis in which we want to compute the transmissibility (structured mesh). + */ +real64 computeTransmissiblityStructured( TestParams const & params, Axis axis ) +{ + real64 const faceArea = axis == Axis::X ? params.m_cellDistance[1]*params.m_cellDistance[2]: + axis == Axis::Y ? params.m_cellDistance[0]*params.m_cellDistance[2]: + params.m_cellDistance[0]*params.m_cellDistance[1]; + real64 const halfDistance = 0.5 * params.m_cellDistance[integer( axis )]; + + real64 const transmissibility = g_testPermeability[integer( axis )] * g_testNetToGross * ( faceArea / halfDistance ); + // return half transmissibility + return g_testNetToGross * transmissibility * 0.5; +} + +/** + * @brief Verify the transmissibility data from the StencilDataCollection for each connection + * within a structured mesh. + * @param transmissibilities The transmissibility map + * @param axis The axis in which we want to verify the transmissibility (structured mesh). + * @param params The test parameters + */ +void verifyTransmissibilityDataStructured( TransmissibilityMap transmissibilities, Axis axis, + TestParams const & params ) +{ + integer const cellBIdOffset = axis == Axis::X ? 1: + axis == Axis::Y ? params.m_cellCount[0]: + params.m_cellCount[0]*params.m_cellCount[1]; + integer const endX = axis == Axis::X ? params.m_cellCount[0] - 1 : params.m_cellCount[0]; + integer const endY = axis == Axis::Y ? params.m_cellCount[1] - 1 : params.m_cellCount[1]; + integer const endZ = axis == Axis::Z ? params.m_cellCount[2] - 1 : params.m_cellCount[2]; + real64 const expectedAxisTransmissibility = computeTransmissiblityStructured( params, axis ); + + for( integer z = 0; z < endZ; ++z ) + { + for( integer y = 0; y < endY; ++y ) + { + for( integer x = 0; x < endX; ++x ) + { + integer const cellAId = x + params.m_cellCount[0] * (y + z * params.m_cellCount[1]); + integer const cellBId = cellAId + cellBIdOffset; + real64 const transmissibilityOutput = transmissibilities[std::make_pair( cellAId, cellBId )]; + real64 const transmissibilityTolerance = g_transmissibilityTolerance * std::abs( transmissibilityOutput ); + EXPECT_NEAR( transmissibilityOutput, expectedAxisTransmissibility, + transmissibilityTolerance )<< GEOS_FMT( "Transmissibility data from {} does not match with expectation.", + StencilDataCollection::catalogName() ); + } + } + } +} + +/** + * @brief Verify the source data consistency and return a transmissibility map for easy further data access. + * @param stencilData A StencilDataCollection object which contains the data gathered for the stencil. + * @param params The test parameters + * @return a TransmissibilityMap object containing the stencil data. + */ +TransmissibilityMap getTransmissibilityMap( StencilDataCollection const & stencilData, + TestParams const & params ) +{ + using VK = StencilDataCollection::viewKeyStruct; + auto const & cellAGlobalId = stencilData.getReference< array1d< globalIndex > >( VK::cellAGlobalIdString() ); + auto const & cellBGlobalId = stencilData.getReference< array1d< globalIndex > >( VK::cellBGlobalIdString() ); + auto const & transmissibilityAB = stencilData.getReference< array1d< real64 > >( VK::transmissibilityABString() ); + auto const & transmissibilityBA = stencilData.getReference< array1d< real64 > >( VK::transmissibilityBAString() ); + + // verify data size + integer const nx = params.m_cellCount[0]; + integer const ny = params.m_cellCount[1]; + integer const nz = params.m_cellCount[2]; + integer const arraySize = transmissibilityAB.size(); + EXPECT_EQ( arraySize, 3*nx*ny*nz - nx*ny - ny*nz - nx*nz ); + // verify that array size is always equal for all buffers + EXPECT_EQ( cellAGlobalId.size(), arraySize ); + EXPECT_EQ( cellBGlobalId.size(), arraySize ); + EXPECT_EQ( transmissibilityBA.size(), arraySize ); + + TransmissibilityMap transmissibilities; + for( int i = 0; i < arraySize; ++i ) + { + transmissibilities[std::make_pair( cellAGlobalId[i], cellBGlobalId[i] )] = transmissibilityAB[i]; + } + return transmissibilities; +} + + +/** + * @brief Launch a test to verify if: + * - data of the output of the stencil is consistent, + * - output transmissiblity values are conform to computed expectations. + * @param xmlInput The XML input to launch the test on. + * @param params The test parameters. + */ +void verifyStencilOutputStructured( string_view xmlInput, TestParams const & params ) +{ + GeosxState state( std::make_unique< CommandLineOptions >( g_commandLineOptions ) ); + ProblemManager & problem = state.getProblemManager(); + setupProblemFromXML( problem, xmlInput.data() ); + + EXPECT_FALSE( problem.runSimulation() ) << "Simulation exited early."; + + { // checking results + StencilDataCollection const & stencilData = + problem.getGroupByPath< StencilDataCollection >( string( stencilDataCollectionPath ) ); + TransmissibilityMap const transmissibilities = getTransmissibilityMap( stencilData, params ); + + // let's check each couple of cell in the x direction + verifyTransmissibilityDataStructured( transmissibilities, Axis::X, params ); + verifyTransmissibilityDataStructured( transmissibilities, Axis::Y, params ); + verifyTransmissibilityDataStructured( transmissibilities, Axis::Z, params ); + } +} + + + +int main( int argc, char * * argv ) +{ + ::testing::InitGoogleTest( &argc, argv ); + g_commandLineOptions = *geos::basicSetup( argc, argv ); + int const result = RUN_ALL_TESTS(); + geos::basicCleanup(); + return result; +} diff --git a/src/docs/sphinx/CompleteXMLSchema.rst b/src/docs/sphinx/CompleteXMLSchema.rst index db8541a9036..93fd92c0af4 100644 --- a/src/docs/sphinx/CompleteXMLSchema.rst +++ b/src/docs/sphinx/CompleteXMLSchema.rst @@ -150,6 +150,13 @@ Element: CellElementRegion .. include:: ../../coreComponents/schema/docs/CellElementRegion.rst +.. _XML_CellToCellDataCollection: + +Element: CellToCellDataCollection +================================= +.. include:: ../../coreComponents/schema/docs/CellToCellDataCollection.rst + + .. _XML_CeramicDamage: Element: CeramicDamage @@ -1610,6 +1617,13 @@ Datastructure: CellElementRegion .. include:: ../../coreComponents/schema/docs/CellElementRegion_other.rst +.. _DATASTRUCTURE_CellToCellDataCollection: + +Datastructure: CellToCellDataCollection +======================================= +.. include:: ../../coreComponents/schema/docs/CellToCellDataCollection_other.rst + + .. _DATASTRUCTURE_CeramicDamage: Datastructure: CeramicDamage From c9142836b596d3ce606e5b6df38baa837956f54c Mon Sep 17 00:00:00 2001 From: Randolph Settgast Date: Tue, 6 Aug 2024 18:01:29 -1000 Subject: [PATCH 08/42] fix: fix linking error on mac (#3270) * Move the definition of fromDuration from Units.cpp to Units.hpp --- src/coreComponents/common/Units.cpp | 19 ------------------- src/coreComponents/common/Units.hpp | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/coreComponents/common/Units.cpp b/src/coreComponents/common/Units.cpp index 7b2e21ca3cc..b5a53033c71 100644 --- a/src/coreComponents/common/Units.cpp +++ b/src/coreComponents/common/Units.cpp @@ -73,25 +73,6 @@ std::ostream & operator<<( std::ostream & os, TimeFormatInfo const & info ) return os; } - -template< typename DURATION > -TimeFormatInfo TimeFormatInfo::fromDuration( DURATION const value ) -{ - using namespace std::chrono; - - auto const totalYears = duration_cast< units::Years >( value ); - auto const daysOut = duration_cast< units::Days >( value - totalYears ); - auto const hoursOut = duration_cast< hours >( value - totalYears - daysOut ); - auto const minutesOut = duration_cast< minutes >( value - totalYears - daysOut - hoursOut ); - auto const secondsOut = duration_cast< seconds >( value - totalYears - daysOut - hoursOut - minutesOut ); - - return TimeFormatInfo( duration< double >( value ).count(), int( totalYears.count() ), - int( daysOut.count() ), int( hoursOut.count() ), - int( minutesOut.count() ), int( secondsOut.count() ) ); -} -// available specializations -template TimeFormatInfo TimeFormatInfo::fromDuration< SystemClock::duration >( SystemClock::duration duration ); - TimeFormatInfo TimeFormatInfo::fromSeconds( double const seconds ) { double remainingSeconds = seconds < 0.0 ? -seconds : seconds; diff --git a/src/coreComponents/common/Units.hpp b/src/coreComponents/common/Units.hpp index 9b28532f0eb..26b19eef555 100644 --- a/src/coreComponents/common/Units.hpp +++ b/src/coreComponents/common/Units.hpp @@ -270,6 +270,21 @@ struct TimeFormatInfo string toSecondsString() const; }; +template< typename DURATION > +TimeFormatInfo TimeFormatInfo::fromDuration( DURATION const value ) +{ + using namespace std::chrono; + + auto const totalYears = duration_cast< units::Years >( value ); + auto const daysOut = duration_cast< units::Days >( value - totalYears ); + auto const hoursOut = duration_cast< hours >( value - totalYears - daysOut ); + auto const minutesOut = duration_cast< minutes >( value - totalYears - daysOut - hoursOut ); + auto const secondsOut = duration_cast< seconds >( value - totalYears - daysOut - hoursOut - minutesOut ); + + return TimeFormatInfo( duration< double >( value ).count(), int( totalYears.count() ), + int( daysOut.count() ), int( hoursOut.count() ), + int( minutesOut.count() ), int( secondsOut.count() ) ); +} } // end namespace units From 7cce9a0f64c8ae893a50bcf3dce7d5d9e39c389a Mon Sep 17 00:00:00 2001 From: Matteo Cusini <49037133+CusiniM@users.noreply.github.com> Date: Wed, 7 Aug 2024 12:58:36 -0400 Subject: [PATCH 09/42] refactor: separate friction and hydraulic aperture - stress relation. (#3197) --- .integrated_tests.yaml | 2 +- BASELINE_NOTES.md | 4 + .../modifyBoundaryCondition/pkn_example.xml | 15 +- host-configs/apple/macOS_customized.cmake | 7 - .../ALM_stickFault_base.xml | 7 +- ...bFrac_Compression_CoulombFriction_base.xml | 18 +- .../EmbFrac_Compression_Frictionless_base.xml | 16 +- .../SneddonRotated_benchmark.xml | 3 +- .../SneddonRotated_benchmark2.xml | 3 +- .../SneddonRotated_smoke.xml | 3 +- .../Sneddon_embeddedFracShapes_base.xml | 16 +- .../Sneddon_embeddedFrac_base.xml | 13 +- .../Sneddon_embeddedFrac_benchmark.xml | 3 +- .../Sneddon_embeddedFrac_smoke.xml | 3 +- ...eddedFrac_staticCondensation_benchmark.xml | 3 +- ..._embeddedFrac_staticCondensation_smoke.xml | 3 +- .../Sneddon_embeddedFrac_verification.xml | 3 +- .../Sneddon_hydroFrac_base.xml | 14 +- .../heterogeneousInSitu_base.xml | 14 +- .../heterogeneousInSitu_smoke.xml | 14 +- .../hydrofractureSinglePhase2d.xml | 16 +- .../hydraulicFracturing/kgdBase_C3D6_base.xml | 9 +- .../kgdEdgeBased_C3D6_base.xml | 6 +- .../kgdNodeBased_C3D6_base.xml | 6 +- .../kgdToughnessDominated_base.xml | 14 +- ...kgdToughnessDominated_poroelastic_base.xml | 14 +- .../kgdValidation_base.xml | 14 +- .../kgdViscosityDominated_base.xml | 14 +- ...kgdViscosityDominated_poroelastic_base.xml | 14 +- .../pennyShapedToughnessDominated_base.xml | 11 +- ...ennyShapedToughnessDominated_benchmark.xml | 4 +- ...pedToughnessDominated_poroelastic_base.xml | 13 +- ...ughnessDominated_poroelastic_benchmark.xml | 4 +- ...edToughnessDominated_poroelastic_smoke.xml | 4 +- .../pennyShapedToughnessDominated_smoke.xml | 1 - .../pennyShapedViscosityDominated_base.xml | 10 +- ...ennyShapedViscosityDominated_benchmark.xml | 4 +- ...pedViscosityDominated_poroelastic_base.xml | 10 +- ...scosityDominated_poroelastic_benchmark.xml | 4 +- ...edViscosityDominated_poroelastic_smoke.xml | 4 +- .../pennyShapedViscosityDominated_smoke.xml | 4 +- .../pknViscosityDominated_base.xml | 11 +- .../pknViscosityDominated_benchmark.xml | 4 +- ...pknViscosityDominated_poroelastic_base.xml | 10 +- ...scosityDominated_poroelastic_benchmark.xml | 4 +- ...knViscosityDominated_poroelastic_smoke.xml | 4 +- .../pknViscosityDominated_smoke.xml | 4 +- .../walshQuarterNoChombo_base.xml | 10 +- .../walshQuarterNoChombo_benchmark.xml | 1 - .../walshQuarterNoChombo_smoke.xml | 1 - .../ContactMechanics_PEBICrack_base.xml | 2 +- .../ContactMechanics_PassingCrack_base.xml | 14 +- .../ContactMechanics_SimpleCubes_base.xml | 13 +- ...ctMechanics_SingleFracCompression_base.xml | 17 +- .../ContactMechanics_TFrac_base.xml | 14 +- ...ontactMechanics_UnstructuredCrack_base.xml | 16 +- .../ContactMechanics_slippingFault_base.xml | 14 +- .../Sneddon_contactMechanics_base.xml | 16 +- ...ayPermeability_conformingFracture_base.xml | 9 +- ...ExponentialDecayPermeability_edfm_base.xml | 16 +- ...c_conformingFracture_2d_faultSlip_base.xml | 9 +- ...conformingFracture_2d_openingFrac_base.xml | 11 +- .../PoroElastic_dfm_PEBICrack_base.xml | 11 +- .../PoroElastic_efem-edfm_base.xml | 15 +- .../PoroElastic_efem-edfm_eggModel_large.xml | 13 +- .../PoroElastic_efem-edfm_eggModel_small.xml | 13 +- .../PoroElastic_efem-edfm_pennyCrack_base.xml | 10 +- ...Elastic_efem-edfm_pennyCrack_benchmark.xml | 3 +- ...PoroElastic_efem-edfm_pennyCrack_smoke.xml | 3 +- ...lastic_efem-edfm_pressurizedFrac_smoke.xml | 13 +- .../SlipPermeability_embeddedFrac.xml | 13 +- .../SlipPermeability_pEDFM_base.xml | 16 +- ...lisRichardsPermeability_efem-edfm_base.xml | 13 +- ...nglePhasePoromechanics_FaultModel_base.xml | 9 +- .../ThermoPoroElastic_base.xml | 8 +- .../ThermoPoroElastic_conforming_base.xml | 2 +- .../ThermoPoroElastic_efem-edfm_base.xml | 5 +- ...moPoroElastic_efem-edfm_eggModel_small.xml | 11 +- ...asticWellbore_ImperfectInterfaces_base.xml | 8 +- ...asticWellbore_ImperfectInterfaces_base.xml | 12 +- .../constitutive/CMakeLists.txt | 17 +- .../constitutive/contact/BartonBandis.cpp | 50 +++ .../constitutive/contact/BartonBandis.hpp | 143 ++++++++ .../constitutive/contact/ContactBase.hpp | 269 -------------- .../constitutive/contact/CoulombContact.hpp | 328 ------------------ ...CoulombContact.cpp => CoulombFriction.cpp} | 38 +- .../constitutive/contact/CoulombFriction.hpp | 309 +++++++++++++++++ .../constitutive/contact/FrictionBase.cpp | 51 +++ .../constitutive/contact/FrictionBase.hpp | 167 +++++++++ ...ntactSelector.hpp => FrictionSelector.hpp} | 18 +- .../contact/FrictionlessContact.cpp | 13 +- .../contact/FrictionlessContact.hpp | 45 +-- .../contact/HydraulicApertureBase.cpp | 48 +++ .../contact/HydraulicApertureBase.hpp | 73 ++++ .../HydraulicApertureRelationSelector.hpp | 52 +++ ...actBase.cpp => HydraulicApertureTable.cpp} | 47 +-- .../contact/HydraulicApertureTable.hpp | 170 +++++++++ .../deprecated/ApertureTableContact.cpp | 132 ------- .../deprecated/ApertureTableContact.hpp | 178 ---------- src/coreComponents/fileIO/silo/SiloFile.cpp | 4 +- .../contact/ContactSolverBase.cpp | 18 +- .../contact/ContactSolverBase.hpp | 3 + .../contact/SolidMechanicsEFEMKernels.hpp | 33 +- .../SolidMechanicsEmbeddedFractures.cpp | 31 +- .../SolidMechanicsEmbeddedFractures.hpp | 5 + .../contact/SolidMechanicsLagrangeContact.cpp | 30 +- .../contact/SolidMechanicsPenaltyContact.cpp | 235 +++++++++++++ .../contact/SolidMechanicsPenaltyContact.hpp | 92 +++++ .../fluidFlow/FlowSolverBase.cpp | 1 + .../multiphysics/HydrofractureSolver.cpp | 35 +- .../multiphysics/HydrofractureSolver.hpp | 4 +- .../HydrofractureSolverKernels.hpp | 33 +- .../multiphysics/PoromechanicsSolver.hpp | 22 ++ ...ePhasePoromechanicsConformingFractures.cpp | 15 +- ...ePhasePoromechanicsConformingFractures.hpp | 3 + ...glePhasePoromechanicsEmbeddedFractures.cpp | 45 +-- .../SinglePhasePoromechanicsEFEM.hpp | 17 +- .../SinglePhasePoromechanicsFractures.hpp | 18 +- .../SolidMechanicsLagrangianFEM.cpp | 10 +- .../SolidMechanicsLagrangianFEM.hpp | 5 + .../solidMechanics/SolidMechanicsMPM.cpp | 2 +- .../solidMechanics/kernels/ExplicitMPM.hpp | 2 +- .../schema/docs/Constitutive.rst | 1 + .../schema/docs/Constitutive_other.rst | 1 + src/coreComponents/schema/docs/Coulomb.rst | 21 +- .../schema/docs/FrictionlessContact.rst | 16 +- .../schema/docs/Hydrofracture.rst | 1 - ...lidMechanicsAugmentedLagrangianContact.rst | 1 + .../docs/SolidMechanicsEmbeddedFractures.rst | 1 + .../docs/SolidMechanicsLagrangeContact.rst | 1 + .../docs/SolidMechanicsLagrangianSSLE.rst | 1 + .../docs/SolidMechanics_LagrangianFEM.rst | 1 + src/coreComponents/schema/schema.xsd | 37 +- src/coreComponents/schema/schema.xsd.other | 2 + src/docs/sphinx/CompleteXMLSchema.rst | 14 + .../KeyComponents/AddingNewSolver.rst | 14 +- 136 files changed, 2088 insertions(+), 1557 deletions(-) delete mode 100644 host-configs/apple/macOS_customized.cmake create mode 100644 src/coreComponents/constitutive/contact/BartonBandis.cpp create mode 100644 src/coreComponents/constitutive/contact/BartonBandis.hpp delete mode 100644 src/coreComponents/constitutive/contact/ContactBase.hpp delete mode 100644 src/coreComponents/constitutive/contact/CoulombContact.hpp rename src/coreComponents/constitutive/contact/{CoulombContact.cpp => CoulombFriction.cpp} (59%) create mode 100644 src/coreComponents/constitutive/contact/CoulombFriction.hpp create mode 100644 src/coreComponents/constitutive/contact/FrictionBase.cpp create mode 100644 src/coreComponents/constitutive/contact/FrictionBase.hpp rename src/coreComponents/constitutive/contact/{ContactSelector.hpp => FrictionSelector.hpp} (68%) create mode 100644 src/coreComponents/constitutive/contact/HydraulicApertureBase.cpp create mode 100644 src/coreComponents/constitutive/contact/HydraulicApertureBase.hpp create mode 100644 src/coreComponents/constitutive/contact/HydraulicApertureRelationSelector.hpp rename src/coreComponents/constitutive/contact/{ContactBase.cpp => HydraulicApertureTable.cpp} (78%) create mode 100644 src/coreComponents/constitutive/contact/HydraulicApertureTable.hpp delete mode 100644 src/coreComponents/constitutive/contact/deprecated/ApertureTableContact.cpp delete mode 100644 src/coreComponents/constitutive/contact/deprecated/ApertureTableContact.hpp create mode 100644 src/coreComponents/physicsSolvers/contact/SolidMechanicsPenaltyContact.cpp create mode 100644 src/coreComponents/physicsSolvers/contact/SolidMechanicsPenaltyContact.hpp diff --git a/.integrated_tests.yaml b/.integrated_tests.yaml index 440853cc61d..14a5dd73076 100644 --- a/.integrated_tests.yaml +++ b/.integrated_tests.yaml @@ -1,6 +1,6 @@ baselines: bucket: geosx - baseline: integratedTests/baseline_integratedTests-pr3202-6636-2821c93 + baseline: integratedTests/baseline_integratedTests-pr3197-6679-a003f43 allow_fail: all: '' diff --git a/BASELINE_NOTES.md b/BASELINE_NOTES.md index dd686fc7877..be5e9d7d934 100644 --- a/BASELINE_NOTES.md +++ b/BASELINE_NOTES.md @@ -6,6 +6,10 @@ This file is designed to track changes to the integrated test baselines. Any developer who updates the baseline ID in the .integrated_tests.yaml file is expected to create an entry in this file with the pull request number, date, and their justification for rebaselining. These notes should be in reverse-chronological order, and use the following time format: (YYYY-MM-DD). +PR 3197 (2024-08-07) +==================== +Separation of contact and friction laws. + PR #3202 (2024-08-03) ====================== Acoustic VTI tests needed rebaselining after update in source and receiver location algorithm. diff --git a/examples/pygeosxExamples/modifyBoundaryCondition/pkn_example.xml b/examples/pygeosxExamples/modifyBoundaryCondition/pkn_example.xml index 18702b7b27f..57f6d330ce2 100644 --- a/examples/pygeosxExamples/modifyBoundaryCondition/pkn_example.xml +++ b/examples/pygeosxExamples/modifyBoundaryCondition/pkn_example.xml @@ -22,7 +22,6 @@ name="hydrofracture" solidSolverName="lagsolve" logLevel="1" - contactRelationName="fractureContact" flowSolverName="SinglePhaseFlow" surfaceGeneratorName="SurfaceGen" targetRegions="{ Domain, Fracture }"> @@ -39,8 +38,8 @@ timeIntegrationOption="QuasiStatic" discretization="FE1" name="lagsolve" - contactRelationName="fractureContact" - targetRegions="{ Domain, Fracture }"> + targetRegions="{ Domain, Fracture }" + contactPenaltyStiffness="1.0e0"> + materialList="{ water, rock, fractureFilling, fracturePorosity, fracturePerm, nullSolid, hApertureTable }"/> @@ -112,9 +111,11 @@ compressibility="0.0"/> + name="fractureContact"/> + + diff --git a/host-configs/apple/macOS_customized.cmake b/host-configs/apple/macOS_customized.cmake deleted file mode 100644 index c1707a0b945..00000000000 --- a/host-configs/apple/macOS_customized.cmake +++ /dev/null @@ -1,7 +0,0 @@ -set( HOMEBREW_DIR $ENV{HOMEBREW_DIR} ) -set( CONFIG_NAME $ENV{GEOS_CONFIG_NAME} ) - -set(Python3_ROOT_DIR $ENV{GEOS_PYTHON_DIR} CACHE PATH "") -set(Python3_EXECUTABLE ${Python3_ROOT_DIR}/bin/python3 CACHE PATH "") - -include(${CMAKE_CURRENT_LIST_DIR}/macOS_base.cmake) diff --git a/inputFiles/almContactMechanics/ALM_stickFault_base.xml b/inputFiles/almContactMechanics/ALM_stickFault_base.xml index 444c2cee4c7..7a8c79aa7d8 100644 --- a/inputFiles/almContactMechanics/ALM_stickFault_base.xml +++ b/inputFiles/almContactMechanics/ALM_stickFault_base.xml @@ -92,8 +92,11 @@ + frictionCoefficient="0.1"/> + + diff --git a/inputFiles/efemFractureMechanics/EmbFrac_Compression_CoulombFriction_base.xml b/inputFiles/efemFractureMechanics/EmbFrac_Compression_CoulombFriction_base.xml index b6e12ad2dd5..2e2568a0250 100644 --- a/inputFiles/efemFractureMechanics/EmbFrac_Compression_CoulombFriction_base.xml +++ b/inputFiles/efemFractureMechanics/EmbFrac_Compression_CoulombFriction_base.xml @@ -9,7 +9,8 @@ initialDt="10" discretization="FE1" timeIntegrationOption="QuasiStatic" - logLevel="1"> + logLevel="1" + contactPenaltyStiffness="1.0e12"> @@ -60,12 +61,10 @@ defaultShearModulus="1.0e10"/> + frictionCoefficient = "0.8"/> @@ -116,13 +115,6 @@ scale="0.0" setNames="{ zneg, zpos }"/> - - - - + logLevel="1" + contactPenaltyStiffness="1.0e8"> @@ -60,18 +61,9 @@ defaultShearModulus="1.0e10"/> + name="frictionLaw"/> - - - - + useStaticCondensation="1" + contactPenaltyStiffness="0.0e8"> + useStaticCondensation="1" + contactPenaltyStiffness="0.0e8"> + useStaticCondensation="1" + contactPenaltyStiffness="0.0e8"> + logLevel="1" + contactPenaltyStiffness="0.0e8"> @@ -85,19 +86,10 @@ defaultShearModulus="1.0e10"/> + name="frictionLaw"/> - - - - @@ -35,19 +35,10 @@ defaultShearModulus="1.0e10"/> + name="frictionLaw"/> - - - - + logLevel="1" + contactPenaltyStiffness="0.0e8"> + logLevel="1" + contactPenaltyStiffness="0.0e8"> + useStaticCondensation="1" + contactPenaltyStiffness="0.0e8"> + useStaticCondensation="1" + contactPenaltyStiffness="0.0e8"> + logLevel="1" + contactPenaltyStiffness="0.0e8"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"/> + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -126,9 +126,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/heterogeneousInSitu_base.xml b/inputFiles/hydraulicFracturing/heterogeneousInSitu_base.xml index bbf01a6a976..8c55433af13 100644 --- a/inputFiles/hydraulicFracturing/heterogeneousInSitu_base.xml +++ b/inputFiles/hydraulicFracturing/heterogeneousInSitu_base.xml @@ -11,7 +11,6 @@ surfaceGeneratorName="SurfaceGen" logLevel="1" targetRegions="{ Fracture }" - contactRelationName="fractureContact" maxNumResolves="2"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1e12"> + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -157,9 +157,11 @@ compressibility="0.0"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/heterogeneousInSitu_smoke.xml b/inputFiles/hydraulicFracturing/heterogeneousInSitu_smoke.xml index b75048cd2c2..10a8b07477f 100644 --- a/inputFiles/hydraulicFracturing/heterogeneousInSitu_smoke.xml +++ b/inputFiles/hydraulicFracturing/heterogeneousInSitu_smoke.xml @@ -44,7 +44,6 @@ surfaceGeneratorName="SurfaceGen" logLevel="1" targetRegions="{ Fracture }" - contactRelationName="fractureContact" maxNumResolves="2"> + contactRelationName="fractureContact" + contactPenaltyStiffness="0.0e12"> + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -167,9 +167,11 @@ compressibility="0.0"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/hydrofractureSinglePhase2d.xml b/inputFiles/hydraulicFracturing/hydrofractureSinglePhase2d.xml index 5d1e865b642..40cb8c20c2c 100644 --- a/inputFiles/hydraulicFracturing/hydrofractureSinglePhase2d.xml +++ b/inputFiles/hydraulicFracturing/hydrofractureSinglePhase2d.xml @@ -9,8 +9,7 @@ solidSolverName="lagsolve" flowSolverName="SinglePhaseFlow" surfaceGeneratorName="SurfaceGen" - targetRegions="{ Fracture }" - contactRelationName="fractureContact"> + targetRegions="{ Fracture }"> + contactRelationName="fractureContact" + contactPenaltyStiffness="0.0e12"/> @@ -160,9 +160,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/kgdBase_C3D6_base.xml b/inputFiles/hydraulicFracturing/kgdBase_C3D6_base.xml index 19f102b76c5..3efb892cf10 100644 --- a/inputFiles/hydraulicFracturing/kgdBase_C3D6_base.xml +++ b/inputFiles/hydraulicFracturing/kgdBase_C3D6_base.xml @@ -24,7 +24,7 @@ + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -62,10 +62,11 @@ name="fracturePerm"/> + name="fractureContact"/> + diff --git a/inputFiles/hydraulicFracturing/kgdEdgeBased_C3D6_base.xml b/inputFiles/hydraulicFracturing/kgdEdgeBased_C3D6_base.xml index 298684e5927..c775276de50 100644 --- a/inputFiles/hydraulicFracturing/kgdEdgeBased_C3D6_base.xml +++ b/inputFiles/hydraulicFracturing/kgdEdgeBased_C3D6_base.xml @@ -13,8 +13,7 @@ solidSolverName="lagsolve" flowSolverName="SinglePhaseFlow" surfaceGeneratorName="SurfaceGen" - targetRegions="{ Fracture }" - contactRelationName="fractureContact"> + targetRegions="{ Fracture }"> + contactRelationName="fractureContact" + contactPenaltyStiffness="0.0e8"> + targetRegions="{ Fracture }"> + contactRelationName="fractureContact" + contactPenaltyStiffness="0.0e8"/> @@ -30,7 +29,8 @@ timeIntegrationOption="QuasiStatic" discretization="FE1" targetRegions="{ Domain, Fracture }" - contactRelationName="fractureContact"/> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0"/> @@ -72,7 +72,7 @@ + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -114,9 +114,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/kgdToughnessDominated_poroelastic_base.xml b/inputFiles/hydraulicFracturing/kgdToughnessDominated_poroelastic_base.xml index 2aba63788b4..9624bd12259 100644 --- a/inputFiles/hydraulicFracturing/kgdToughnessDominated_poroelastic_base.xml +++ b/inputFiles/hydraulicFracturing/kgdToughnessDominated_poroelastic_base.xml @@ -11,7 +11,6 @@ logLevel="1" targetRegions="{ Domain, Fracture }" isMatrixPoroelastic="1" - contactRelationName="fractureContact" maxNumResolves="2"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0"/> + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -117,9 +117,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/kgdValidation_base.xml b/inputFiles/hydraulicFracturing/kgdValidation_base.xml index 59c48a60734..1cb74613cac 100644 --- a/inputFiles/hydraulicFracturing/kgdValidation_base.xml +++ b/inputFiles/hydraulicFracturing/kgdValidation_base.xml @@ -11,7 +11,6 @@ surfaceGeneratorName="SurfaceGen" logLevel="1" targetRegions="{ Fracture }" - contactRelationName="fractureContact" maxNumResolves="2"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0"/> @@ -75,7 +75,7 @@ + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -115,9 +115,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/kgdViscosityDominated_base.xml b/inputFiles/hydraulicFracturing/kgdViscosityDominated_base.xml index 28cb49e72b3..8bc09cdc194 100644 --- a/inputFiles/hydraulicFracturing/kgdViscosityDominated_base.xml +++ b/inputFiles/hydraulicFracturing/kgdViscosityDominated_base.xml @@ -12,7 +12,6 @@ logLevel="1" initialDt="0.1" targetRegions="{ Fracture }" - contactRelationName="fractureContact" maxNumResolves="2"> @@ -30,7 +29,8 @@ timeIntegrationOption="QuasiStatic" discretization="FE1" targetRegions="{ Domain, Fracture }" - contactRelationName="fractureContact"/> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"/> @@ -73,7 +73,7 @@ + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -115,9 +115,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/kgdViscosityDominated_poroelastic_base.xml b/inputFiles/hydraulicFracturing/kgdViscosityDominated_poroelastic_base.xml index 8161813edac..c369c1c522f 100644 --- a/inputFiles/hydraulicFracturing/kgdViscosityDominated_poroelastic_base.xml +++ b/inputFiles/hydraulicFracturing/kgdViscosityDominated_poroelastic_base.xml @@ -11,7 +11,6 @@ logLevel="1" targetRegions="{ Domain, Fracture }" isMatrixPoroelastic="1" - contactRelationName="fractureContact" maxNumResolves="2"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"/> + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -118,9 +118,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_base.xml b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_base.xml index bf1560af82a..726c70762b7 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_base.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_base.xml @@ -11,7 +11,7 @@ + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -51,9 +51,12 @@ name="fracturePerm"/> + name="fractureContact"/> + + + diff --git a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_benchmark.xml b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_benchmark.xml index be67d03b8e2..59abb35871a 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_benchmark.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_benchmark.xml @@ -16,7 +16,6 @@ surfaceGeneratorName="SurfaceGen" logLevel="1" targetRegions="{ Fracture }" - contactRelationName="fractureContact" maxNumResolves="5" initialDt="0.1"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"> + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -66,9 +66,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + @@ -82,8 +84,7 @@ + name="singlePhaseTPFA"/> diff --git a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_poroelastic_benchmark.xml b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_poroelastic_benchmark.xml index dff5dd1605c..e830a52c5fd 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_poroelastic_benchmark.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_poroelastic_benchmark.xml @@ -17,7 +17,6 @@ logLevel="1" targetRegions="{ Domain, Fracture }" isMatrixPoroelastic="1" - contactRelationName="fractureContact" maxNumResolves="5" initialDt="0.1"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"> + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -51,9 +51,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_benchmark.xml b/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_benchmark.xml index 06b52ff40af..a8f78adf606 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_benchmark.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_benchmark.xml @@ -16,7 +16,6 @@ surfaceGeneratorName="SurfaceGen" logLevel="1" targetRegions="{ Fracture }" - contactRelationName="fractureContact" maxNumResolves="1" initialDt="0.1"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"> + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -66,9 +66,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_poroelastic_benchmark.xml b/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_poroelastic_benchmark.xml index cf731e4fe59..0d1b9485772 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_poroelastic_benchmark.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_poroelastic_benchmark.xml @@ -17,7 +17,6 @@ logLevel="1" targetRegions="{ Domain, Fracture }" isMatrixPoroelastic="1" - contactRelationName="fractureContact" maxNumResolves="1" initialDt="0.1"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"> + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -51,9 +51,12 @@ name="fracturePerm"/> + name="fractureContact"/> + + + diff --git a/inputFiles/hydraulicFracturing/pknViscosityDominated_benchmark.xml b/inputFiles/hydraulicFracturing/pknViscosityDominated_benchmark.xml index 9b4d96a8d12..2b8dce7a719 100644 --- a/inputFiles/hydraulicFracturing/pknViscosityDominated_benchmark.xml +++ b/inputFiles/hydraulicFracturing/pknViscosityDominated_benchmark.xml @@ -16,7 +16,6 @@ surfaceGeneratorName="SurfaceGen" logLevel="1" targetRegions="{ Fracture }" - contactRelationName="fractureContact" maxNumResolves="5" initialDt="0.1"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"> + materialList="{ water, fractureFilling, fractureContact, hApertureModel }"/> @@ -66,9 +66,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/pknViscosityDominated_poroelastic_benchmark.xml b/inputFiles/hydraulicFracturing/pknViscosityDominated_poroelastic_benchmark.xml index 4dde5d644d2..72b1be2f4d8 100644 --- a/inputFiles/hydraulicFracturing/pknViscosityDominated_poroelastic_benchmark.xml +++ b/inputFiles/hydraulicFracturing/pknViscosityDominated_poroelastic_benchmark.xml @@ -17,7 +17,6 @@ logLevel="1" targetRegions="{ Domain, Fracture }" isMatrixPoroelastic="1" - contactRelationName="fractureContact" maxNumResolves="5" initialDt="0.1"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"> + contactRelationName="fractureContact" + contactPenaltyStiffness="1.0e0"> + materialList="{water, rock, fractureFilling, fractureContact, hApertureModel}"/> @@ -74,9 +74,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/hydraulicFracturing/walshQuarterNoChombo_benchmark.xml b/inputFiles/hydraulicFracturing/walshQuarterNoChombo_benchmark.xml index 0a715d4089a..957b63bd278 100644 --- a/inputFiles/hydraulicFracturing/walshQuarterNoChombo_benchmark.xml +++ b/inputFiles/hydraulicFracturing/walshQuarterNoChombo_benchmark.xml @@ -28,7 +28,6 @@ surfaceGeneratorName="SurfaceGen" logLevel="1" targetRegions="{Fracture}" - contactRelationName="fractureContact" maxNumResolves="5" initialDt="0.1"> diff --git a/inputFiles/hydraulicFracturing/walshQuarterNoChombo_smoke.xml b/inputFiles/hydraulicFracturing/walshQuarterNoChombo_smoke.xml index 3d0d8a5c3e8..9990dd5c291 100644 --- a/inputFiles/hydraulicFracturing/walshQuarterNoChombo_smoke.xml +++ b/inputFiles/hydraulicFracturing/walshQuarterNoChombo_smoke.xml @@ -29,7 +29,6 @@ surfaceGeneratorName="SurfaceGen" logLevel="1" targetRegions="{Fracture}" - contactRelationName="fractureContact" maxNumResolves="5" initialDt="0.1"> diff --git a/inputFiles/lagrangianContactMechanics/ContactMechanics_PEBICrack_base.xml b/inputFiles/lagrangianContactMechanics/ContactMechanics_PEBICrack_base.xml index c08000ed8c1..09667b5e88f 100644 --- a/inputFiles/lagrangianContactMechanics/ContactMechanics_PEBICrack_base.xml +++ b/inputFiles/lagrangianContactMechanics/ContactMechanics_PEBICrack_base.xml @@ -26,7 +26,7 @@ - + diff --git a/inputFiles/lagrangianContactMechanics/ContactMechanics_PassingCrack_base.xml b/inputFiles/lagrangianContactMechanics/ContactMechanics_PassingCrack_base.xml index 58afadaed04..c309080025d 100644 --- a/inputFiles/lagrangianContactMechanics/ContactMechanics_PassingCrack_base.xml +++ b/inputFiles/lagrangianContactMechanics/ContactMechanics_PassingCrack_base.xml @@ -48,8 +48,8 @@ + defaultAperture="1.0e-6" + materialList="{ frictionLaw, rock }"/> @@ -60,9 +60,8 @@ defaultShearModulus="1.0e4"/> @@ -123,13 +122,6 @@ scale="0.0" setNames="{ rear }"/> - - - - + defaultAperture="1.0e-6" + materialList="{ frictionLaw }"/> @@ -62,10 +62,9 @@ defaultShearModulus="2.0e3"/> + frictionCoefficient="0.577350269"/> @@ -156,10 +155,6 @@ inputVarNames="{ time }" coordinates="{ 0.0, 5.0, 10.0 }" values="{ 0.0, 5.e0, -5.e0 }"/> - diff --git a/inputFiles/lagrangianContactMechanics/ContactMechanics_SingleFracCompression_base.xml b/inputFiles/lagrangianContactMechanics/ContactMechanics_SingleFracCompression_base.xml index fa6999ef17a..28b80df0368 100755 --- a/inputFiles/lagrangianContactMechanics/ContactMechanics_SingleFracCompression_base.xml +++ b/inputFiles/lagrangianContactMechanics/ContactMechanics_SingleFracCompression_base.xml @@ -57,8 +57,8 @@ + defaultAperture="1.0e-6" + materialList="{ frictionLaw }"/> @@ -70,21 +70,12 @@ defaultShearModulus="1.0e10"/> + frictionCoefficient="0.577350269"/> - - - - - + defaultAperture="1.0e-6" + materialList="{ frictionLaw }"/> @@ -72,10 +72,9 @@ defaultShearModulus="29.17e9"/> + frictionCoefficient="0.577350269"/> @@ -160,11 +159,6 @@ inputVarNames="{ time }" coordinates="{ 0.0, 1.0 }" values="{ 0.0, 1.e0 }"/> - - diff --git a/inputFiles/lagrangianContactMechanics/ContactMechanics_UnstructuredCrack_base.xml b/inputFiles/lagrangianContactMechanics/ContactMechanics_UnstructuredCrack_base.xml index c47369c9a73..4c4c2bb1379 100644 --- a/inputFiles/lagrangianContactMechanics/ContactMechanics_UnstructuredCrack_base.xml +++ b/inputFiles/lagrangianContactMechanics/ContactMechanics_UnstructuredCrack_base.xml @@ -48,8 +48,8 @@ + defaultAperture="1.0e-6" + materialList="{ frictionLaw }"/> @@ -60,10 +60,9 @@ defaultShearModulus="1.0e4"/> + frictionCoefficient="0.577350269"/> @@ -137,12 +136,7 @@ name="ForceTimeFunction" inputVarNames="{ time }" coordinates="{ 0.0, 2.0 }" - values="{ 0.0, 2.e0 }"/> - - + values="{ 0.0, 2.e0 }"/> diff --git a/inputFiles/lagrangianContactMechanics/ContactMechanics_slippingFault_base.xml b/inputFiles/lagrangianContactMechanics/ContactMechanics_slippingFault_base.xml index 7abd1e6c74b..0c5350192c1 100644 --- a/inputFiles/lagrangianContactMechanics/ContactMechanics_slippingFault_base.xml +++ b/inputFiles/lagrangianContactMechanics/ContactMechanics_slippingFault_base.xml @@ -82,8 +82,8 @@ + defaultAperture="1.0e-6" + materialList="{ frictionLaw, rock }"/> @@ -95,18 +95,12 @@ defaultShearModulus="9e9"/> + frictionCoefficient="0.1"/> - - + defaultAperture="1.0e-6" + materialList="{ frictionLaw }"/> @@ -58,10 +58,9 @@ defaultShearModulus="1.0e10"/> + frictionCoefficient="0.577350269"/> @@ -115,13 +114,6 @@ setNames="{ core }"/> - - - - diff --git a/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml b/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml index 0a1704fd9c5..7c53d0d4981 100644 --- a/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml +++ b/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml @@ -88,7 +88,7 @@ @@ -146,8 +146,11 @@ + frictionCoefficient="0.01"/> + + diff --git a/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_edfm_base.xml b/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_edfm_base.xml index f43116ee181..480796bc952 100755 --- a/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_edfm_base.xml +++ b/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_edfm_base.xml @@ -22,13 +22,13 @@ name="fractureMechSolver" targetRegions="{ Domain, Fracture }" timeIntegrationOption="QuasiStatic" - discretization="FE1"/> + discretization="FE1" + contactPenaltyStiffness="2.0e11"/> + targetRegions="{ Domain, Fracture }"/> @@ -120,9 +120,11 @@ initialPermeability="{1.0e-12, 1.0e-12, 1.0e-12}"/> + name="frictionLaw"/> + + diff --git a/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_faultSlip_base.xml b/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_faultSlip_base.xml index 4c674d7bacc..390f1cec5a2 100644 --- a/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_faultSlip_base.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_faultSlip_base.xml @@ -31,7 +31,7 @@ @@ -87,8 +87,11 @@ + frictionCoefficient="0.1"/> + + diff --git a/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_openingFrac_base.xml b/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_openingFrac_base.xml index 9aa53c702f6..29509e3a858 100644 --- a/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_openingFrac_base.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_openingFrac_base.xml @@ -24,7 +24,7 @@ @@ -78,10 +78,13 @@ name="fracturePerm"/> + frictionCoefficient="0.577350269"/> + + diff --git a/inputFiles/poromechanicsFractures/PoroElastic_dfm_PEBICrack_base.xml b/inputFiles/poromechanicsFractures/PoroElastic_dfm_PEBICrack_base.xml index 5f5aa06d519..1aa468ae144 100644 --- a/inputFiles/poromechanicsFractures/PoroElastic_dfm_PEBICrack_base.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_dfm_PEBICrack_base.xml @@ -11,7 +11,7 @@ @@ -118,10 +118,13 @@ name="fracturePerm"/> + frictionCoefficient="0.01"/> + + diff --git a/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_base.xml b/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_base.xml index 8242a94caed..3d8a8b10309 100644 --- a/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_base.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_base.xml @@ -23,7 +23,8 @@ name="fractureMechSolver" targetRegions="{ Domain, Fracture }" timeIntegrationOption="QuasiStatic" - discretization="FE1"/> + discretization="FE1" + contactPenaltyStiffness="4.0e9"/> @@ -120,11 +121,15 @@ name="fracturePerm"/> + name="fractureContact"/> + + + + + discretization="FE1" + contactPenaltyStiffness="1e12"> @@ -247,9 +248,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_eggModel_small.xml b/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_eggModel_small.xml index a758775ec56..074d11adb4e 100644 --- a/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_eggModel_small.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_eggModel_small.xml @@ -25,7 +25,8 @@ name="fractureMechSolver" targetRegions="{ Reservoir, Overburden, Underburden, Sideburden, Fracture }" timeIntegrationOption="QuasiStatic" - discretization="FE1"> + discretization="FE1" + contactPenaltyStiffness="1e12"> @@ -247,9 +248,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_pennyCrack_base.xml b/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_pennyCrack_base.xml index c17733c43ed..7e4c4ad9393 100644 --- a/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_pennyCrack_base.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_pennyCrack_base.xml @@ -38,7 +38,7 @@ name="Fracture" faceBlock="embeddedSurfaceSubRegion" subRegionType="embeddedElement" - materialList="{ water, fractureFilling, fractureContact }" + materialList="{ water, fractureFilling, fractureContact, hApertureModel }" defaultAperture="1e-3"/> @@ -92,9 +92,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_pennyCrack_benchmark.xml b/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_pennyCrack_benchmark.xml index a2979a5b39a..3ca8d754e85 100644 --- a/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_pennyCrack_benchmark.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_pennyCrack_benchmark.xml @@ -28,7 +28,8 @@ name="fractureMechSolver" targetRegions="{ Domain, Fracture }" timeIntegrationOption="QuasiStatic" - discretization="FE1"/> + discretization="FE1" + contactPenaltyStiffness="1e12"/> + discretization="FE1" + contactPenaltyStiffness="1e12"/> + discretization="FE1" + contactPenaltyStiffness="0.0e8"/> @@ -163,9 +164,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/poromechanicsFractures/SlipPermeability_embeddedFrac.xml b/inputFiles/poromechanicsFractures/SlipPermeability_embeddedFrac.xml index 81aa4adae38..ce28512cb48 100755 --- a/inputFiles/poromechanicsFractures/SlipPermeability_embeddedFrac.xml +++ b/inputFiles/poromechanicsFractures/SlipPermeability_embeddedFrac.xml @@ -22,7 +22,8 @@ name="fractureMechSolver" targetRegions="{ Domain, Fracture }" timeIntegrationOption="QuasiStatic" - discretization="FE1"/> + discretization="FE1" + contactPenaltyStiffness="2.0e11"/> @@ -237,9 +238,11 @@ name="fracturePerm2"/> + name="fractureContact"/> + + diff --git a/inputFiles/poromechanicsFractures/SlipPermeability_pEDFM_base.xml b/inputFiles/poromechanicsFractures/SlipPermeability_pEDFM_base.xml index 5d915f898c5..8be34031377 100755 --- a/inputFiles/poromechanicsFractures/SlipPermeability_pEDFM_base.xml +++ b/inputFiles/poromechanicsFractures/SlipPermeability_pEDFM_base.xml @@ -22,7 +22,8 @@ name="fractureMechSolver" targetRegions="{ Domain, Fracture }" timeIntegrationOption="QuasiStatic" - discretization="FE1"/> + discretization="FE1" + contactPenaltyStiffness="2.0e11"/> + usePEDFM="1"/> @@ -64,7 +64,7 @@ name="Fracture" faceBlock="embeddedSurfaceSubRegion" subRegionType="embeddedElement" - materialList="{ water, fractureFilling, fractureContact }" + materialList="{ water, fractureFilling, fractureContact, hApertureModel}" defaultAperture="1e-3"/> @@ -121,9 +121,11 @@ initialPermeability="{1e-15, 1e-15, 1e-15}"/> + name="fractureContact"/> + + diff --git a/inputFiles/poromechanicsFractures/WillisRichardsPermeability_efem-edfm_base.xml b/inputFiles/poromechanicsFractures/WillisRichardsPermeability_efem-edfm_base.xml index 826edbe9e27..f5fee5d296b 100755 --- a/inputFiles/poromechanicsFractures/WillisRichardsPermeability_efem-edfm_base.xml +++ b/inputFiles/poromechanicsFractures/WillisRichardsPermeability_efem-edfm_base.xml @@ -22,7 +22,8 @@ name="fractureMechSolver" targetRegions="{ Domain, Fracture }" timeIntegrationOption="QuasiStatic" - discretization="FE1"/> + discretization="FE1" + contactPenaltyStiffness="2.0e11"/> @@ -123,9 +124,11 @@ refClosureStress="1.0e7"/> + name="fractureContact"/> + + diff --git a/inputFiles/poromechanicsFractures/singlePhasePoromechanics_FaultModel_base.xml b/inputFiles/poromechanicsFractures/singlePhasePoromechanics_FaultModel_base.xml index bd3bba82795..0623d767f54 100644 --- a/inputFiles/poromechanicsFractures/singlePhasePoromechanics_FaultModel_base.xml +++ b/inputFiles/poromechanicsFractures/singlePhasePoromechanics_FaultModel_base.xml @@ -49,8 +49,11 @@ + frictionCoefficient="0.01"/> + + @@ -147,7 +150,7 @@ diff --git a/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_base.xml b/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_base.xml index cb00829f403..1ba0e49f27f 100644 --- a/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_base.xml +++ b/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_base.xml @@ -66,9 +66,11 @@ name="fracturePerm"/> + name="fractureContact"/> + + diff --git a/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_conforming_base.xml b/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_conforming_base.xml index e8ca36eaade..6f855810a38 100644 --- a/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_conforming_base.xml +++ b/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_conforming_base.xml @@ -74,7 +74,7 @@ diff --git a/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_efem-edfm_base.xml b/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_efem-edfm_base.xml index 3d8cf3e4a03..47df41a1533 100644 --- a/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_efem-edfm_base.xml +++ b/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_efem-edfm_base.xml @@ -29,7 +29,8 @@ name="fractureMechSolver" targetRegions="{ RockMatrix, Fracture }" timeIntegrationOption="QuasiStatic" - discretization="FE1"/> + discretization="FE1" + contactPenaltyStiffness="4.0e9"/> diff --git a/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_efem-edfm_eggModel_small.xml b/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_efem-edfm_eggModel_small.xml index f268a9c3ee1..d2b84ef7de2 100644 --- a/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_efem-edfm_eggModel_small.xml +++ b/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_efem-edfm_eggModel_small.xml @@ -27,7 +27,8 @@ name="fractureMechSolver" targetRegions="{ Reservoir, Overburden, Underburden, Sideburden, Fracture }" timeIntegrationOption="QuasiStatic" - discretization="FE1"> + discretization="FE1" + contactPenaltyStiffness="0.0e8"> + name="fractureContact"/> + + diff --git a/inputFiles/wellbore/CasedElasticWellbore_ImperfectInterfaces_base.xml b/inputFiles/wellbore/CasedElasticWellbore_ImperfectInterfaces_base.xml index afb8cd86e99..0f782918ec9 100644 --- a/inputFiles/wellbore/CasedElasticWellbore_ImperfectInterfaces_base.xml +++ b/inputFiles/wellbore/CasedElasticWellbore_ImperfectInterfaces_base.xml @@ -74,9 +74,7 @@ + frictionCoefficient="0.5"/> - diff --git a/inputFiles/wellbore/CasedThermoElasticWellbore_ImperfectInterfaces_base.xml b/inputFiles/wellbore/CasedThermoElasticWellbore_ImperfectInterfaces_base.xml index 3a6d0653f9e..4cc92cc6c6c 100644 --- a/inputFiles/wellbore/CasedThermoElasticWellbore_ImperfectInterfaces_base.xml +++ b/inputFiles/wellbore/CasedThermoElasticWellbore_ImperfectInterfaces_base.xml @@ -78,7 +78,7 @@ @@ -100,11 +100,13 @@ + frictionCoefficient="0.5"/> + + 0 + */ + GEOS_HOST_DEVICE + real64 computeHydraulicAperture( real64 const aperture, + real64 const normalTraction, + real64 & dHydraulicAperture_aperture, + real64 & dHydraulicAperture_dNormalStress ) const; + +private: + real64 m_aperture0; + + real64 m_referenceNormalStress; +}; + + +/** + * @class BartonBandis + * + * This class serves as the interface for implementing contact enforcement constitutive relations. + * This does not include the actual enforcement algorithm, but only the constitutive relations that + * govern the behavior of the contact. So things like penalty, or friction, or kinematic constraint. + */ +class BartonBandis : public HydraulicApertureBase +{ +public: + + /** + * @brief The standard data repository constructor + * @param name The name of the relation in the data repository + * @param parent The name of the parent Group that holds this relation object. + */ + BartonBandis( string const & name, + Group * const parent ); + + /** + * @brief default destructor + */ + virtual ~BartonBandis() override; + + + /// Type of kernel wrapper for in-kernel update + using KernelWrapper = BartonBandisUpdates; + + /** + * @brief Create an update kernel wrapper. + * @return the wrapper + */ + KernelWrapper createKernelWrapper() const; + +private: + + struct viewKeyStruct : public HydraulicApertureBase::viewKeyStruct + { + /// string/key for reference normal stress + static constexpr char const * referenceNormalStressString() { return "referenceNormalStress"; } + }; + /// Reference normal stress + real64 m_referenceNormalStress; +}; + +GEOS_HOST_DEVICE +GEOS_FORCE_INLINE +real64 BartonBandisUpdates::computeHydraulicAperture( real64 const aperture, + real64 const normalTraction, + real64 & dHydraulicAperture_aperture, + real64 & dHydraulicAperture_dNormalStress ) const +{ + real64 const hydraulicAperture = ( aperture >= 0.0 ) ? (aperture + m_aperture0) : m_aperture0 / ( 1 + 9*normalTraction/m_referenceNormalStress ); + dHydraulicAperture_dNormalStress = ( aperture >= 0.0 ) ? 0.0 : -hydraulicAperture / ( 1 + 9*normalTraction/m_referenceNormalStress ) * 9/m_referenceNormalStress; + dHydraulicAperture_aperture = ( aperture >= 0.0 ) ? 1.0 : 0.0; + + return hydraulicAperture; ///It would be nice to change this to return a tuple. +} + +} /* namespace constitutive */ + +} /* namespace geos */ + +#endif /* GEOS_CONSTITUTIVE_CONTACT_HYDRAULICAPERTURETABLE_HPP_ */ diff --git a/src/coreComponents/constitutive/contact/ContactBase.hpp b/src/coreComponents/constitutive/contact/ContactBase.hpp deleted file mode 100644 index 7b088ed5e17..00000000000 --- a/src/coreComponents/constitutive/contact/ContactBase.hpp +++ /dev/null @@ -1,269 +0,0 @@ -/* - * ------------------------------------------------------------------------------------------------------------ - * SPDX-License-Identifier: LGPL-2.1-only - * - * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC - * Copyright (c) 2018-2024 Total, S.A - * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University - * Copyright (c) 2018-2024 Chevron - * Copyright (c) 2019- GEOS/GEOSX Contributors - * All rights reserved - * - * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. - * ------------------------------------------------------------------------------------------------------------ - */ - -/** - * @file ContactBase.hpp - */ - -#ifndef GEOS_CONSTITUTIVE_CONTACT_CONTACTBASE_HPP_ -#define GEOS_CONSTITUTIVE_CONTACT_CONTACTBASE_HPP_ - -#include "constitutive/ConstitutiveBase.hpp" -#include "functions/TableFunction.hpp" -#include "physicsSolvers/contact/ContactFields.hpp" - - -namespace geos -{ - -namespace constitutive -{ - -/** - * @class ContactBaseUpdates - * - * This class is used for in-kernel contact relation updates - */ -class ContactBaseUpdates -{ -public: - - ContactBaseUpdates( real64 const & penaltyStiffness, - real64 const & shearStiffness, - real64 const & displacementJumpThreshold, - TableFunction const & apertureTable ) - : m_penaltyStiffness( penaltyStiffness ), - m_shearStiffness( shearStiffness ), - m_displacementJumpThreshold( displacementJumpThreshold ), - m_apertureTable( apertureTable.createKernelWrapper() ) - {} - - /// Default copy constructor - ContactBaseUpdates( ContactBaseUpdates const & ) = default; - - /// Default move constructor - ContactBaseUpdates( ContactBaseUpdates && ) = default; - - /// Deleted default constructor - ContactBaseUpdates() = default; - - /// Deleted copy assignment operator - ContactBaseUpdates & operator=( ContactBaseUpdates const & ) = delete; - - /// Deleted move assignment operator - ContactBaseUpdates & operator=( ContactBaseUpdates && ) = delete; - - /** - * @brief Evaluate the effective aperture, and its derivative wrt aperture - * @param[in] aperture the model aperture/gap - * @param[out] dHydraulicAperture_dAperture the derivative of the effective aperture wrt aperture - * @return The hydraulic aperture that is always > 0 - */ - GEOS_HOST_DEVICE - virtual real64 computeHydraulicAperture( real64 const aperture, - real64 & dHydraulicAperture_dAperture ) const; - - - /** - * @brief Evaluate the traction vector and its derivatives wrt to pressure and jump - * @param[in] dispJump the displacement jump - * @param[in] fractureState the fracture state - * @param[out] tractionVector the traction vector - * @param[out] dTractionVector_dJump the derivative of the traction vector wrt displacement jump - */ - GEOS_HOST_DEVICE - inline - virtual void computeTraction( localIndex const k, - arraySlice1d< real64 const > const & oldDispJump, - arraySlice1d< real64 const > const & dispJump, - integer const & fractureState, - arraySlice1d< real64 > const & tractionVector, - arraySlice2d< real64 > const & dTractionVector_dJump ) const - {GEOS_UNUSED_VAR( k, oldDispJump, dispJump, tractionVector, dTractionVector_dJump, fractureState );} - - /** - * @brief Evaluate the traction vector and its derivatives wrt to pressure and jump - * @param[in] dispJump the displacement jump - * @param[in] tractionVector the traction vector - * @param[out] fractureState the fracture state - */ - GEOS_HOST_DEVICE - inline - virtual void updateFractureState( localIndex const k, - arraySlice1d< real64 const > const & dispJump, - arraySlice1d< real64 const > const & tractionVector, - integer & fractureState ) const - { GEOS_UNUSED_VAR( k, dispJump, tractionVector, fractureState ); } - - /** - * @brief Update the traction with the pressure term - * @param[in] pressure the pressure term - * @param[in] isOpen a flag specifying whether the fracture is open or closed - * @param[inout] traction the current tractionVector - * @param[out] dTraction_dPressure the derivative of the fist component of traction wrt pressure - * @return the updated traction - */ - GEOS_HOST_DEVICE - virtual void addPressureToTraction( real64 const & pressure, - arraySlice1d< real64 >const & tractionVector, - real64 & dTraction_dPressure ) const; - - /** - * @brief Evaluate the limit tangential traction norm and return the derivative wrt normal traction - * @param[in] normalTraction the normal traction - * @param[out] dLimitTangentialTractionNorm_dTraction the derivative of the limit tangential traction norm wrt normal traction - * @return the limit tangential traction norm - */ - GEOS_HOST_DEVICE - inline - virtual real64 computeLimitTangentialTractionNorm( real64 const & normalTraction, - real64 & dLimitTangentialTractionNorm_dTraction ) const - { GEOS_UNUSED_VAR( normalTraction, dLimitTangentialTractionNorm_dTraction ); return 0; }; - -protected: - - /// The penalty stiffness - real64 m_penaltyStiffness; - - /// The shear stiffness - real64 m_shearStiffness; - - /// A threshold valued to determine whether a fracture is open or not. - real64 m_displacementJumpThreshold; - - /// The aperture table function wrapper - TableFunction::KernelWrapper m_apertureTable; -}; - - -/** - * @class ContactBase - * - * This class serves as the interface for implementing contact enforcement constitutive relations. - * This does not include the actual enforcement algorithm, but only the constitutive relations that - * govern the behavior of the contact. So things like penalty, or friction, or kinematic constraint. - */ -class ContactBase : public ConstitutiveBase -{ -public: - - /** - * @brief The standard data repository constructor - * @param name The name of the relation in the data repository - * @param parent The name of the parent Group that holds this relation object. - */ - ContactBase( string const & name, - Group * const parent ); - - /** - * @brief default destructor - */ - virtual ~ContactBase() override; - - virtual void allocateConstitutiveData( dataRepository::Group & parent, - localIndex const numConstitutivePointsPerParentIndex ) override; - - /** - * @brief accessor for penalty stiffness - * @return the stiffness - */ - real64 stiffness() const { return m_penaltyStiffness; } - - - /// Type of kernel wrapper for in-kernel update - using KernelWrapper = ContactBaseUpdates; - - /** - * @brief Create an update kernel wrapper. - * @return the wrapper - */ - KernelWrapper createKernelWrapper() const; - - /** - * @struct Structure to hold scoped key names - */ - struct viewKeyStruct : public ConstitutiveBase::viewKeyStruct - { - /// string/key for penalty stiffness - static constexpr char const * penaltyStiffnessString() { return "penaltyStiffness"; } - - /// string/key for shear stiffness - static constexpr char const * shearStiffnessString() { return "shearStiffness"; } - - /// string/key for the displacement jump threshold value - static constexpr char const * displacementJumpThresholdString() { return "displacementJumpThreshold"; } - - /// string/key for aperture tolerance - static constexpr char const * apertureToleranceString() { return "apertureTolerance"; } - - /// string/key for aperture table name - static constexpr char const * apertureTableNameString() { return "apertureTableName"; } - }; - -protected: - virtual void postInputInitialization() override; - - virtual void initializePreSubGroups() override; - - /** - * @brief Validate the values provided in the aperture table - * @param[in] apertureTable the effective aperture vs aperture table - */ - void validateApertureTable( TableFunction const & apertureTable ) const; - - - /// The value of penalty to penetration - real64 m_penaltyStiffness; - - /// The value of the shear stiffness - real64 m_shearStiffness; - - /// The aperture tolerance to avoid floating point errors in expressions involving aperture - real64 m_apertureTolerance; - - /// The name of the aperture table, if any - string m_apertureTableName; - - /// A threshold valued to determine whether a fracture is open or not. - real64 m_displacementJumpThreshold; - - /// Pointer to the function that limits the model aperture to a physically admissible value. - TableFunction const * m_apertureTable; -}; - -GEOS_HOST_DEVICE -GEOS_FORCE_INLINE -real64 ContactBaseUpdates::computeHydraulicAperture( real64 const aperture, - real64 & dHydraulicAperture_dAperture ) const -{ - return m_apertureTable.compute( &aperture, &dHydraulicAperture_dAperture ); -} - -GEOS_HOST_DEVICE -GEOS_FORCE_INLINE -void ContactBaseUpdates::addPressureToTraction( real64 const & pressure, - arraySlice1d< real64 > const & tractionVector, - real64 & dTraction_dPressure ) const -{ - tractionVector[0] -= pressure; - dTraction_dPressure = -1.0; -} - - -} /* namespace constitutive */ - -} /* namespace geos */ - -#endif /* GEOS_CONSTITUTIVE_CONTACT_CONTACTBASE_HPP_ */ diff --git a/src/coreComponents/constitutive/contact/CoulombContact.hpp b/src/coreComponents/constitutive/contact/CoulombContact.hpp deleted file mode 100644 index 89b39211b0d..00000000000 --- a/src/coreComponents/constitutive/contact/CoulombContact.hpp +++ /dev/null @@ -1,328 +0,0 @@ -/* - * ------------------------------------------------------------------------------------------------------------ - * SPDX-License-Identifier: LGPL-2.1-only - * - * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC - * Copyright (c) 2018-2024 Total, S.A - * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University - * Copyright (c) 2018-2024 Chevron - * Copyright (c) 2019- GEOS/GEOSX Contributors - * All rights reserved - * - * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. - * ------------------------------------------------------------------------------------------------------------ - */ - -/** - * @file CoulombContact.hpp - */ - -#ifndef GEOS_CONSTITUTIVE_CONTACT_COULOMBCONTACT_HPP_ -#define GEOS_CONSTITUTIVE_CONTACT_COULOMBCONTACT_HPP_ - -#include "ContactBase.hpp" - -namespace geos -{ - -namespace constitutive -{ - -/** - * @class CoulombContactUpdates - * - * This class is used for in-kernel contact relation updates - */ -class CoulombContactUpdates : public ContactBaseUpdates -{ -public: - - CoulombContactUpdates( real64 const & penaltyStiffness, - real64 const & shearStiffness, - real64 const & displacementJumpThreshold, - TableFunction const & apertureTable, - real64 const & cohesion, - real64 const & frictionCoefficient, - arrayView2d< real64 > const & elasticSlip ) - : ContactBaseUpdates( penaltyStiffness, shearStiffness, displacementJumpThreshold, apertureTable ), - m_cohesion( cohesion ), - m_frictionCoefficient( frictionCoefficient ), - m_elasticSlip( elasticSlip ) - {} - - /// Default copy constructor - CoulombContactUpdates( CoulombContactUpdates const & ) = default; - - /// Default move constructor - CoulombContactUpdates( CoulombContactUpdates && ) = default; - - /// Deleted default constructor - CoulombContactUpdates() = delete; - - /// Deleted copy assignment operator - CoulombContactUpdates & operator=( CoulombContactUpdates const & ) = delete; - - /// Deleted move assignment operator - CoulombContactUpdates & operator=( CoulombContactUpdates && ) = delete; - - /** - * @brief Evaluate the limit tangential traction norm and return the derivative wrt normal traction - * @param[in] normalTraction the normal traction - * @param[out] dLimitTangentialTractionNorm_dTraction the derivative of the limit tangential traction norm wrt normal traction - * @return the limit tangential traction norm - */ - GEOS_HOST_DEVICE - inline - virtual real64 computeLimitTangentialTractionNorm( real64 const & normalTraction, - real64 & dLimitTangentialTractionNorm_dTraction ) const override final; - - GEOS_HOST_DEVICE - inline - virtual void computeTraction( localIndex const k, - arraySlice1d< real64 const > const & oldDispJump, - arraySlice1d< real64 const > const & dispJump, - integer const & fractureState, - arraySlice1d< real64 > const & tractionVector, - arraySlice2d< real64 > const & dTractionVector_dJump ) const override final; - - GEOS_HOST_DEVICE - inline - virtual void updateFractureState( localIndex const k, - arraySlice1d< real64 const > const & dispJump, - arraySlice1d< real64 const > const & tractionVector, - integer & fractureState ) const override final; - -private: - - /// The cohesion for each upper level dimension (i.e. cell) of *this - real64 m_cohesion; - - /// The friction coefficient for each upper level dimension (i.e. cell) of *this - real64 m_frictionCoefficient; - - arrayView2d< real64 > m_elasticSlip; -}; - - -/** - * @class CoulombContact - * - * Class to provide a CoulombContact friction model. - */ -class CoulombContact : public ContactBase -{ -public: - - /** - * constructor - * @param[in] name name of the instance in the catalog - * @param[in] parent the group which contains this instance - */ - CoulombContact( string const & name, Group * const parent ); - - /** - * Default Destructor - */ - virtual ~CoulombContact() override; - - /** - * @name Static Factory Catalog members and functions - */ - ///@{ - - /** - * @return A string that is used to register/lookup this class in the registry - */ - static string catalogName() { return "Coulomb"; } - - virtual string getCatalogName() const override { return catalogName(); } - - ///@} - - virtual void allocateConstitutiveData( dataRepository::Group & parent, - localIndex const numConstitutivePointsPerParentIndex ) override final; - - /** - * @brief Const accessor for cohesion - * @return A const reference to arrayView1d containing the - * cohesions (at every element). - */ - real64 const & cohesion() const { return m_cohesion; } - - /** - * @brief Const accessor for friction angle - * @return A const reference to arrayView1d containing the - * friction coefficient (at every element). - */ - real64 const & frictionCoefficient() const { return m_frictionCoefficient; } - - /// Type of kernel wrapper for in-kernel update - using KernelWrapper = CoulombContactUpdates; - - /** - * @brief Create an update kernel wrapper. - * @return the wrapper - */ - KernelWrapper createKernelWrapper() const; - -protected: - - virtual void postInputInitialization() override; - -private: - - /// The cohesion for each upper level dimension (i.e. cell) of *this - real64 m_cohesion; - - /// The friction coefficient for each upper level dimension (i.e. cell) of *this - real64 m_frictionCoefficient; - - /// Elastic slip - array2d< real64 > m_elasticSlip; - -/** - * @struct Set of "char const *" and keys for data specified in this class. - */ - struct viewKeyStruct : public ContactBase::viewKeyStruct - { - /// string/key for cohesion - static constexpr char const * cohesionString() { return "cohesion"; } - - /// string/key for friction coefficient - static constexpr char const * frictionCoefficientString() { return "frictionCoefficient"; } - - /// string/key for the elastic slip - static constexpr char const * elasticSlipString() { return "elasticSlip"; } - }; - -}; - - -GEOS_HOST_DEVICE -real64 CoulombContactUpdates::computeLimitTangentialTractionNorm( real64 const & normalTraction, - real64 & dLimitTangentialTractionNorm_dTraction ) const -{ - dLimitTangentialTractionNorm_dTraction = m_frictionCoefficient; - return ( m_cohesion - normalTraction * m_frictionCoefficient ); -} - - -GEOS_HOST_DEVICE -inline void CoulombContactUpdates::computeTraction( localIndex const k, - arraySlice1d< real64 const > const & oldDispJump, - arraySlice1d< real64 const > const & dispJump, - integer const & fractureState, - arraySlice1d< real64 > const & tractionVector, - arraySlice2d< real64 > const & dTractionVector_dJump ) const -{ - - bool const isOpen = fractureState == fields::contact::FractureState::Open; - - // Initialize everyting to 0 - tractionVector[0] = 0.0; - tractionVector[1] = 0.0; - tractionVector[2] = 0.0; - LvArray::forValuesInSlice( dTractionVector_dJump, []( real64 & val ){ val = 0.0; } ); - // If the fracture is open the traction is 0 and so are its derivatives so there is nothing to do - if( !isOpen ) - { - // normal component of the traction - tractionVector[0] = m_penaltyStiffness * dispJump[0]; - // derivative of the normal component w.r.t. to the nomral dispJump - dTractionVector_dJump[0][0] = m_penaltyStiffness; - - // Compute the slip - real64 const slip[2] = { dispJump[1] - oldDispJump[1], - dispJump[2] - oldDispJump[2] }; - - - real64 const tau[2] = { m_shearStiffness * ( slip[0] + m_elasticSlip[k][0] ), - m_shearStiffness * ( slip[1] + m_elasticSlip[k][1] ) }; - - switch( fractureState ) - { - case fields::contact::FractureState::Stick: - { - // Elastic slip case - // Tangential components of the traction are equal to tau - tractionVector[1] = tau[0]; - tractionVector[2] = tau[1]; - - dTractionVector_dJump[1][1] = m_shearStiffness; - dTractionVector_dJump[2][2] = m_shearStiffness; - - // The slip is only elastic: we add the full slip to the elastic one - LvArray::tensorOps::add< 2 >( m_elasticSlip[k], slip ); - - break; - } - case fields::contact::FractureState::Slip: - { - // Plastic slip case - real64 dLimitTau_dNormalTraction; - real64 const limitTau = computeLimitTangentialTractionNorm( tractionVector[0], - dLimitTau_dNormalTraction ); - - real64 const slipNorm = LvArray::tensorOps::l2Norm< 2 >( slip ); - - // Tangential components of the traction computed based on the limitTau - tractionVector[1] = limitTau * slip[0] / slipNorm; - tractionVector[2] = limitTau * slip[1] / slipNorm; - - dTractionVector_dJump[1][0] = m_penaltyStiffness * dLimitTau_dNormalTraction * slip[0] / slipNorm; - dTractionVector_dJump[1][1] = limitTau * pow( slip[1], 2 ) / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); - dTractionVector_dJump[1][2] = limitTau * slip[0] * slip[1] / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); - - dTractionVector_dJump[2][0] = m_penaltyStiffness * dLimitTau_dNormalTraction * slip[1] / slipNorm; - dTractionVector_dJump[2][1] = limitTau * slip[0] * slip[1] / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); - dTractionVector_dJump[2][2] = limitTau * pow( slip[0], 2 ) / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); - - // Compute elastic component of the slip for this case - real64 const plasticSlip[2] = { tractionVector[1] / m_shearStiffness, - tractionVector[2] / m_shearStiffness }; - - LvArray::tensorOps::copy< 2 >( m_elasticSlip[k], slip ); - LvArray::tensorOps::subtract< 2 >( m_elasticSlip[k], plasticSlip ); - - break; - } - } - } -} - -GEOS_HOST_DEVICE -inline void CoulombContactUpdates::updateFractureState( localIndex const k, - arraySlice1d< real64 const > const & dispJump, - arraySlice1d< real64 const > const & tractionVector, - integer & fractureState ) const -{ - using namespace fields::contact; - - if( dispJump[0] > -m_displacementJumpThreshold ) - { - fractureState = FractureState::Open; - m_elasticSlip[k][0] = 0.0; - m_elasticSlip[k][1] = 0.0; - } - else - { - real64 const tau[2] = { tractionVector[1], - tractionVector[2] }; - real64 const tauNorm = LvArray::tensorOps::l2Norm< 2 >( tau ); - - real64 dLimitTau_dNormalTraction; - real64 const limitTau = computeLimitTangentialTractionNorm( tractionVector[0], - dLimitTau_dNormalTraction ); - - // Yield function (not necessary but makes it clearer) - real64 const yield = tauNorm - limitTau; - - fractureState = yield < 0 ? FractureState::Stick : FractureState::Slip; - } -} - -} /* namespace constitutive */ - -} /* namespace geos */ - -#endif /* GEOS_CONSTITUTIVE_CONTACT_COULOMBCONTACT_HPP_ */ diff --git a/src/coreComponents/constitutive/contact/CoulombContact.cpp b/src/coreComponents/constitutive/contact/CoulombFriction.cpp similarity index 59% rename from src/coreComponents/constitutive/contact/CoulombContact.cpp rename to src/coreComponents/constitutive/contact/CoulombFriction.cpp index 95ef7d5f8ea..bf9d89cb073 100644 --- a/src/coreComponents/constitutive/contact/CoulombContact.cpp +++ b/src/coreComponents/constitutive/contact/CoulombFriction.cpp @@ -14,10 +14,10 @@ */ /** - * @file CoulombContact.cpp + * @file CoulombFriction.cpp */ -#include "CoulombContact.hpp" +#include "CoulombFriction.hpp" namespace geos { @@ -27,12 +27,16 @@ using namespace dataRepository; namespace constitutive { -CoulombContact::CoulombContact( string const & name, Group * const parent ): - ContactBase( name, parent ), +CoulombFriction::CoulombFriction( string const & name, Group * const parent ): + FrictionBase( name, parent ), m_cohesion(), m_frictionCoefficient(), m_elasticSlip() { + registerWrapper( viewKeyStruct::shearStiffnessString(), &m_shearStiffness ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "Value of the shear elastic stiffness. Units of Pressure/length" ); + registerWrapper( viewKeyStruct::cohesionString(), &m_cohesion ). setApplyDefaultValue( -1 ). setInputFlag( InputFlags::REQUIRED ). @@ -49,10 +53,10 @@ CoulombContact::CoulombContact( string const & name, Group * const parent ): } -CoulombContact::~CoulombContact() +CoulombFriction::~CoulombFriction() {} -void CoulombContact::postInputInitialization() +void CoulombFriction::postInputInitialization() { GEOS_THROW_IF( m_frictionCoefficient < 0.0, getFullName() << ": The provided friction coefficient is less than zero. Value: " << m_frictionCoefficient, @@ -60,27 +64,25 @@ void CoulombContact::postInputInitialization() } -void CoulombContact::allocateConstitutiveData( Group & parent, - localIndex const numConstitutivePointsPerParentIndex ) +void CoulombFriction::allocateConstitutiveData( Group & parent, + localIndex const numConstitutivePointsPerParentIndex ) { m_elasticSlip.resize( 0, 2 ); - ContactBase::allocateConstitutiveData( parent, numConstitutivePointsPerParentIndex ); + FrictionBase::allocateConstitutiveData( parent, numConstitutivePointsPerParentIndex ); } -CoulombContactUpdates CoulombContact::createKernelWrapper() const +CoulombFrictionUpdates CoulombFriction::createKernelWrapper() const { - return CoulombContactUpdates( m_penaltyStiffness, - m_shearStiffness, - m_displacementJumpThreshold, - *m_apertureTable, - m_cohesion, - m_frictionCoefficient, - m_elasticSlip ); + return CoulombFrictionUpdates( m_displacementJumpThreshold, + m_shearStiffness, + m_cohesion, + m_frictionCoefficient, + m_elasticSlip ); } -REGISTER_CATALOG_ENTRY( ConstitutiveBase, CoulombContact, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, CoulombFriction, string const &, Group * const ) } /* namespace constitutive */ diff --git a/src/coreComponents/constitutive/contact/CoulombFriction.hpp b/src/coreComponents/constitutive/contact/CoulombFriction.hpp new file mode 100644 index 00000000000..e2cd87f024f --- /dev/null +++ b/src/coreComponents/constitutive/contact/CoulombFriction.hpp @@ -0,0 +1,309 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file CoulombFriction.hpp + */ + +#ifndef GEOS_CONSTITUTIVE_CONTACT_COULOMBFRICTION_HPP_ +#define GEOS_CONSTITUTIVE_CONTACT_COULOMBFRICTION_HPP_ + +#include "FrictionBase.hpp" + +namespace geos +{ + +namespace constitutive +{ + +/** + * @class CoulombFrictionUpdates + * + * This class is used for in-kernel contact relation updates + */ +class CoulombFrictionUpdates : public FrictionBaseUpdates +{ +public: + CoulombFrictionUpdates( real64 const & displacementJumpThreshold, + real64 const & shearStiffness, + real64 const & cohesion, + real64 const & frictionCoefficient, + arrayView2d< real64 > const & elasticSlip ) + : FrictionBaseUpdates( displacementJumpThreshold ), + m_shearStiffness( shearStiffness ), + m_cohesion( cohesion ), + m_frictionCoefficient( frictionCoefficient ), + m_elasticSlip( elasticSlip ) + {} + + /// Default copy constructor + CoulombFrictionUpdates( CoulombFrictionUpdates const & ) = default; + + /// Default move constructor + CoulombFrictionUpdates( CoulombFrictionUpdates && ) = default; + + /// Deleted default constructor + CoulombFrictionUpdates() = delete; + + /// Deleted copy assignment operator + CoulombFrictionUpdates & operator=( CoulombFrictionUpdates const & ) = delete; + + /// Deleted move assignment operator + CoulombFrictionUpdates & operator=( CoulombFrictionUpdates && ) = delete; + + /** + * @brief Evaluate the limit tangential traction norm and return the derivative wrt normal traction + * @param[in] normalTraction the normal traction + * @param[out] dLimitTangentialTractionNorm_dTraction the derivative of the limit tangential traction norm wrt normal traction + * @return the limit tangential traction norm + */ + GEOS_HOST_DEVICE + inline + virtual real64 computeLimitTangentialTractionNorm( real64 const & normalTraction, + real64 & dLimitTangentialTractionNorm_dTraction ) const override final; + + GEOS_HOST_DEVICE + inline + virtual void computeShearTraction( localIndex const k, + arraySlice1d< real64 const > const & oldDispJump, + arraySlice1d< real64 const > const & dispJump, + integer const & fractureState, + arraySlice1d< real64 > const & tractionVector, + arraySlice2d< real64 > const & dTractionVector_dJump ) const override final; + + GEOS_HOST_DEVICE + inline + virtual void updateFractureState( localIndex const k, + arraySlice1d< real64 const > const & dispJump, + arraySlice1d< real64 const > const & tractionVector, + integer & fractureState ) const override final; + +private: + /// The shear stiffness + real64 m_shearStiffness; + + /// The cohesion for each upper level dimension (i.e. cell) of *this + real64 m_cohesion; + + /// The friction coefficient for each upper level dimension (i.e. cell) of *this + real64 m_frictionCoefficient; + + arrayView2d< real64 > m_elasticSlip; +}; + + +/** + * @class CoulombFriction + * + * Class to provide a CoulombFriction friction model. + */ +class CoulombFriction : public FrictionBase +{ +public: + + /** + * constructor + * @param[in] name name of the instance in the catalog + * @param[in] parent the group which contains this instance + */ + CoulombFriction( string const & name, Group * const parent ); + + /** + * Default Destructor + */ + virtual ~CoulombFriction() override; + + static string catalogName() { return "Coulomb"; } + + virtual string getCatalogName() const override { return catalogName(); } + + ///@} + + virtual void allocateConstitutiveData( dataRepository::Group & parent, + localIndex const numConstitutivePointsPerParentIndex ) override final; + + /** + * @brief Const accessor for cohesion + * @return A const reference to arrayView1d containing the + * cohesions (at every element). + */ + real64 const & cohesion() const { return m_cohesion; } + + /** + * @brief Const accessor for friction angle + * @return A const reference to arrayView1d containing the + * friction coefficient (at every element). + */ + real64 const & frictionCoefficient() const { return m_frictionCoefficient; } + + /// Type of kernel wrapper for in-kernel update + using KernelWrapper = CoulombFrictionUpdates; + + /** + * @brief Create an update kernel wrapper. + * @return the wrapper + */ + KernelWrapper createKernelWrapper() const; + +protected: + + virtual void postInputInitialization() override; + +private: + + /// The shear stiffness + real64 m_shearStiffness; + + /// The cohesion for each upper level dimension (i.e. cell) of *this + real64 m_cohesion; + + /// The friction coefficient for each upper level dimension (i.e. cell) of *this + real64 m_frictionCoefficient; + + /// Elastic slip + array2d< real64 > m_elasticSlip; + +/** + * @struct Set of "char const *" and keys for data specified in this class. + */ + struct viewKeyStruct : public FrictionBase::viewKeyStruct + { + /// string/key for shear stiffness + static constexpr char const * shearStiffnessString() { return "shearStiffness"; } + + /// string/key for cohesion + static constexpr char const * cohesionString() { return "cohesion"; } + + /// string/key for friction coefficient + static constexpr char const * frictionCoefficientString() { return "frictionCoefficient"; } + + /// string/key for the elastic slip + static constexpr char const * elasticSlipString() { return "elasticSlip"; } + }; + +}; + + +GEOS_HOST_DEVICE +real64 CoulombFrictionUpdates::computeLimitTangentialTractionNorm( real64 const & normalTraction, + real64 & dLimitTangentialTractionNorm_dTraction ) const +{ + dLimitTangentialTractionNorm_dTraction = m_frictionCoefficient; + return ( m_cohesion - normalTraction * m_frictionCoefficient ); +} + + +GEOS_HOST_DEVICE +inline void CoulombFrictionUpdates::computeShearTraction( localIndex const k, + arraySlice1d< real64 const > const & oldDispJump, + arraySlice1d< real64 const > const & dispJump, + integer const & fractureState, + arraySlice1d< real64 > const & tractionVector, + arraySlice2d< real64 > const & dTractionVector_dJump ) const +{ + // Compute the slip + real64 const slip[2] = { dispJump[1] - oldDispJump[1], + dispJump[2] - oldDispJump[2] }; + + + real64 const tau[2] = { m_shearStiffness * ( slip[0] + m_elasticSlip[k][0] ), + m_shearStiffness * ( slip[1] + m_elasticSlip[k][1] ) }; + + switch( fractureState ) + { + case fields::contact::FractureState::Stick: + { + // Elastic slip case + // Tangential components of the traction are equal to tau + tractionVector[1] = tau[0]; + tractionVector[2] = tau[1]; + + dTractionVector_dJump[1][1] = m_shearStiffness; + dTractionVector_dJump[2][2] = m_shearStiffness; + + // The slip is only elastic: we add the full slip to the elastic one + LvArray::tensorOps::add< 2 >( m_elasticSlip[k], slip ); + + break; + } + case fields::contact::FractureState::Slip: + { + // Plastic slip case + real64 dLimitTau_dNormalTraction; + real64 const limitTau = computeLimitTangentialTractionNorm( tractionVector[0], + dLimitTau_dNormalTraction ); + + real64 const slipNorm = LvArray::tensorOps::l2Norm< 2 >( slip ); + + // Tangential components of the traction computed based on the limitTau + tractionVector[1] = limitTau * slip[0] / slipNorm; + tractionVector[2] = limitTau * slip[1] / slipNorm; + + dTractionVector_dJump[1][0] = dTractionVector_dJump[0][0] * dLimitTau_dNormalTraction * slip[0] / slipNorm; + dTractionVector_dJump[1][1] = limitTau * pow( slip[1], 2 ) / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); + dTractionVector_dJump[1][2] = limitTau * slip[0] * slip[1] / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); + + dTractionVector_dJump[2][0] = dTractionVector_dJump[0][0] * dLimitTau_dNormalTraction * slip[1] / slipNorm; + dTractionVector_dJump[2][1] = limitTau * slip[0] * slip[1] / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); + dTractionVector_dJump[2][2] = limitTau * pow( slip[0], 2 ) / pow( LvArray::tensorOps::l2NormSquared< 2 >( slip ), 1.5 ); + + // Compute elastic component of the slip for this case + real64 const plasticSlip[2] = { tractionVector[1] / m_shearStiffness, + tractionVector[2] / m_shearStiffness }; + + LvArray::tensorOps::copy< 2 >( m_elasticSlip[k], slip ); + LvArray::tensorOps::subtract< 2 >( m_elasticSlip[k], plasticSlip ); + + break; + } + } +} + +GEOS_HOST_DEVICE +inline void CoulombFrictionUpdates::updateFractureState( localIndex const k, + arraySlice1d< real64 const > const & dispJump, + arraySlice1d< real64 const > const & tractionVector, + integer & fractureState ) const +{ + using namespace fields::contact; + + if( dispJump[0] > -m_displacementJumpThreshold ) + { + fractureState = FractureState::Open; + m_elasticSlip[k][0] = 0.0; + m_elasticSlip[k][1] = 0.0; + } + else + { + real64 const tau[2] = { tractionVector[1], + tractionVector[2] }; + real64 const tauNorm = LvArray::tensorOps::l2Norm< 2 >( tau ); + + real64 dLimitTau_dNormalTraction; + real64 const limitTau = computeLimitTangentialTractionNorm( tractionVector[0], + dLimitTau_dNormalTraction ); + + // Yield function (not necessary but makes it clearer) + real64 const yield = tauNorm - limitTau; + + fractureState = yield < 0 ? FractureState::Stick : FractureState::Slip; + } +} + +} /* namespace constitutive */ + +} /* namespace geos */ + +#endif /* GEOS_CONSTITUTIVE_CONTACT_COULOMBFRICTION_HPP_ */ diff --git a/src/coreComponents/constitutive/contact/FrictionBase.cpp b/src/coreComponents/constitutive/contact/FrictionBase.cpp new file mode 100644 index 00000000000..a4443bcf335 --- /dev/null +++ b/src/coreComponents/constitutive/contact/FrictionBase.cpp @@ -0,0 +1,51 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 FrictionBase.cpp + */ + +#include "FrictionBase.hpp" +#include "functions/FunctionManager.hpp" +#include "functions/TableFunction.hpp" + +namespace geos +{ + +using namespace dataRepository; + +namespace constitutive +{ + +FrictionBase::FrictionBase( string const & name, + Group * const parent ): + ConstitutiveBase( name, parent ) +{ + registerWrapper( viewKeyStruct::displacementJumpThresholdString(), &m_displacementJumpThreshold ). + setApplyDefaultValue( std::numeric_limits< real64 >::epsilon() ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "A threshold valued to determine whether a fracture is open or not." ); +} + +FrictionBase::~FrictionBase() +{} + +FrictionBaseUpdates FrictionBase::createKernelWrapper() const +{ + return FrictionBaseUpdates( m_displacementJumpThreshold ); +} + +} /* end namespace constitutive */ + +} /* end namespace geos */ diff --git a/src/coreComponents/constitutive/contact/FrictionBase.hpp b/src/coreComponents/constitutive/contact/FrictionBase.hpp new file mode 100644 index 00000000000..13186378e42 --- /dev/null +++ b/src/coreComponents/constitutive/contact/FrictionBase.hpp @@ -0,0 +1,167 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 FrictionBase.hpp + */ + +#ifndef GEOS_CONSTITUTIVE_CONTACT_FRICTIONBASE_HPP_ +#define GEOS_CONSTITUTIVE_CONTACT_FRICTIONBASE_HPP_ + +#include "constitutive/ConstitutiveBase.hpp" +#include "functions/TableFunction.hpp" +#include "physicsSolvers/contact/ContactFields.hpp" + + +namespace geos +{ + +namespace constitutive +{ + +/** + * @class FrictionBaseUpdates + * + * This class is used for in-kernel contact relation updates + */ +class FrictionBaseUpdates +{ +public: + + FrictionBaseUpdates( real64 const & displacementJumpThreshold ) + : m_displacementJumpThreshold( displacementJumpThreshold ) + {} + + /// Default copy constructor + FrictionBaseUpdates( FrictionBaseUpdates const & ) = default; + + /// Default move constructor + FrictionBaseUpdates( FrictionBaseUpdates && ) = default; + + /// Deleted default constructor + FrictionBaseUpdates() = default; + + /// Deleted copy assignment operator + FrictionBaseUpdates & operator=( FrictionBaseUpdates const & ) = delete; + + /// Deleted move assignment operator + FrictionBaseUpdates & operator=( FrictionBaseUpdates && ) = delete; + + /** + * @brief Evaluate the traction vector and its derivatives wrt to pressure and jump + * @param[in] dispJump the displacement jump + * @param[in] fractureState the fracture state + * @param[out] tractionVector the traction vector + * @param[out] dTractionVector_dJump the derivative of the traction vector wrt displacement jump + */ + GEOS_HOST_DEVICE + inline + virtual void computeShearTraction( localIndex const k, + arraySlice1d< real64 const > const & oldDispJump, + arraySlice1d< real64 const > const & dispJump, + integer const & fractureState, + arraySlice1d< real64 > const & tractionVector, + arraySlice2d< real64 > const & dTractionVector_dJump ) const + {GEOS_UNUSED_VAR( k, oldDispJump, dispJump, tractionVector, dTractionVector_dJump, fractureState );} + + /** + * @brief Evaluate the traction vector and its derivatives wrt to pressure and jump + * @param[in] dispJump the displacement jump + * @param[in] tractionVector the traction vector + * @param[out] fractureState the fracture state + */ + GEOS_HOST_DEVICE + inline + virtual void updateFractureState( localIndex const k, + arraySlice1d< real64 const > const & dispJump, + arraySlice1d< real64 const > const & tractionVector, + integer & fractureState ) const + { GEOS_UNUSED_VAR( k, dispJump, tractionVector, fractureState ); } + + + + /** + * @brief Evaluate the limit tangential traction norm and return the derivative wrt normal traction + * @param[in] normalTraction the normal traction + * @param[out] dLimitTangentialTractionNorm_dTraction the derivative of the limit tangential traction norm wrt normal traction + * @return the limit tangential traction norm + */ + GEOS_HOST_DEVICE + inline + virtual real64 computeLimitTangentialTractionNorm( real64 const & normalTraction, + real64 & dLimitTangentialTractionNorm_dTraction ) const + { GEOS_UNUSED_VAR( normalTraction, dLimitTangentialTractionNorm_dTraction ); return 0; }; + +protected: + + /// A threshold valued to determine whether a fracture is open or not. + real64 m_displacementJumpThreshold; + +}; + + +/** + * @class FrictionBase + * + * This class serves as the interface for implementing contact enforcement constitutive relations. + * This does not include the actual enforcement algorithm, but only the constitutive relations that + * govern the behavior of the contact. So things like penalty, or friction, or kinematic constraint. + */ +class FrictionBase : public ConstitutiveBase +{ +public: + + /** + * @brief The standard data repository constructor + * @param name The name of the relation in the data repository + * @param parent The name of the parent Group that holds this relation object. + */ + FrictionBase( string const & name, + Group * const parent ); + + /** + * @brief default destructor + */ + virtual ~FrictionBase() override; + + /// Type of kernel wrapper for in-kernel update + using KernelWrapper = FrictionBaseUpdates; + + /** + * @brief Create an update kernel wrapper. + * @return the wrapper + */ + KernelWrapper createKernelWrapper() const; + + /** + * @struct Structure to hold scoped key names + */ + struct viewKeyStruct : public ConstitutiveBase::viewKeyStruct + { + /// string/key for the displacement jump threshold value + static constexpr char const * displacementJumpThresholdString() { return "displacementJumpThreshold"; } + }; + +protected: + + /// A threshold valued to determine whether a fracture is open or not. + real64 m_displacementJumpThreshold; + +}; + +} /* namespace constitutive */ + +} /* namespace geos */ + +#endif /* GEOS_CONSTITUTIVE_CONTACT_FRICTIONBASE_HPP_ */ diff --git a/src/coreComponents/constitutive/contact/ContactSelector.hpp b/src/coreComponents/constitutive/contact/FrictionSelector.hpp similarity index 68% rename from src/coreComponents/constitutive/contact/ContactSelector.hpp rename to src/coreComponents/constitutive/contact/FrictionSelector.hpp index e067ddfc90b..70f510eb0a7 100644 --- a/src/coreComponents/constitutive/contact/ContactSelector.hpp +++ b/src/coreComponents/constitutive/contact/FrictionSelector.hpp @@ -6,7 +6,7 @@ * Copyright (c) 2018-2024 Total, S.A * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University * Copyright (c) 2018-2024 Chevron - * Copyright (c) 2019- GEOS/GEOSX Contributors + * Copyright (c) 2019- GEOS/GEOSX Contributors * All rights reserved * * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. @@ -14,14 +14,14 @@ */ /** - * @file ContactSelector.hpp + * @file FrictionSelector.hpp */ #ifndef GEOS_CONSTITUTIVE_CONTACT_CONTACTSELECTOR_HPP_ #define GEOS_CONSTITUTIVE_CONTACT_CONTACTSELECTOR_HPP_ #include "constitutive/ConstitutivePassThruHandler.hpp" -#include "constitutive/contact/CoulombContact.hpp" +#include "constitutive/contact/CoulombFriction.hpp" #include "constitutive/contact/FrictionlessContact.hpp" namespace geos @@ -31,19 +31,19 @@ namespace constitutive { template< typename LAMBDA > -void constitutiveUpdatePassThru( ContactBase const & contact, +void constitutiveUpdatePassThru( FrictionBase const & contact, LAMBDA && lambda ) { - ConstitutivePassThruHandler< CoulombContact, - FrictionlessContact >::execute( contact, std::forward< LAMBDA >( lambda ) ); + ConstitutivePassThruHandler< FrictionlessContact, + CoulombFriction >::execute( contact, std::forward< LAMBDA >( lambda ) ); } template< typename LAMBDA > -void constitutiveUpdatePassThru( ContactBase & contact, +void constitutiveUpdatePassThru( FrictionBase & contact, LAMBDA && lambda ) { - ConstitutivePassThruHandler< CoulombContact, - FrictionlessContact >::execute( contact, std::forward< LAMBDA >( lambda ) ); + ConstitutivePassThruHandler< FrictionlessContact, + CoulombFriction >::execute( contact, std::forward< LAMBDA >( lambda ) ); } } /* namespace constitutive */ diff --git a/src/coreComponents/constitutive/contact/FrictionlessContact.cpp b/src/coreComponents/constitutive/contact/FrictionlessContact.cpp index 5a30413f633..a74b36a76fb 100644 --- a/src/coreComponents/constitutive/contact/FrictionlessContact.cpp +++ b/src/coreComponents/constitutive/contact/FrictionlessContact.cpp @@ -29,24 +29,15 @@ namespace constitutive FrictionlessContact::FrictionlessContact( string const & name, Group * const parent ): - ContactBase( name, parent ) + FrictionBase( name, parent ) {} FrictionlessContact::~FrictionlessContact() {} -void FrictionlessContact::allocateConstitutiveData( Group & parent, - localIndex const numConstitutivePointsPerParentIndex ) -{ - ContactBase::allocateConstitutiveData( parent, numConstitutivePointsPerParentIndex ); -} - FrictionlessContactUpdates FrictionlessContact::createKernelWrapper() const { - return FrictionlessContactUpdates( m_penaltyStiffness, - m_shearStiffness, - m_displacementJumpThreshold, - *m_apertureTable ); + return FrictionlessContactUpdates( m_displacementJumpThreshold ); } REGISTER_CATALOG_ENTRY( ConstitutiveBase, FrictionlessContact, string const &, Group * const ) diff --git a/src/coreComponents/constitutive/contact/FrictionlessContact.hpp b/src/coreComponents/constitutive/contact/FrictionlessContact.hpp index 2b99908609e..81aeea036d3 100644 --- a/src/coreComponents/constitutive/contact/FrictionlessContact.hpp +++ b/src/coreComponents/constitutive/contact/FrictionlessContact.hpp @@ -20,7 +20,7 @@ #ifndef GEOS_CONSTITUTIVE_CONTACT_FRICTIONLESSCONTACT_HPP_ #define GEOS_CONSTITUTIVE_CONTACT_FRICTIONLESSCONTACT_HPP_ -#include "constitutive/contact/ContactBase.hpp" +#include "constitutive/contact/FrictionBase.hpp" namespace geos { @@ -33,15 +33,12 @@ namespace constitutive * * This class is used for in-kernel contact relation updates */ -class FrictionlessContactUpdates : public ContactBaseUpdates +class FrictionlessContactUpdates : public FrictionBaseUpdates { public: - FrictionlessContactUpdates( real64 const & penaltyStiffness, - real64 const & shearStiffness, - real64 const & displacementJumpThreshold, - TableFunction const & apertureTable ) - : ContactBaseUpdates( penaltyStiffness, shearStiffness, displacementJumpThreshold, apertureTable ) + FrictionlessContactUpdates( real64 const & displacementJumpThreshold ) + : FrictionBaseUpdates( displacementJumpThreshold ) {} /// Default copy constructor @@ -59,16 +56,6 @@ class FrictionlessContactUpdates : public ContactBaseUpdates /// Deleted move assignment operator FrictionlessContactUpdates & operator=( FrictionlessContactUpdates && ) = delete; - GEOS_HOST_DEVICE - inline - virtual void computeTraction( localIndex const k, - arraySlice1d< real64 const > const & oldDispJump, - arraySlice1d< real64 const > const & dispJump, - integer const & fractureState, - arraySlice1d< real64 > const & tractionVector, - arraySlice2d< real64 > const & dTractionVector_dJump ) const override final; - - GEOS_HOST_DEVICE inline virtual void updateFractureState( localIndex const k, @@ -100,7 +87,7 @@ class FrictionlessContactUpdates : public ContactBaseUpdates * This does not include the actual enforcement algorithm, but only the constitutive relations that * govern the behavior of the contact. So things like penalty, or friction, or kinematic constraint. */ -class FrictionlessContact : public ContactBase +class FrictionlessContact : public FrictionBase { public: @@ -124,9 +111,6 @@ class FrictionlessContact : public ContactBase virtual string getCatalogName() const override { return catalogName(); } - virtual void allocateConstitutiveData( dataRepository::Group & parent, - localIndex const numConstitutivePointsPerParentIndex ) override; - /// Type of kernel wrapper for in-kernel update using KernelWrapper = FrictionlessContactUpdates; @@ -146,25 +130,6 @@ class FrictionlessContact : public ContactBase }; -GEOS_HOST_DEVICE -inline void FrictionlessContactUpdates::computeTraction( localIndex const k, - arraySlice1d< real64 const > const & oldDispJump, - arraySlice1d< real64 const > const & dispJump, - integer const & fractureState, - arraySlice1d< real64 > const & tractionVector, - arraySlice2d< real64 > const & dTractionVector_dJump ) const -{ - GEOS_UNUSED_VAR( k, oldDispJump ); - - bool const isOpen = fractureState == fields::contact::FractureState::Open; - - tractionVector[0] = isOpen ? 0.0 : m_penaltyStiffness * dispJump[0]; - tractionVector[1] = 0.0; - tractionVector[2] = 0.0; - - LvArray::forValuesInSlice( dTractionVector_dJump, []( real64 & val ){ val = 0.0; } ); - dTractionVector_dJump( 0, 0 ) = isOpen ? 0.0 : m_penaltyStiffness; -} GEOS_HOST_DEVICE inline void FrictionlessContactUpdates::updateFractureState( localIndex const k, diff --git a/src/coreComponents/constitutive/contact/HydraulicApertureBase.cpp b/src/coreComponents/constitutive/contact/HydraulicApertureBase.cpp new file mode 100644 index 00000000000..81ca7a55097 --- /dev/null +++ b/src/coreComponents/constitutive/contact/HydraulicApertureBase.cpp @@ -0,0 +1,48 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 HydraulicApertureBase.cpp + */ + + +#include "HydraulicApertureBase.hpp" + + +namespace geos +{ + +namespace constitutive +{ + +HydraulicApertureBase::HydraulicApertureBase( string const & name, + Group * const parent ): + ConstitutiveBase( name, parent ), + m_aperture0( 0.0 ) +{ + /// TODO: must become a required parameter. + registerWrapper( viewKeyStruct::apertureZeroString(), &m_aperture0 ). + setInputFlag( dataRepository::InputFlags::OPTIONAL ). + setApplyDefaultValue( 1e-6 ). + setDescription( "Reference hydraulic aperture. It is the aperture at zero normal stress." ); +} + +HydraulicApertureBase::~HydraulicApertureBase() +{} + + + +} /* namespace constitutive */ + +} /* namespace geos */ diff --git a/src/coreComponents/constitutive/contact/HydraulicApertureBase.hpp b/src/coreComponents/constitutive/contact/HydraulicApertureBase.hpp new file mode 100644 index 00000000000..dab7b35957d --- /dev/null +++ b/src/coreComponents/constitutive/contact/HydraulicApertureBase.hpp @@ -0,0 +1,73 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 HydraulicApertureBase.hpp + */ + +#ifndef GEOS_CONSTITUTIVE_CONTACT_HYDRAULICAPERTUREBASE_HPP_ +#define GEOS_CONSTITUTIVE_CONTACT_HYDRAULICAPERTUREBASE_HPP_ + +#include "constitutive/ConstitutiveBase.hpp" +#include "functions/TableFunction.hpp" +#include "physicsSolvers/contact/ContactFields.hpp" + + +namespace geos +{ + +namespace constitutive +{ + +/** + * @class HydraulicApertureBase + * + * This class serves as the interface for implementing contact enforcement constitutive relations. + * This does not include the actual enforcement algorithm, but only the constitutive relations that + * govern the behavior of the contact. So things like penalty, or friction, or kinematic constraint. + */ +class HydraulicApertureBase : public ConstitutiveBase +{ +public: + + /** + * @brief The standard data repository constructor + * @param name The name of the relation in the data repository + * @param parent The name of the parent Group that holds this relation object. + */ + HydraulicApertureBase( string const & name, + Group * const parent ); + + /** + * @brief default destructor + */ + virtual ~HydraulicApertureBase() override; + +protected: + + struct viewKeyStruct : public ConstitutiveBase::viewKeyStruct + { + /// string/key for aperture under zero normal stress + static constexpr char const * apertureZeroString() { return "referenceAperture"; } + }; + + /// Reference hydraulic aperture. Aperture at zero normal stress + real64 m_aperture0; /// TODO: this will replace what is currently called defaultAperture. +}; + +} /* namespace constitutive */ + +} /* namespace geos */ + +#endif /* GEOS_CONSTITUTIVE_CONTACT_HYDRAULICAPERTURETABLE_HPP_ */ diff --git a/src/coreComponents/constitutive/contact/HydraulicApertureRelationSelector.hpp b/src/coreComponents/constitutive/contact/HydraulicApertureRelationSelector.hpp new file mode 100644 index 00000000000..0d32794c1eb --- /dev/null +++ b/src/coreComponents/constitutive/contact/HydraulicApertureRelationSelector.hpp @@ -0,0 +1,52 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 FrictionSelector.hpp + */ + +#ifndef GEOS_CONSTITUTIVE_CONTACT_CONTACTSELECTOR_HPP_ +#define GEOS_CONSTITUTIVE_CONTACT_CONTACTSELECTOR_HPP_ + +#include "constitutive/ConstitutivePassThruHandler.hpp" +#include "constitutive/contact/HydraulicApertureTable.hpp" +#include "constitutive/contact/BartonBandis.hpp" + +namespace geos +{ + +namespace constitutive +{ + +template< typename LAMBDA > +void constitutiveUpdatePassThru( HydraulicApertureBase const & contact, + LAMBDA && lambda ) +{ + ConstitutivePassThruHandler< HydraulicApertureTable, + BartonBandis >::execute( contact, std::forward< LAMBDA >( lambda ) ); +} + +template< typename LAMBDA > +void constitutiveUpdatePassThru( HydraulicApertureBase & contact, + LAMBDA && lambda ) +{ + ConstitutivePassThruHandler< HydraulicApertureTable, + BartonBandis >::execute( contact, std::forward< LAMBDA >( lambda ) ); +} + +} /* namespace constitutive */ + +} /* namespace geos */ + +#endif // GEOS_CONSTITUTIVE_CONTACT_CONTACTSELECTOR_HPP_ diff --git a/src/coreComponents/constitutive/contact/ContactBase.cpp b/src/coreComponents/constitutive/contact/HydraulicApertureTable.cpp similarity index 78% rename from src/coreComponents/constitutive/contact/ContactBase.cpp rename to src/coreComponents/constitutive/contact/HydraulicApertureTable.cpp index fa4de0fb776..60c3f0ab807 100644 --- a/src/coreComponents/constitutive/contact/ContactBase.cpp +++ b/src/coreComponents/constitutive/contact/HydraulicApertureTable.cpp @@ -14,10 +14,10 @@ */ /** - * @file ContactBase.cpp + * @file HydraulicApertureTable.cpp */ -#include "ContactBase.hpp" +#include "HydraulicApertureTable.hpp" #include "functions/FunctionManager.hpp" #include "functions/TableFunction.hpp" @@ -29,19 +29,11 @@ using namespace dataRepository; namespace constitutive { -ContactBase::ContactBase( string const & name, - Group * const parent ): - ConstitutiveBase( name, parent ), +HydraulicApertureTable::HydraulicApertureTable( string const & name, + Group * const parent ): + HydraulicApertureBase( name, parent ), m_apertureTable( nullptr ) { - registerWrapper( viewKeyStruct::penaltyStiffnessString(), &m_penaltyStiffness ). - setInputFlag( InputFlags::OPTIONAL ). - setDescription( "Value of the penetration penalty stiffness. Units of Pressure/length" ); - - registerWrapper( viewKeyStruct::shearStiffnessString(), &m_shearStiffness ). - setInputFlag( InputFlags::OPTIONAL ). - setDescription( "Value of the shear elastic stiffness. Units of Pressure/length" ); - registerWrapper( viewKeyStruct::apertureToleranceString(), &m_apertureTolerance ). setApplyDefaultValue( 1.0e-9 ). setInputFlag( InputFlags::OPTIONAL ). @@ -52,23 +44,18 @@ ContactBase::ContactBase( string const & name, "to smooth out highly nonlinear behavior associated with 1/0 in addition to avoiding the " "1/0 error." ); - registerWrapper( viewKeyStruct::displacementJumpThresholdString(), &m_displacementJumpThreshold ). - setApplyDefaultValue( std::numeric_limits< real64 >::epsilon() ). - setInputFlag( InputFlags::OPTIONAL ). - setDescription( "A threshold valued to determine whether a fracture is open or not." ); - - registerWrapper( viewKeyStruct::apertureTableNameString(), &m_apertureTableName ). setRTTypeName( rtTypes::CustomTypes::groupNameRef ). setInputFlag( InputFlags::REQUIRED ). setDescription( "Name of the aperture table" ); } -ContactBase::~ContactBase() +HydraulicApertureTable::~HydraulicApertureTable() {} -void ContactBase::postInputInitialization() + +void HydraulicApertureTable::postInputInitialization() { GEOS_THROW_IF( m_apertureTableName.empty(), @@ -76,12 +63,9 @@ void ContactBase::postInputInitialization() } -void ContactBase::initializePreSubGroups() -{} - -void ContactBase::allocateConstitutiveData( Group & parent, - localIndex const numConstitutivePointsPerParentIndex ) +void HydraulicApertureTable::allocateConstitutiveData( Group & parent, + localIndex const numConstitutivePointsPerParentIndex ) { ConstitutiveBase::allocateConstitutiveData( parent, numConstitutivePointsPerParentIndex ); @@ -133,7 +117,7 @@ void ContactBase::allocateConstitutiveData( Group & parent, } -void ContactBase::validateApertureTable( TableFunction const & apertureTable ) const +void HydraulicApertureTable::validateApertureTable( TableFunction const & apertureTable ) const { ArrayOfArraysView< real64 const > const coords = apertureTable.getCoordinates(); arrayView1d< real64 const > const & hydraulicApertureValues = apertureTable.getValues(); @@ -163,14 +147,13 @@ void ContactBase::validateApertureTable( TableFunction const & apertureTable ) c -ContactBaseUpdates ContactBase::createKernelWrapper() const +HydraulicApertureTableUpdates HydraulicApertureTable::createKernelWrapper() const { - return ContactBaseUpdates( m_penaltyStiffness, - m_shearStiffness, - m_displacementJumpThreshold, - *m_apertureTable ); + return HydraulicApertureTableUpdates( *m_apertureTable ); } +REGISTER_CATALOG_ENTRY( ConstitutiveBase, HydraulicApertureTable, string const &, Group * const ) + } /* end namespace constitutive */ } /* end namespace geos */ diff --git a/src/coreComponents/constitutive/contact/HydraulicApertureTable.hpp b/src/coreComponents/constitutive/contact/HydraulicApertureTable.hpp new file mode 100644 index 00000000000..c1e9c47c1ce --- /dev/null +++ b/src/coreComponents/constitutive/contact/HydraulicApertureTable.hpp @@ -0,0 +1,170 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file HydraulicApertureTable.hpp + */ + +#ifndef GEOS_CONSTITUTIVE_CONTACT_HYDRAULICAPERTURETABLE_HPP_ +#define GEOS_CONSTITUTIVE_CONTACT_HYDRAULICAPERTURETABLE_HPP_ + +#include "constitutive/contact/HydraulicApertureBase.hpp" +#include "functions/TableFunction.hpp" + + +namespace geos +{ + +namespace constitutive +{ + +/** + * @class HydraulicApertureTableUpdates + * + * This class is used for in-kernel contact relation updates + */ +class HydraulicApertureTableUpdates +{ +public: + + HydraulicApertureTableUpdates( TableFunction const & apertureTable ) + : m_apertureTable( apertureTable.createKernelWrapper() ) + {} + + /// Default copy constructor + HydraulicApertureTableUpdates( HydraulicApertureTableUpdates const & ) = default; + + /// Default move constructor + HydraulicApertureTableUpdates( HydraulicApertureTableUpdates && ) = default; + + /// Deleted default constructor + HydraulicApertureTableUpdates() = default; + + /// Deleted copy assignment operator + HydraulicApertureTableUpdates & operator=( HydraulicApertureTableUpdates const & ) = delete; + + /// Deleted move assignment operator + HydraulicApertureTableUpdates & operator=( HydraulicApertureTableUpdates && ) = delete; + + /** + * @brief Evaluate the effective aperture, and its derivative wrt aperture + * @param[in] aperture the model aperture/gap + * @param[out] dHydraulicAperture_dAperture the derivative of the effective aperture wrt aperture + * @return The hydraulic aperture that is always > 0 + */ + GEOS_HOST_DEVICE + real64 computeHydraulicAperture( real64 const aperture, + real64 const normalTraction, + real64 & dHydraulicAperture_daperture, + real64 & dHydraulicAperture_dNormalStress ) const; + +protected: + + /// The aperture table function wrapper + TableFunction::KernelWrapper m_apertureTable; +}; + + +/** + * @class HydraulicApertureTable + * + * This class serves as the interface for implementing contact enforcement constitutive relations. + * This does not include the actual enforcement algorithm, but only the constitutive relations that + * govern the behavior of the contact. So things like penalty, or friction, or kinematic constraint. + */ +class HydraulicApertureTable : public HydraulicApertureBase +{ +public: + + /** + * @brief The standard data repository constructor + * @param name The name of the relation in the data repository + * @param parent The name of the parent Group that holds this relation object. + */ + HydraulicApertureTable( string const & name, + Group * const parent ); + + /** + * @brief default destructor + */ + virtual ~HydraulicApertureTable() override; + + static string catalogName() { return "HydraulicApertureTable"; } + + virtual string getCatalogName() const override { return catalogName(); } + + virtual void allocateConstitutiveData( dataRepository::Group & parent, + localIndex const numConstitutivePointsPerParentIndex ) override final; + + + + /// Type of kernel wrapper for in-kernel update + using KernelWrapper = HydraulicApertureTableUpdates; + + /** + * @brief Create an update kernel wrapper. + * @return the wrapper + */ + KernelWrapper createKernelWrapper() const; + + /** + * @struct Structure to hold scoped key names + */ + struct viewKeyStruct : public ConstitutiveBase::viewKeyStruct + { + /// string/key for aperture tolerance + static constexpr char const * apertureToleranceString() { return "apertureTolerance"; } + + /// string/key for aperture table name + static constexpr char const * apertureTableNameString() { return "apertureTableName"; } + }; + + +protected: + + virtual void postInputInitialization() override; + + /** + * @brief Validate the values provided in the aperture table + * @param[in] apertureTable the effective aperture vs aperture table + */ + void validateApertureTable( TableFunction const & apertureTable ) const; + + /// The aperture tolerance to avoid floating point errors in expressions involving aperture + real64 m_apertureTolerance; + + /// The name of the aperture table, if any + string m_apertureTableName; + + /// Pointer to the function that limits the model aperture to a physically admissible value. + TableFunction const * m_apertureTable; +}; + +GEOS_HOST_DEVICE +GEOS_FORCE_INLINE +real64 HydraulicApertureTableUpdates::computeHydraulicAperture( real64 const aperture, + real64 const normalTraction, + real64 & dHydraulicAperture_dAperture, + real64 & dHydraulicAperture_dNormalStress ) const +{ + GEOS_UNUSED_VAR( normalTraction, dHydraulicAperture_dNormalStress ); + return m_apertureTable.compute( &aperture, &dHydraulicAperture_dAperture ); +} + +} /* namespace constitutive */ + +} /* namespace geos */ + +#endif /* GEOS_CONSTITUTIVE_CONTACT_HYDRAULICAPERTURETABLE_HPP_ */ diff --git a/src/coreComponents/constitutive/contact/deprecated/ApertureTableContact.cpp b/src/coreComponents/constitutive/contact/deprecated/ApertureTableContact.cpp deleted file mode 100644 index 3f6c6ba15a5..00000000000 --- a/src/coreComponents/constitutive/contact/deprecated/ApertureTableContact.cpp +++ /dev/null @@ -1,132 +0,0 @@ -/* - * ------------------------------------------------------------------------------------------------------------ - * SPDX-License-Identifier: LGPL-2.1-only - * - * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC - * Copyright (c) 2018-2024 Total, S.A - * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University - * Copyright (c) 2018-2024 Chevron - * Copyright (c) 2019- GEOS/GEOSX Contributors - * All rights reserved - * - * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. - * ------------------------------------------------------------------------------------------------------------ - */ - -/** - * @file ApertureTableContact.cpp - */ - -#include "../deprecated/ApertureTableContact.hpp" - -#include "functions/FunctionManager.hpp" -#include "functions/TableFunction.hpp" - -namespace geos -{ - -using namespace dataRepository; - -namespace constitutive -{ - -ApertureTableContact::ApertureTableContact( string const & name, - Group * const parent ) - : ContactBase( name, parent ), - m_apertureTolerance( 1.0e-99 ), - m_apertureTable( nullptr ) -{ - registerWrapper( viewKeyStruct::apertureToleranceString(), &m_apertureTolerance ). - setApplyDefaultValue( 1.0e-9 ). - setInputFlag( InputFlags::OPTIONAL ). - setDescription( "Value to be used to avoid floating point errors in expressions involving aperture. " - "For example in the case of dividing by the actual aperture (not the effective aperture " - "that results from the aperture function) this value may be used to avoid the 1/0 error. " - "Note that this value may have some physical significance in its usage, as it may be used " - "to smooth out highly nonlinear behavior associated with 1/0 in addition to avoiding the " - "1/0 error." ); - - registerWrapper( viewKeyStruct::apertureTableNameString(), &m_apertureTableName ). - setRTTypeName( rtTypes::CustomTypes::groupNameRef ). - setInputFlag( InputFlags::REQUIRED ). - setDescription( "Name of the aperture table" ); -} - -ApertureTableContact::~ApertureTableContact() -{} - -void ApertureTableContact::postInputInitialization() -{ - FunctionManager const & functionManager = FunctionManager::getInstance(); - - GEOS_THROW_IF( m_apertureTableName.empty(), - getFullName() << ": the aperture table name " << m_apertureTableName << " is empty", - InputError ); - - GEOS_THROW_IF( !functionManager.hasGroup( m_apertureTableName ), - getFullName() << ": the aperture table named " << m_apertureTableName << " could not be found", - InputError ); -} - -void ApertureTableContact::initializePreSubGroups() -{ - FunctionManager & functionManager = FunctionManager::getInstance(); - TableFunction & apertureTable = functionManager.getGroup< TableFunction >( m_apertureTableName ); - validateApertureTable( apertureTable ); - - ArrayOfArraysView< real64 > coords = apertureTable.getCoordinates(); - arraySlice1d< real64 const > apertureValues = coords[0]; - array1d< real64 > & effectiveApertureValues = apertureTable.getValues(); - - localIndex const n = apertureValues.size()-1; - real64 const slope = ( effectiveApertureValues[n] - effectiveApertureValues[n-1] ) / ( apertureValues[n] - apertureValues[n-1] ); - real64 const apertureTransition = ( effectiveApertureValues[n] - slope * apertureValues[n] ) / ( 1.0 - slope ); - - coords.emplaceBack( 0, apertureTransition ); - effectiveApertureValues.emplace_back( apertureTransition ); - coords.emplaceBack( 0, apertureTransition*10e9 ); - effectiveApertureValues.emplace_back( apertureTransition*10e9 ); - apertureTable.reInitializeFunction(); - - m_apertureTable = &apertureTable; -} - -void ApertureTableContact::validateApertureTable( TableFunction const & apertureTable ) const -{ - ArrayOfArraysView< real64 const > const coords = apertureTable.getCoordinates(); - arrayView1d< real64 const > const & effectiveApertureValues = apertureTable.getValues(); - - GEOS_THROW_IF( coords.size() > 1, - getFullName() << ": Aperture limiter table cannot be greater than a 1D table.", - InputError ); - - arraySlice1d< real64 const > apertureValues = coords[0]; - localIndex const size = apertureValues.size(); - - GEOS_THROW_IF( coords( 0, size-1 ) > 0.0 || coords( 0, size-1 ) < 0.0, - getFullName() << ": Invalid aperture limiter table. Last coordinate must be zero!", - InputError ); - - GEOS_THROW_IF( apertureValues.size() < 2, - getFullName() << ": Invalid aperture limiter table. Must have more than two points specified", - InputError ); - - localIndex const n = apertureValues.size()-1; - real64 const slope = ( effectiveApertureValues[n] - effectiveApertureValues[n-1] ) / ( apertureValues[n] - apertureValues[n-1] ); - - GEOS_THROW_IF( slope >= 1.0, - getFullName() << ": Invalid aperture table. The slope of the last two points >= 1 is invalid.", - InputError ); -} - -ApertureTableContactUpdates ApertureTableContact::createKernelWrapper() const -{ - return ApertureTableContactUpdates( m_penaltyStiffness, - *m_apertureTable ); -} - -REGISTER_CATALOG_ENTRY( ConstitutiveBase, ApertureTableContact, string const &, Group * const ) - -} /* namespace constitutive */ - -} /* namespace geos */ diff --git a/src/coreComponents/constitutive/contact/deprecated/ApertureTableContact.hpp b/src/coreComponents/constitutive/contact/deprecated/ApertureTableContact.hpp deleted file mode 100644 index 5f82cdf00d2..00000000000 --- a/src/coreComponents/constitutive/contact/deprecated/ApertureTableContact.hpp +++ /dev/null @@ -1,178 +0,0 @@ -/* - * ------------------------------------------------------------------------------------------------------------ - * SPDX-License-Identifier: LGPL-2.1-only - * - * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC - * Copyright (c) 2018-2024 Total, S.A - * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University - * Copyright (c) 2018-2024 Chevron - * Copyright (c) 2019- GEOS/GEOSX Contributors - * All rights reserved - * - * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. - * ------------------------------------------------------------------------------------------------------------ - */ - -/** - * @file ApertureTableContact.hpp - */ - -#ifndef GEOS_CONSTITUTIVE_CONTACT_APERTURETABLECONTACT_HPP_ -#define GEOS_CONSTITUTIVE_CONTACT_APERTURETABLECONTACT_HPP_ - -#include "constitutive/contact/ContactBase.hpp" -#include "functions/TableFunction.hpp" - -namespace geos -{ - -namespace constitutive -{ - -/** - * @class ApertureTableContactUpdates - * - * This class is used for in-kernel contact relation updates - */ -class ApertureTableContactUpdates : public ContactBaseUpdates -{ -public: - - ApertureTableContactUpdates( real64 const & penaltyStiffness, - TableFunction const & apertureTable ) - : ContactBaseUpdates( penaltyStiffness ), - m_apertureTable( apertureTable.createKernelWrapper() ) - {} - - /// Default copy constructor - ApertureTableContactUpdates( ApertureTableContactUpdates const & ) = default; - - /// Default move constructor - ApertureTableContactUpdates( ApertureTableContactUpdates && ) = default; - - /// Deleted default constructor - ApertureTableContactUpdates() = delete; - - /// Deleted copy assignment operator - ApertureTableContactUpdates & operator=( ApertureTableContactUpdates const & ) = delete; - - /// Deleted move assignment operator - ApertureTableContactUpdates & operator=( ApertureTableContactUpdates && ) = delete; - - GEOS_HOST_DEVICE - inline - virtual real64 computeEffectiveAperture( real64 const aperture, - real64 & dEffectiveAperture_dAperture ) const; - - GEOS_HOST_DEVICE - inline - virtual void computeTraction( arraySlice1d< real64 const > const & dispJump, - arraySlice1d< real64 > const & tractionVector, - arraySlice2d< real64 > const & dTractionVector_dJump ) const; - - GEOS_HOST_DEVICE - inline - void addPressureToTraction( real64 const & pressure, - bool const isOpen, - arraySlice1d< real64 >const & tractionVector, - real64 & dTraction_dPressure ) const; - -private: - - /// The aperture table function wrapper - TableFunction::KernelWrapper m_apertureTable; - -}; - - -/** - * @class ApertureTableContact - */ -class ApertureTableContact : public ContactBase -{ -public: - - /** - * @brief The standard data repository constructor - * @param name The name of the relation in the data repository - * @param parent The name of the parent Group that holds this relation object. - */ - ApertureTableContact( string const & name, - Group * const parent ); - - /** - * @brief default destructor - */ - virtual ~ApertureTableContact() override; - - /** - * @brief Name that is used to register this a type of "ApertureTableContact" in the object catalog - * @return See description - */ - static string catalogName() { return "Contact"; } - - virtual string getCatalogName() const override { return catalogName(); } - - /** - * @brief accessor for aperture tolerance - * @return the aperture tolerance - */ - real64 apertureTolerance() const { return m_apertureTolerance; } - - /// Type of kernel wrapper for in-kernel update - using KernelWrapper = ApertureTableContactUpdates; - - /** - * @brief Create an update kernel wrapper. - * @return the wrapper - */ - KernelWrapper createKernelWrapper() const; - - /** - * @struct Structure to hold scoped key names - */ - struct viewKeyStruct : public ConstitutiveBase::viewKeyStruct - { - /// string/key for aperture tolerance - static constexpr char const * apertureToleranceString() { return "apertureTolerance"; } - - /// string/key for aperture table name - static constexpr char const * apertureTableNameString() { return "apertureTableName"; } - }; - -protected: - - virtual void postInputInitialization() override; - - virtual void initializePreSubGroups() override; - - /** - * @brief Validate the values provided in the aperture table - * @param[in] apertureTable the effective aperture vs aperture table - */ - void validateApertureTable( TableFunction const & apertureTable ) const; - - /// The aperture tolerance to avoid floating point errors in expressions involving aperture - real64 m_apertureTolerance; - - /// The name of the aperture table, if any - string m_apertureTableName; - - /// Pointer to the function that limits the model aperture to a physically admissible value. - TableFunction const * m_apertureTable; - -}; - -GEOS_HOST_DEVICE -real64 ApertureTableContactUpdates::computeEffectiveAperture( real64 const aperture, - real64 & dEffectiveAperture_dAperture ) const -{ - return m_apertureTable.compute( &aperture, &dEffectiveAperture_dAperture ); -} - - -} /* namespace constitutive */ - -} /* namespace geos */ - -#endif /* GEOS_CONSTITUTIVE_CONTACT_APERTURETABLECONTACT_HPP_ */ diff --git a/src/coreComponents/fileIO/silo/SiloFile.cpp b/src/coreComponents/fileIO/silo/SiloFile.cpp index 4abcb5894d4..68f3d7289eb 100644 --- a/src/coreComponents/fileIO/silo/SiloFile.cpp +++ b/src/coreComponents/fileIO/silo/SiloFile.cpp @@ -31,7 +31,7 @@ #include "constitutive/ConstitutiveManager.hpp" #include "constitutive/fluid/singlefluid/SingleFluidBase.hpp" #include "constitutive/fluid/multifluid/MultiFluidBase.hpp" -#include "constitutive/contact/ContactBase.hpp" +#include "constitutive/contact/FrictionBase.hpp" #include "constitutive/NullModel.hpp" #include "fileIO/Outputs/OutputUtilities.hpp" #include "mesh/DomainPartition.hpp" @@ -1468,7 +1468,7 @@ void SiloFile::writeElementMesh( ElementRegionBase const & elementRegion, localIndex const numFluids = regionFluidMaterialList.size(); string_array - fractureContactMaterialList = elementRegion.getConstitutiveNames< constitutive::ContactBase >(); + fractureContactMaterialList = elementRegion.getConstitutiveNames< constitutive::FrictionBase >(); localIndex const numContacts = fractureContactMaterialList.size(); diff --git a/src/coreComponents/physicsSolvers/contact/ContactSolverBase.cpp b/src/coreComponents/physicsSolvers/contact/ContactSolverBase.cpp index 2cef13dd221..7851dbdaa4d 100644 --- a/src/coreComponents/physicsSolvers/contact/ContactSolverBase.cpp +++ b/src/coreComponents/physicsSolvers/contact/ContactSolverBase.cpp @@ -20,14 +20,8 @@ #include "ContactSolverBase.hpp" #include "common/TimingMacros.hpp" -#include "constitutive/ConstitutiveManager.hpp" -#include "constitutive/contact/ContactSelector.hpp" -#include "constitutive/solid/ElasticIsotropic.hpp" -#include "finiteElement/elementFormulations/FiniteElementBase.hpp" -#include "linearAlgebra/utilities/LAIHelperFunctions.hpp" +#include "constitutive/contact/FrictionBase.hpp" #include "mesh/DomainPartition.hpp" -#include "fieldSpecification/FieldSpecificationManager.hpp" -#include "mesh/NodeManager.hpp" #include "mesh/SurfaceElementRegion.hpp" #include "physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.hpp" #include "common/GEOS_RAJA_Interface.hpp" @@ -244,15 +238,15 @@ void ContactSolverBase::setConstitutiveNamesCallSuper( ElementSubRegionBase & su } else if( dynamic_cast< SurfaceElementSubRegion * >( &subRegion ) ) { - subRegion.registerWrapper< string >( viewKeyStruct::contactRelationNameString() ). + subRegion.registerWrapper< string >( viewKeyStruct::frictionLawNameString() ). setPlotLevel( PlotLevel::NOPLOT ). setRestartFlags( RestartFlags::NO_WRITE ). setSizedFromParent( 0 ); - string & contactRelationName = subRegion.getReference< string >( viewKeyStruct::contactRelationNameString() ); - contactRelationName = SolverBase::getConstitutiveName< ContactBase >( subRegion ); - GEOS_ERROR_IF( contactRelationName.empty(), GEOS_FMT( "{}: ContactBase model not found on subregion {}", - getDataContext(), subRegion.getDataContext() ) ); + string & frictionLawName = subRegion.getReference< string >( viewKeyStruct::frictionLawNameString() ); + frictionLawName = SolverBase::getConstitutiveName< FrictionBase >( subRegion ); + GEOS_ERROR_IF( frictionLawName.empty(), GEOS_FMT( "{}: FrictionBase model not found on subregion {}", + getDataContext(), subRegion.getDataContext() ) ); } } diff --git a/src/coreComponents/physicsSolvers/contact/ContactSolverBase.hpp b/src/coreComponents/physicsSolvers/contact/ContactSolverBase.hpp index 1c4cf695ae6..d0d1b471ef3 100644 --- a/src/coreComponents/physicsSolvers/contact/ContactSolverBase.hpp +++ b/src/coreComponents/physicsSolvers/contact/ContactSolverBase.hpp @@ -54,6 +54,9 @@ class ContactSolverBase : public SolidMechanicsLagrangianFEM constexpr static char const * fractureStateString() { return "fractureState"; } constexpr static char const * oldFractureStateString() { return "oldFractureState"; } + + constexpr static char const * frictionLawNameString() { return "frictionLawName"; } + }; protected: diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernels.hpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernels.hpp index 9be74bf112f..b5e530db12f 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernels.hpp +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsEFEMKernels.hpp @@ -291,17 +291,18 @@ struct StateUpdateKernel /** * @brief Launch the kernel function doing fracture traction updates * @tparam POLICY the type of policy used in the kernel launch - * @tparam CONTACT_WRAPPER the type of contact wrapper doing the fracture traction updates + * @tparam FRICTION_WRAPPER the type of contact wrapper doing the fracture traction updates * @param[in] size the size of the subregion - * @param[in] contactWrapper the wrapper implementing the contact relationship + * @param[in] frictionWrapper the wrapper implementing the contact relationship * @param[in] jump the displacement jump * @param[out] fractureTraction the fracture traction * @param[out] dFractureTraction_dJump the derivative of the fracture traction wrt displacement jump */ - template< typename POLICY, typename CONTACT_WRAPPER > + template< typename POLICY, typename FRICTION_WRAPPER > static void launch( localIndex const size, - CONTACT_WRAPPER const & contactWrapper, + FRICTION_WRAPPER const & frictionWrapper, + real64 const contactPenaltyStiffness, arrayView2d< real64 const > const & oldJump, arrayView2d< real64 const > const & jump, arrayView2d< real64 > const & fractureTraction, @@ -311,10 +312,26 @@ struct StateUpdateKernel { forAll< POLICY >( size, [=] GEOS_HOST_DEVICE ( localIndex const k ) { - contactWrapper.computeTraction( k, oldJump[k], jump[k], - fractureState[k], - fractureTraction[k], - dFractureTraction_dJump[k] ); + // Initialize traction and derivatives to 0 + LvArray::forValuesInSlice( fractureTraction[k], []( real64 & val ){ val = 0.0; } ); + LvArray::forValuesInSlice( dFractureTraction_dJump[k], []( real64 & val ){ val = 0.0; } ); + + // If the fracture is open the traction is 0 and so are its derivatives so there is nothing to do + bool const isOpen = fractureState[k] == fields::contact::FractureState::Open; + + if( !isOpen ) + { + // normal component of the traction + fractureTraction[k][0] = contactPenaltyStiffness * jump[k][0]; + + // derivative of the normal component w.r.t. to the normal dispJump + dFractureTraction_dJump[k][0][0] = contactPenaltyStiffness; + + frictionWrapper.computeShearTraction( k, oldJump[k], jump[k], + fractureState[k], + fractureTraction[k], + dFractureTraction_dJump[k] ); + } slip[ k ] = LvArray::math::sqrt( LvArray::math::square( jump( k, 1 ) ) + LvArray::math::square( jump( k, 2 ) ) ); diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.cpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.cpp index 6e1653861c2..0d6af0ee41e 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.cpp +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.cpp @@ -22,7 +22,7 @@ #include "common/TimingMacros.hpp" #include "common/GEOS_RAJA_Interface.hpp" #include "constitutive/ConstitutiveManager.hpp" -#include "constitutive/contact/ContactSelector.hpp" +#include "constitutive/contact/FrictionSelector.hpp" #include "constitutive/solid/ElasticIsotropic.hpp" #include "fieldSpecification/FieldSpecificationManager.hpp" #include "finiteElement/elementFormulations/FiniteElementBase.hpp" @@ -51,6 +51,10 @@ SolidMechanicsEmbeddedFractures::SolidMechanicsEmbeddedFractures( const string & setInputFlag( InputFlags::OPTIONAL ). setApplyDefaultValue( 0 ). setDescription( "Defines whether to use static condensation or not." ); + + getWrapperBase( viewKeyStruct::contactPenaltyStiffnessString() ). + setInputFlag( InputFlags::REQUIRED ). + setDescription( "Value of the penetration penalty stiffness. Units of Pressure/length" ); } SolidMechanicsEmbeddedFractures::~SolidMechanicsEmbeddedFractures() @@ -718,8 +722,8 @@ void SolidMechanicsEmbeddedFractures::updateState( DomainPartition & domain ) { fractureRegion.forElementSubRegions< SurfaceElementSubRegion >( [&]( SurfaceElementSubRegion & subRegion ) { - string const & contactRelationName = subRegion.template getReference< string >( viewKeyStruct::contactRelationNameString() ); - ContactBase const & contact = getConstitutiveModel< ContactBase >( subRegion, contactRelationName ); + string const & frictionLawName = subRegion.template getReference< string >( viewKeyStruct::frictionLawNameString() ); + FrictionBase const & frictionLaw = getConstitutiveModel< FrictionBase >( subRegion, frictionLawName ); arrayView2d< real64 const > const & jump = subRegion.getField< contact::dispJump >(); @@ -733,14 +737,15 @@ void SolidMechanicsEmbeddedFractures::updateState( DomainPartition & domain ) arrayView1d< real64 > const & slip = subRegion.getField< fields::contact::slip >(); - constitutiveUpdatePassThru( contact, [&] ( auto & castedContact ) + constitutiveUpdatePassThru( frictionLaw, [&] ( auto & castedFrictionLaw ) { - using ContactType = TYPEOFREF( castedContact ); - typename ContactType::KernelWrapper contactWrapper = castedContact.createKernelWrapper(); + using FrictionType = TYPEOFREF( castedFrictionLaw ); + typename FrictionType::KernelWrapper frictionWrapper = castedFrictionLaw.createKernelWrapper(); solidMechanicsEFEMKernels::StateUpdateKernel:: launch< parallelDevicePolicy<> >( subRegion.size(), - contactWrapper, + frictionWrapper, + m_contactPenaltyStiffness, oldJump, jump, fractureTraction, @@ -765,13 +770,13 @@ bool SolidMechanicsEmbeddedFractures::updateConfiguration( DomainPartition & dom arrayView2d< real64 const > const & traction = subRegion.getField< fields::contact::traction >(); arrayView1d< integer > const & fractureState = subRegion.getField< fields::contact::fractureState >(); - string const & contactRelationName = subRegion.template getReference< string >( viewKeyStruct::contactRelationNameString() ); - ContactBase const & contact = getConstitutiveModel< ContactBase >( subRegion, contactRelationName ); + string const & frictionLawName = subRegion.template getReference< string >( viewKeyStruct::frictionLawNameString() ); + FrictionBase const & frictionLaw = getConstitutiveModel< FrictionBase >( subRegion, frictionLawName ); - constitutiveUpdatePassThru( contact, [&] ( auto & castedContact ) + constitutiveUpdatePassThru( frictionLaw, [&] ( auto & castedFrictionLaw ) { - using ContactType = TYPEOFREF( castedContact ); - typename ContactType::KernelWrapper contactWrapper = castedContact.createKernelWrapper(); + using FrictionType = TYPEOFREF( castedFrictionLaw ); + typename FrictionType::KernelWrapper frictionWrapper = castedFrictionLaw.createKernelWrapper(); RAJA::ReduceMin< parallelHostReduce, integer > checkActiveSetSub( 1 ); @@ -780,7 +785,7 @@ bool SolidMechanicsEmbeddedFractures::updateConfiguration( DomainPartition & dom if( ghostRank[kfe] < 0 ) { integer const originalFractureState = fractureState[kfe]; - contactWrapper.updateFractureState( kfe, dispJump[kfe], traction[kfe], fractureState[kfe] ); + frictionWrapper.updateFractureState( kfe, dispJump[kfe], traction[kfe], fractureState[kfe] ); checkActiveSetSub.min( compareFractureStates( originalFractureState, fractureState[kfe] ) ); } } ); diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.hpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.hpp index e4cf9d874b5..d601ccdf50d 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.hpp +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.hpp @@ -118,6 +118,8 @@ class SolidMechanicsEmbeddedFractures : public ContactSolverBase struct viewKeyStruct : ContactSolverBase::viewKeyStruct { constexpr static char const * useStaticCondensationString() { return "useStaticCondensation"; } + + constexpr static char const * contactPenaltyStiffnessString() { return "contactPenaltyStiffness"; } }; protected: @@ -135,6 +137,9 @@ class SolidMechanicsEmbeddedFractures : public ContactSolverBase /// decide whether to use static condensation or not integer m_useStaticCondensation; + // TODO: activate when solidMechanicsPenalty contact is used and this is removed from base solver. + // real64 m_contactPenaltyStiffness; + }; diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContact.cpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContact.cpp index d4d537ab405..75ac7e16f0e 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContact.cpp +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsLagrangeContact.cpp @@ -22,7 +22,7 @@ #include "common/TimingMacros.hpp" #include "constitutive/ConstitutiveManager.hpp" -#include "constitutive/contact/ContactSelector.hpp" +#include "constitutive/contact/FrictionSelector.hpp" #include "constitutive/fluid/singlefluid/SingleFluidBase.hpp" #include "finiteVolume/FiniteVolumeManager.hpp" #include "finiteVolume/FluxApproximationBase.hpp" @@ -1458,8 +1458,8 @@ void SolidMechanicsLagrangeContact:: [&]( localIndex const, FaceElementSubRegion const & subRegion ) { - string const & contactRelationName = subRegion.template getReference< string >( viewKeyStruct::contactRelationNameString() ); - ContactBase const & contact = getConstitutiveModel< ContactBase >( subRegion, contactRelationName ); + string const & frictionLawName = subRegion.template getReference< string >( viewKeyStruct::frictionLawNameString() ); + FrictionBase const & frictionLaw = getConstitutiveModel< FrictionBase >( subRegion, frictionLawName ); arrayView1d< globalIndex const > const & tracDofNumber = subRegion.getReference< globalIndex_array >( tracDofKey ); arrayView1d< integer const > const & ghostRank = subRegion.ghostRank(); @@ -1473,10 +1473,10 @@ void SolidMechanicsLagrangeContact:: arrayView2d< real64 const > const & previousDispJump = subRegion.getField< contact::oldDispJump >(); arrayView1d< real64 const > const & slidingTolerance = subRegion.getReference< array1d< real64 > >( viewKeyStruct::slidingToleranceString() ); - constitutiveUpdatePassThru( contact, [&] ( auto & castedContact ) + constitutiveUpdatePassThru( frictionLaw, [&] ( auto & castedFrictionLaw ) { - using ContactType = TYPEOFREF( castedContact ); - typename ContactType::KernelWrapper contactWrapper = castedContact.createKernelWrapper(); + using FrictionType = TYPEOFREF( castedFrictionLaw ); + typename FrictionType::KernelWrapper frictionWrapper = castedFrictionLaw.createKernelWrapper(); forAll< parallelHostPolicy >( subRegion.size(), [=] ( localIndex const kfe ) { @@ -1577,8 +1577,8 @@ void SolidMechanicsLagrangeContact:: } real64 dLimitTau_dNormalTraction = 0; - real64 const limitTau = contactWrapper.computeLimitTangentialTractionNorm( traction[kfe][0], - dLimitTau_dNormalTraction ); + real64 const limitTau = frictionWrapper.computeLimitTangentialTractionNorm( traction[kfe][0], + dLimitTau_dNormalTraction ); real64 sliding[ 2 ] = { dispJump[kfe][1] - previousDispJump[kfe][1], dispJump[kfe][2] - previousDispJump[kfe][2] }; real64 slidingNorm = sqrt( sliding[ 0 ]*sliding[ 0 ] + sliding[ 1 ]*sliding[ 1 ] ); @@ -2230,8 +2230,8 @@ bool SolidMechanicsLagrangeContact::updateConfiguration( DomainPartition & domai elemManager.forElementSubRegions< FaceElementSubRegion >( regionNames, [&]( localIndex const, FaceElementSubRegion & subRegion ) { - string const & contactRelationName = subRegion.template getReference< string >( viewKeyStruct::contactRelationNameString() ); - ContactBase const & contact = getConstitutiveModel< ContactBase >( subRegion, contactRelationName ); + string const & fricitonLawName = subRegion.template getReference< string >( viewKeyStruct::frictionLawNameString() ); + FrictionBase const & frictionLaw = getConstitutiveModel< FrictionBase >( subRegion, fricitonLawName ); arrayView1d< integer const > const & ghostRank = subRegion.ghostRank(); arrayView2d< real64 const > const & traction = subRegion.getField< contact::traction >(); @@ -2247,10 +2247,10 @@ bool SolidMechanicsLagrangeContact::updateConfiguration( DomainPartition & domai RAJA::ReduceSum< parallelHostReduce, real64 > changed( 0 ); RAJA::ReduceSum< parallelHostReduce, real64 > total( 0 ); - constitutiveUpdatePassThru( contact, [&] ( auto & castedContact ) + constitutiveUpdatePassThru( frictionLaw, [&] ( auto & castedFrictionLaw ) { - using ContactType = TYPEOFREF( castedContact ); - typename ContactType::KernelWrapper contactWrapper = castedContact.createKernelWrapper(); + using FrictionType = TYPEOFREF( castedFrictionLaw ); + typename FrictionType::KernelWrapper frictionWrapper = castedFrictionLaw.createKernelWrapper(); forAll< parallelHostPolicy >( subRegion.size(), [=] ( localIndex const kfe ) { @@ -2282,8 +2282,8 @@ bool SolidMechanicsLagrangeContact::updateConfiguration( DomainPartition & domai real64 dLimitTangentialTractionNorm_dTraction = 0.0; real64 const limitTau = - contactWrapper.computeLimitTangentialTractionNorm( traction[kfe][0], - dLimitTangentialTractionNorm_dTraction ); + frictionWrapper.computeLimitTangentialTractionNorm( traction[kfe][0], + dLimitTangentialTractionNorm_dTraction ); if( originalFractureState == FractureState::Stick && currentTau >= limitTau ) { diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsPenaltyContact.cpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsPenaltyContact.cpp new file mode 100644 index 00000000000..b635abb1b52 --- /dev/null +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsPenaltyContact.cpp @@ -0,0 +1,235 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 SolidMechanicsPenaltyContact.cpp + * + */ + +#include "SolidMechanicsPenaltyContact.hpp" + +#include "common/TimingMacros.hpp" +#include "constitutive/ConstitutiveManager.hpp" +#include "constitutive/contact/FrictionSelector.hpp" + + +#if defined( __INTEL_COMPILER ) +#pragma GCC optimize "O0" +#endif + +namespace geos +{ + +using namespace constitutive; +using namespace dataRepository; +using namespace fields; +using namespace finiteElement; + +SolidMechanicsPenaltyContact::SolidMechanicsPenaltyContact( const string & name, + Group * const parent ): + ContactSolverBase( name, parent ) +{ + registerWrapper( viewKeyStruct::contactPenaltyStiffnessString(), &m_contactPenaltyStiffness ). + setInputFlag( InputFlags::REQUIRED ). + setDescription( "Value of the penetration penalty stiffness. Units of Pressure/length" ); +} + +SolidMechanicsPenaltyContact::~SolidMechanicsPenaltyContact() +{ + // TODO Auto-generated destructor stub +} + +void SolidMechanicsPenaltyContact::setupSystem( DomainPartition & domain, + DofManager & dofManager, + CRSMatrix< real64, globalIndex > & localMatrix, + ParallelVector & rhs, + ParallelVector & solution, + bool const setSparsity ) +{ + GEOS_MARK_FUNCTION; + SolverBase::setupSystem( domain, dofManager, localMatrix, rhs, solution, false ); + + SparsityPattern< globalIndex > sparsityPattern( dofManager.numLocalDofs(), + dofManager.numGlobalDofs(), + 8*8*3*1.2 ); + + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + MeshLevel & mesh, + arrayView1d< string const > const & regionNames ) + { + NodeManager const & nodeManager = mesh.getNodeManager(); + arrayView1d< globalIndex const > const + dofNumber = nodeManager.getReference< globalIndex_array >( dofManager.getKey( solidMechanics::totalDisplacement::key() ) ); + + + ElementRegionManager const & elemManager = mesh.getElemManager(); + array1d< string > allFaceElementRegions; + elemManager.forElementRegions< SurfaceElementRegion >( [&]( SurfaceElementRegion const & elemRegion ) + { + allFaceElementRegions.emplace_back( elemRegion.getName() ); + } ); + + finiteElement:: + fillSparsity< FaceElementSubRegion, + solidMechanicsLagrangianFEMKernels::ImplicitSmallStrainQuasiStatic >( mesh, + allFaceElementRegions, + this->getDiscretizationName(), + dofNumber, + dofManager.rankOffset(), + sparsityPattern ); + + finiteElement::fillSparsity< CellElementSubRegion, + solidMechanicsLagrangianFEMKernels::ImplicitSmallStrainQuasiStatic >( mesh, + regionNames, + this->getDiscretizationName(), + dofNumber, + dofManager.rankOffset(), + sparsityPattern ); + + + } ); + + sparsityPattern.compress(); + localMatrix.assimilate< parallelDevicePolicy<> >( std::move( sparsityPattern ) ); +} + +void SolidMechanicsPenaltyContact::assembleSystem( real64 const time, + real64 const dt, + DomainPartition & domain, + DofManager const & dofManager, + CRSMatrixView< real64, globalIndex const > const & localMatrix, + arrayView1d< real64 > const & localRhs ) +{ + GEOS_MARK_FUNCTION; + + synchronizeFractureState( domain ); + + SolidMechanicsLagrangianFEM::assembleSystem( time, + dt, + domain, + dofManager, + localMatrix, + localRhs ); + + assembleContact( domain, dofManager, localMatrix, localRhs ); +} + +void SolidMechanicsPenaltyContact::assembleContact( DomainPartition & domain, + DofManager const & dofManager, + CRSMatrixView< real64, globalIndex const > const & localMatrix, + arrayView1d< real64 > const & localRhs ) +{ + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &, + MeshLevel & mesh, + arrayView1d< string const > const & ) + { + FaceManager const & faceManager = mesh.getFaceManager(); + NodeManager & nodeManager = mesh.getNodeManager(); + ElementRegionManager & elemManager = mesh.getElemManager(); + + solidMechanics::arrayViewConst2dLayoutTotalDisplacement const u = + nodeManager.getField< solidMechanics::totalDisplacement >(); + arrayView2d< real64 > const fc = nodeManager.getField< solidMechanics::contactForce >(); + fc.zero(); + + arrayView2d< real64 const > const faceNormal = faceManager.faceNormal(); + ArrayOfArraysView< localIndex const > const facesToNodes = faceManager.nodeList().toViewConst(); + + string const dofKey = dofManager.getKey( solidMechanics::totalDisplacement::key() ); + arrayView1d< globalIndex > const nodeDofNumber = nodeManager.getReference< globalIndex_array >( dofKey ); + globalIndex const rankOffset = dofManager.rankOffset(); + + // TODO: this bound may need to change + constexpr localIndex maxNodexPerFace = 4; + constexpr localIndex maxDofPerElem = maxNodexPerFace * 3 * 2; + + elemManager.forElementSubRegions< FaceElementSubRegion >( [&]( FaceElementSubRegion & subRegion ) + { + real64 const contactStiffness = m_contactPenaltyStiffness; + + arrayView1d< real64 > const area = subRegion.getElementArea(); + ArrayOfArraysView< localIndex const > const elemsToFaces = subRegion.faceList().toViewConst(); + + // TODO: use parallel policy? + forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const kfe ) + { + localIndex const kf0 = elemsToFaces[kfe][0], kf1 = elemsToFaces[kfe][1]; + real64 Nbar[ 3 ] = { faceNormal[kf0][0] - faceNormal[kf1][0], + faceNormal[kf0][1] - faceNormal[kf1][1], + faceNormal[kf0][2] - faceNormal[kf1][2] }; + + LvArray::tensorOps::normalize< 3 >( Nbar ); + + localIndex const numNodesPerFace=facesToNodes.sizeOfArray( kf0 ); + real64 const Ja = area[kfe] / numNodesPerFace; + + stackArray1d< globalIndex, maxDofPerElem > rowDOF( numNodesPerFace*3*2 ); + stackArray1d< real64, maxDofPerElem > nodeRHS( numNodesPerFace*3*2 ); + stackArray2d< real64, maxDofPerElem *maxDofPerElem > dRdP( numNodesPerFace*3*2, numNodesPerFace*3*2 ); + + for( localIndex a=0; a( gap, u[node0] ); + real64 const gapNormal = LvArray::tensorOps::AiBi< 3 >( gap, Nbar ); + + for( int i=0; i<3; ++i ) + { + rowDOF[3*a+i] = nodeDofNumber[node0]+i; + rowDOF[3*(numNodesPerFace + a)+i] = nodeDofNumber[node1]+i; + } + + if( gapNormal < 0 ) + { + LvArray::tensorOps::scale< 3 >( penaltyForce, -contactStiffness * gapNormal * Ja ); + for( int i=0; i<3; ++i ) + { + LvArray::tensorOps::subtract< 3 >( fc[node0], penaltyForce ); + LvArray::tensorOps::add< 3 >( fc[node1], penaltyForce ); + nodeRHS[3*a+i] -= penaltyForce[i]; + nodeRHS[3*(numNodesPerFace + a)+i] += penaltyForce[i]; + + dRdP( 3*a+i, 3*a+i ) -= contactStiffness * Ja * Nbar[i] * Nbar[i]; + dRdP( 3*a+i, 3*(numNodesPerFace + a)+i ) += contactStiffness * Ja * Nbar[i] * Nbar[i]; + dRdP( 3*(numNodesPerFace + a)+i, 3*a+i ) += contactStiffness * Ja * Nbar[i] * Nbar[i]; + dRdP( 3*(numNodesPerFace + a)+i, 3*(numNodesPerFace + a)+i ) -= contactStiffness * Ja * Nbar[i] * Nbar[i]; + } + } + } + + for( localIndex idof = 0; idof < numNodesPerFace*3*2; ++idof ) + { + localIndex const localRow = LvArray::integerConversion< localIndex >( rowDOF[idof] - rankOffset ); + + if( localRow >= 0 && localRow < localMatrix.numRows() ) + { + localMatrix.addToRowBinarySearchUnsorted< serialAtomic >( localRow, + rowDOF.data(), + dRdP[idof].dataIfContiguous(), + numNodesPerFace*3*2 ); + RAJA::atomicAdd( serialAtomic{}, &localRhs[localRow], nodeRHS[idof] ); + } + } + } ); + } ); + } ); +} + + +REGISTER_CATALOG_ENTRY( SolverBase, SolidMechanicsPenaltyContact, string const &, Group * const ) + +} /* namespace geos */ diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsPenaltyContact.hpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsPenaltyContact.hpp new file mode 100644 index 00000000000..d368fc15ebc --- /dev/null +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsPenaltyContact.hpp @@ -0,0 +1,92 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 SolidMechanicsPenaltyContact.hpp + * + */ + +#ifndef GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSPENALTYCONTACT_HPP_ +#define GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSPENALTYCONTACT_HPP_ + +#include "physicsSolvers/contact/ContactSolverBase.hpp" +#include "../../linearAlgebra/DofManager.hpp" +#include "../../common/DataTypes.hpp" + +namespace geos +{ + +class SolidMechanicsLagrangianFEM; + +class SolidMechanicsPenaltyContact : public ContactSolverBase +{ +public: + + SolidMechanicsPenaltyContact( const string & name, + Group * const parent ); + + ~SolidMechanicsPenaltyContact() override; + + /** + * @brief name of the node manager in the object catalog + * @return string that contains the catalog name to generate a new NodeManager object through the object catalog. + */ + static string catalogName() + { + return "SolidMechanicsPenaltyContact"; + } + /** + * @copydoc SolverBase::getCatalogName() + */ + string getCatalogName() const override { return catalogName(); } + + /// String used to form the solverName used to register single-physics solvers in CoupledSolver + static string coupledSolverAttributePrefix() { return "PenaltyContact"; } + + virtual void + setupSystem( DomainPartition & domain, + DofManager & dofManager, + CRSMatrix< real64, globalIndex > & localMatrix, + ParallelVector & rhs, + ParallelVector & solution, + bool const setSparsity = true ) override final; + + virtual void + assembleSystem( real64 const time, + real64 const dt, + DomainPartition & domain, + DofManager const & dofManager, + CRSMatrixView< real64, globalIndex const > const & localMatrix, + arrayView1d< real64 > const & localRhs ) override; + + void assembleContact( DomainPartition & domain, + DofManager const & dofManager, + CRSMatrixView< real64, globalIndex const > const & localMatrix, + arrayView1d< real64 > const & localRhs ); + +protected: + +private: + + struct viewKeyStruct : ContactSolverBase::viewKeyStruct + { + constexpr static char const * contactPenaltyStiffnessString() { return "contactPenaltyStiffness"; } + }; + + real64 m_contactPenaltyStiffness; +}; + +} /* namespace geos */ + +#endif /* GEOS_PHYSICSSOLVERS_CONTACT_SOLIDMECHANICSPENALTYCONTACT_HPP_ */ diff --git a/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.cpp b/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.cpp index 8c8acc2ebcb..3e63e5e00c2 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.cpp @@ -22,6 +22,7 @@ #include "constitutive/ConstitutivePassThru.hpp" #include "constitutive/permeability/PermeabilityFields.hpp" #include "constitutive/solid/SolidInternalEnergy.hpp" +#include "constitutive/contact/HydraulicApertureBase.hpp" #include "discretizationMethods/NumericalMethodsManager.hpp" #include "fieldSpecification/AquiferBoundaryCondition.hpp" #include "fieldSpecification/EquilibriumInitialCondition.hpp" diff --git a/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolver.cpp b/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolver.cpp index 5743772a144..3c108c21daa 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolver.cpp +++ b/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolver.cpp @@ -6,7 +6,7 @@ * Copyright (c) 2018-2024 Total, S.A * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University * Copyright (c) 2018-2024 Chevron - * Copyright (c) 2019- GEOS/GEOSX Contributors + * Copyright (c) 2019- GEOS/GEOS Contributors * All rights reserved * * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. @@ -17,10 +17,9 @@ * @file HydrofractureSolver.cpp */ - #include "HydrofractureSolver.hpp" -#include "constitutive/contact/ContactSelector.hpp" +#include "constitutive/contact/HydraulicApertureRelationSelector.hpp" #include "constitutive/fluid/singlefluid/SingleFluidBase.hpp" #include "physicsSolvers/multiphysics/HydrofractureSolverKernels.hpp" #include "physicsSolvers/solidMechanics/SolidMechanicsFields.hpp" @@ -41,7 +40,6 @@ template< typename POROMECHANICS_SOLVER > HydrofractureSolver< POROMECHANICS_SOLVER >::HydrofractureSolver( const string & name, Group * const parent ) : Base( name, parent ), - m_contactRelationName(), m_surfaceGeneratorName(), m_surfaceGenerator( nullptr ), m_maxNumResolves( 10 ), @@ -53,11 +51,6 @@ HydrofractureSolver< POROMECHANICS_SOLVER >::HydrofractureSolver( const string & setInputFlag( InputFlags::REQUIRED ). setDescription( "Name of the surface generator to use in the hydrofracture solver" ); - registerWrapper( viewKeyStruct::contactRelationNameString(), &m_contactRelationName ). - setRTTypeName( rtTypes::CustomTypes::groupNameRef ). - setInputFlag( InputFlags::REQUIRED ). - setDescription( "Name of contact relation to enforce constraints on fracture boundary." ); - registerWrapper( viewKeyStruct::maxNumResolvesString(), &m_maxNumResolves ). setApplyDefaultValue( 10 ). setInputFlag( InputFlags::OPTIONAL ). @@ -288,7 +281,8 @@ void HydrofractureSolver< POROMECHANICS_SOLVER >::updateHydraulicApertureAndFrac elemManager.forElementSubRegions< FaceElementSubRegion >( [&]( FaceElementSubRegion & subRegion ) { - ContactBase const & contact = this->template getConstitutiveModel< ContactBase >( subRegion, m_contactRelationName ); + string const & hydraulicApertureRelationName = subRegion.template getReference< string >( viewKeyStruct::hydraulicApertureRelationNameString() ); + HydraulicApertureBase const & hydraulicApertureModel = this->template getConstitutiveModel< HydraulicApertureBase >( subRegion, hydraulicApertureRelationName ); arrayView1d< real64 > const aperture = subRegion.getElementAperture(); arrayView1d< real64 > const hydraulicAperture = subRegion.getField< flow::hydraulicAperture >(); @@ -316,14 +310,14 @@ void HydrofractureSolver< POROMECHANICS_SOLVER >::updateHydraulicApertureAndFrac { typename TYPEOFREF( castedPorousSolid ) ::KernelWrapper porousMaterialWrapper = castedPorousSolid.createKernelUpdates(); - constitutiveUpdatePassThru( contact, [&] ( auto & castedContact ) + constitutiveUpdatePassThru( hydraulicApertureModel, [&] ( auto & castedHydraulicApertureModel ) { - using ContactType = TYPEOFREF( castedContact ); - typename ContactType::KernelWrapper contactWrapper = castedContact.createKernelWrapper(); + using HydraulicApertureModelType = TYPEOFREF( castedHydraulicApertureModel ); + typename HydraulicApertureModelType::KernelWrapper hydraulicApertureWrapper = castedHydraulicApertureModel.createKernelWrapper(); auto const statistics = hydrofractureSolverKernels::DeformationUpdateKernel ::launch< parallelDevicePolicy<> >( subRegion.size(), - contactWrapper, + hydraulicApertureWrapper, porousMaterialWrapper, u, faceNormal, @@ -809,7 +803,8 @@ assembleFluidMassResidualDerivativeWrtDisplacement( DomainPartition const & doma [&]( localIndex const, FaceElementSubRegion const & subRegion ) { - ContactBase const & contact = this->template getConstitutiveModel< ContactBase >( subRegion, m_contactRelationName ); + string const & hydraulicApertureRelationName = subRegion.template getReference< string >( viewKeyStruct::hydraulicApertureRelationNameString() ); + HydraulicApertureBase const & hydraulicApertureModel = this->template getConstitutiveModel< HydraulicApertureBase >( subRegion, hydraulicApertureRelationName ); string const & fluidName = subRegion.getReference< string >( FlowSolverBase::viewKeyStruct::fluidNamesString() ); SingleFluidBase const & fluid = this->template getConstitutiveModel< SingleFluidBase >( subRegion, fluidName ); @@ -827,15 +822,15 @@ assembleFluidMassResidualDerivativeWrtDisplacement( DomainPartition const & doma arrayView2d< real64 const > const faceNormal = faceManager.faceNormal(); - constitutiveUpdatePassThru( contact, [&] ( auto & castedContact ) + constitutiveUpdatePassThru( hydraulicApertureModel, [&] ( auto & castedHydraulicApertureModel ) { - using ContactType = TYPEOFREF( castedContact ); - typename ContactType::KernelWrapper contactWrapper = castedContact.createKernelWrapper(); + using HydraulicApertureModelType = TYPEOFREF( castedHydraulicApertureModel ); + typename HydraulicApertureModelType::KernelWrapper hydraulicApertureWrapper = castedHydraulicApertureModel.createKernelWrapper(); hydrofractureSolverKernels::FluidMassResidualDerivativeAssemblyKernel:: launch< parallelDevicePolicy<> >( subRegion.size(), rankOffset, - contactWrapper, + hydraulicApertureWrapper, m_useQuasiNewton, elemsToFaces, faceToNodeMap, @@ -1049,7 +1044,7 @@ void HydrofractureSolver< POROMECHANICS_SOLVER >::initializeNewFractureFields( D localIndex const newElemIndex = newFractureElements[k]; real64 initialPressure = 1.0e99; real64 initialAperture = 1.0e99; - #ifdef GEOSX_USE_SEPARATION_COEFFICIENT + #ifdef GEOS_USE_SEPARATION_COEFFICIENT apertureF[newElemIndex] = aperture[newElemIndex]; #endif if( m_newFractureInitializationType == InitializationType::Displacement ) diff --git a/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolver.hpp b/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolver.hpp index 9df2e20b199..c9598839401 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolver.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolver.hpp @@ -163,8 +163,6 @@ class HydrofractureSolver : public POROMECHANICS_SOLVER struct viewKeyStruct : Base::viewKeyStruct { - constexpr static char const * contactRelationNameString() { return "contactRelationName"; } - constexpr static char const * surfaceGeneratorNameString() { return "surfaceGeneratorName"; } constexpr static char const * maxNumResolvesString() { return "maxNumResolves"; } @@ -175,7 +173,7 @@ class HydrofractureSolver : public POROMECHANICS_SOLVER constexpr static char const * useQuasiNewtonString() { return "useQuasiNewton"; } - static constexpr char const * isLaggingFractureStencilWeightsUpdateString() { return "isLaggingFractureStencilWeightsUpdate"; } + constexpr static char const * isLaggingFractureStencilWeightsUpdateString() { return "isLaggingFractureStencilWeightsUpdate"; } #ifdef GEOS_USE_SEPARATION_COEFFICIENT constexpr static char const * separationCoeff0String() { return "separationCoeff0"; } diff --git a/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolverKernels.hpp b/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolverKernels.hpp index cd193042239..e555a51d551 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolverKernels.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/HydrofractureSolverKernels.hpp @@ -32,10 +32,10 @@ namespace hydrofractureSolverKernels struct DeformationUpdateKernel { - template< typename POLICY, typename CONTACT_WRAPPER, typename POROUS_WRAPPER > + template< typename POLICY, typename HYDRAULICAPERTURE_WRAPPER, typename POROUS_WRAPPER > static std::tuple< double, double, double, double, double, double > launch( localIndex const size, - CONTACT_WRAPPER const & contactWrapper, + HYDRAULICAPERTURE_WRAPPER const & hydraulicApertureWrapper, POROUS_WRAPPER const & porousMaterialWrapper, arrayView2d< real64 const, nodes::TOTAL_DISPLACEMENT_USD > const & u, arrayView2d< real64 const > const & faceNormal, @@ -86,8 +86,14 @@ struct DeformationUpdateKernel minAperture.min( aperture[kfe] ); maxAperture.max( aperture[kfe] ); - real64 dHydraulicAperture_dNormalJump = 0; - real64 const newHydraulicAperture = contactWrapper.computeHydraulicAperture( aperture[kfe], dHydraulicAperture_dNormalJump ); + real64 normalTraction = 0.0; /// TODO: must be changed to use actual traction + real64 dHydraulicAperture_dNormalTraction = 0.0; + real64 dHydraulicAperture_dNormalJump = 0.0; + real64 const newHydraulicAperture = hydraulicApertureWrapper.computeHydraulicAperture( aperture[kfe], + normalTraction, + dHydraulicAperture_dNormalJump, + dHydraulicAperture_dNormalTraction ); + maxHydraulicApertureChange.max( std::fabs( newHydraulicAperture - hydraulicAperture[kfe] )); real64 const oldHydraulicAperture = hydraulicAperture[kfe]; hydraulicAperture[kfe] = newHydraulicAperture; @@ -127,11 +133,11 @@ struct DeformationUpdateKernel struct FluidMassResidualDerivativeAssemblyKernel { - template< typename CONTACT_WRAPPER > + template< typename HYDRAULICAPERTURE_WRAPPER > GEOS_HOST_DEVICE inline static void - computeAccumulationDerivative( CONTACT_WRAPPER const & contactWrapper, + computeAccumulationDerivative( HYDRAULICAPERTURE_WRAPPER const & hydraulicApertureWrapper, localIndex const numNodesPerFace, arraySlice1d< localIndex const > const elemsToFaces, ArrayOfArraysView< localIndex const > const faceToNodeMap, @@ -143,8 +149,13 @@ struct FluidMassResidualDerivativeAssemblyKernel globalIndex (& nodeDOF)[8 * 3], arraySlice1d< real64 > const dRdU ) { - real64 dHydraulicAperture_dNormalJump = 0; - real64 const hydraulicAperture = contactWrapper.computeHydraulicAperture( aperture, dHydraulicAperture_dNormalJump ); + real64 dHydraulicAperture_dNormalJump = 0.0; + real64 dHydraulicAperture_dTraction = 0.0; + real64 fractureTraction = 0.0; + real64 const hydraulicAperture = hydraulicApertureWrapper.computeHydraulicAperture( aperture, + fractureTraction, + dHydraulicAperture_dNormalJump, + dHydraulicAperture_dTraction ); GEOS_UNUSED_VAR( hydraulicAperture ); constexpr integer kfSign[2] = { -1, 1 }; @@ -201,11 +212,11 @@ struct FluidMassResidualDerivativeAssemblyKernel } } - template< typename POLICY, typename CONTACT_WRAPPER > + template< typename POLICY, typename HYDRAULICAPERTURE_WRAPPER > static void launch( localIndex const size, globalIndex const rankOffset, - CONTACT_WRAPPER const & contactWrapper, + HYDRAULICAPERTURE_WRAPPER const & hydraulicApertureWrapper, integer const useQuasiNewton, ArrayOfArraysView< localIndex const > const elemsToFaces, ArrayOfArraysView< localIndex const > const faceToNodeMap, @@ -230,7 +241,7 @@ struct FluidMassResidualDerivativeAssemblyKernel globalIndex nodeDOF[8 * 3]; stackArray1d< real64, 24 > dRdU( 2 * numNodesPerFace * 3 ); // - computeAccumulationDerivative( contactWrapper, + computeAccumulationDerivative( hydraulicApertureWrapper, numNodesPerFace, elemsToFaces[ei], faceToNodeMap, diff --git a/src/coreComponents/physicsSolvers/multiphysics/PoromechanicsSolver.hpp b/src/coreComponents/physicsSolvers/multiphysics/PoromechanicsSolver.hpp index 9030f995508..bf6446aa0a6 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/PoromechanicsSolver.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/PoromechanicsSolver.hpp @@ -27,6 +27,7 @@ #include "physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.hpp" #include "constitutive/solid/CoupledSolidBase.hpp" #include "constitutive/solid/PorousSolid.hpp" +#include "constitutive/contact/HydraulicApertureBase.hpp" #include "mesh/DomainPartition.hpp" #include "mesh/utilities/AverageOverQuadraturePointsKernel.hpp" #include "codingUtilities/Utilities.hpp" @@ -123,6 +124,23 @@ class PoromechanicsSolver : public CoupledSolver< FLOW_SOLVER, MECHANICS_SOLVER InputError ); } + virtual void setConstitutiveNamesCallSuper( ElementSubRegionBase & subRegion ) const override final + { + if( dynamic_cast< SurfaceElementSubRegion * >( &subRegion ) ) + { + subRegion.registerWrapper< string >( viewKeyStruct::hydraulicApertureRelationNameString() ). + setPlotLevel( PlotLevel::NOPLOT ). + setRestartFlags( RestartFlags::NO_WRITE ). + setSizedFromParent( 0 ); + + string & hydraulicApertureModelName = subRegion.getReference< string >( viewKeyStruct::hydraulicApertureRelationNameString() ); + hydraulicApertureModelName = SolverBase::getConstitutiveName< HydraulicApertureBase >( subRegion ); + GEOS_ERROR_IF( hydraulicApertureModelName.empty(), GEOS_FMT( "{}: HydraulicApertureBase model not found on subregion {}", + this->getDataContext(), subRegion.getDataContext() ) ); + } + + } + virtual void initializePreSubGroups() override { Base::initializePreSubGroups(); @@ -311,6 +329,10 @@ class PoromechanicsSolver : public CoupledSolver< FLOW_SOLVER, MECHANICS_SOLVER /// Multiplier on stabilization strength constexpr static const char * stabilizationMultiplierString() {return "stabilizationMultiplier"; } + + /// Name of the hydraulicApertureRelationName + static constexpr char const * hydraulicApertureRelationNameString() {return "hydraulicApertureRelationName"; } + }; void updateStabilizationParameters( DomainPartition & domain ) const diff --git a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.cpp b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.cpp index abd76e855ad..2f0a16dc9ef 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.cpp +++ b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.cpp @@ -20,12 +20,11 @@ #include "SinglePhasePoromechanicsConformingFractures.hpp" #include "constitutive/solid/PorousSolid.hpp" -#include "constitutive/contact/ContactSelector.hpp" #include "constitutive/fluid/singlefluid/SingleFluidBase.hpp" #include "linearAlgebra/solvers/BlockPreconditioner.hpp" #include "linearAlgebra/solvers/SeparateComponentPreconditioner.hpp" +#include "constitutive/contact/HydraulicApertureRelationSelector.hpp" #include "physicsSolvers/fluidFlow/SinglePhaseBase.hpp" -//#include "physicsSolvers/multiphysics/SinglePhaseReservoirAndWells.hpp" #include "physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanics.hpp" #include "physicsSolvers/multiphysics/poromechanicsKernels/ThermalSinglePhasePoromechanics.hpp" #include "physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsFractures.hpp" @@ -769,13 +768,13 @@ void SinglePhasePoromechanicsConformingFractures< FLOW_SOLVER >::updateHydraulic string const porousSolidName = subRegion.getReference< string >( FlowSolverBase::viewKeyStruct::solidNamesString() ); CoupledSolidBase & porousSolid = subRegion.getConstitutiveModel< CoupledSolidBase >( porousSolidName ); - string const & contactRelationName = subRegion.template getReference< string >( SolidMechanicsLagrangianFEM::viewKeyStruct::contactRelationNameString() ); - ContactBase const & contact = subRegion.getConstitutiveModel< ContactBase >( contactRelationName ); + string const & hydraulicApertureRelationName = subRegion.template getReference< string >( viewKeyStruct::hydraulicApertureRelationNameString() ); + HydraulicApertureBase const & hydraulicApertureModel = this->template getConstitutiveModel< HydraulicApertureBase >( subRegion, hydraulicApertureRelationName ); - constitutiveUpdatePassThru( contact, [&] ( auto & castedContact ) + constitutiveUpdatePassThru( hydraulicApertureModel, [&] ( auto & castedHydraulicAperture ) { - using ContactType = TYPEOFREF( castedContact ); - typename ContactType::KernelWrapper contactWrapper = castedContact.createKernelWrapper(); + using HydraulicApertureType = TYPEOFREF( castedHydraulicAperture ); + typename HydraulicApertureType::KernelWrapper hydraulicApertureWrapper = castedHydraulicAperture.createKernelWrapper(); constitutive::ConstitutivePassThru< CompressibleSolidBase >::execute( porousSolid, [=, &subRegion] ( auto & castedPorousSolid ) { @@ -784,7 +783,7 @@ void SinglePhasePoromechanicsConformingFractures< FLOW_SOLVER >::updateHydraulic poromechanicsFracturesKernels::StateUpdateKernel:: launch< parallelDevicePolicy<> >( subRegion.size(), porousMaterialWrapper, - contactWrapper, + hydraulicApertureWrapper, dispJump, pressure, area, diff --git a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.hpp b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.hpp index 124c2c261dd..72cfd3d68ca 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.hpp @@ -107,6 +107,9 @@ class SinglePhasePoromechanicsConformingFractures : public SinglePhasePoromechan private: + struct viewKeyStruct : public Base::viewKeyStruct + {}; + static const localIndex m_maxFaceNodes=11; // Maximum number of nodes on a contact face void assembleElementBasedContributions( real64 const time_n, diff --git a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEmbeddedFractures.cpp b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEmbeddedFractures.cpp index deb60634c18..79dba986aa4 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEmbeddedFractures.cpp +++ b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEmbeddedFractures.cpp @@ -18,7 +18,7 @@ */ #include "SinglePhasePoromechanicsEmbeddedFractures.hpp" -#include "constitutive/contact/ContactSelector.hpp" +#include "constitutive/contact/HydraulicApertureRelationSelector.hpp" #include "constitutive/fluid/singlefluid/SingleFluidBase.hpp" #include "physicsSolvers/contact/SolidMechanicsEFEMKernelsHelper.hpp" #include "physicsSolvers/fluidFlow/SinglePhaseBase.hpp" @@ -496,33 +496,38 @@ void SinglePhasePoromechanicsEmbeddedFractures::updateState( DomainPartition & d arrayView1d< real64 const > const & pressure = subRegion.template getField< fields::flow::pressure >(); - string const & contactRelationName = subRegion.template getReference< string >( ContactSolverBase::viewKeyStruct::contactRelationNameString() ); - ContactBase const & contact = getConstitutiveModel< ContactBase >( subRegion, contactRelationName ); - - ContactBase::KernelWrapper contactWrapper = contact.createKernelWrapper(); + string const & hydraulicApertureRelationName = subRegion.template getReference< string >( viewKeyStruct::hydraulicApertureRelationNameString() ); + HydraulicApertureBase const & hydraulicApertureModel = this->template getConstitutiveModel< HydraulicApertureBase >( subRegion, hydraulicApertureRelationName ); string const porousSolidName = subRegion.template getReference< string >( FlowSolverBase::viewKeyStruct::solidNamesString() ); CoupledSolidBase & porousSolid = subRegion.template getConstitutiveModel< CoupledSolidBase >( porousSolidName ); - constitutive::ConstitutivePassThru< CompressibleSolidBase >::execute( porousSolid, [=, &subRegion] ( auto & castedPorousSolid ) + constitutive::ConstitutivePassThru< CompressibleSolidBase >::execute( porousSolid, [=, &subRegion, &hydraulicApertureModel] ( auto & castedPorousSolid ) { typename TYPEOFREF( castedPorousSolid ) ::KernelWrapper porousMaterialWrapper = castedPorousSolid.createKernelUpdates(); - poromechanicsEFEMKernels::StateUpdateKernel:: - launch< parallelDevicePolicy<> >( subRegion.size(), - contactWrapper, - porousMaterialWrapper, - dispJump, - pressure, - area, - volume, - deltaVolume, - aperture, - oldHydraulicAperture, - hydraulicAperture, - fractureTraction, - dTdpf ); + constitutiveUpdatePassThru( hydraulicApertureModel, [=, &subRegion] ( auto & castedHydraulicApertureModel ) + { + using HydraulicApertureModelType = TYPEOFREF( castedHydraulicApertureModel ); + typename HydraulicApertureModelType::KernelWrapper hydraulicApertureModelWrapper = castedHydraulicApertureModel.createKernelWrapper(); + + poromechanicsEFEMKernels::StateUpdateKernel:: + launch< parallelDevicePolicy<> >( subRegion.size(), + hydraulicApertureModelWrapper, + porousMaterialWrapper, + dispJump, + pressure, + area, + volume, + deltaVolume, + aperture, + oldHydraulicAperture, + hydraulicAperture, + fractureTraction, + dTdpf ); + + } ); } ); // update the stencil weights using the updated hydraulic aperture diff --git a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM.hpp b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM.hpp index 3afa2f8e64d..ed4f3c07813 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEFEM.hpp @@ -20,7 +20,6 @@ #ifndef GEOS_PHYSICSSOLVERS_MULTIPHYSICS_POROMECHANICSKERNELS_SINGLEPHASEPOROMECHANICSEFEM_HPP_ #define GEOS_PHYSICSSOLVERS_MULTIPHYSICS_POROMECHANICSKERNELS_SINGLEPHASEPOROMECHANICSEFEM_HPP_ -#include "constitutive/contact/ContactBase.hpp" #include "finiteElement/kernelInterface/ImplicitKernelBase.hpp" namespace geos @@ -331,10 +330,10 @@ struct StateUpdateKernel * @param[out] fractureTraction the fracture traction * @param[out] dFractureTraction_dPressure the derivative of the fracture traction wrt pressure */ - template< typename POLICY, typename POROUS_WRAPPER > + template< typename POLICY, typename POROUS_WRAPPER, typename CONTACT_WRAPPER > static void launch( localIndex const size, - constitutive::ContactBase::KernelWrapper const & contactWrapper, + CONTACT_WRAPPER const & contactWrapper, POROUS_WRAPPER const & porousMaterialWrapper, arrayView2d< real64 const > const & dispJump, arrayView1d< real64 const > const & pressure, @@ -352,16 +351,18 @@ struct StateUpdateKernel // update aperture to be equal to the normal displacement jump aperture[k] = dispJump[k][0]; // the first component of the jump is the normal one. - real64 dHydraulicAperture_dNormalJump = 0; + real64 dHydraulicAperture_dNormalJump = 0.0; + real64 dHydraulicAperture_dNormalTraction = 0.0; hydraulicAperture[k] = contactWrapper.computeHydraulicAperture( aperture[k], - dHydraulicAperture_dNormalJump ); + fractureTraction[k][0], + dHydraulicAperture_dNormalJump, + dHydraulicAperture_dNormalTraction ); deltaVolume[k] = hydraulicAperture[k] * area[k] - volume[k]; // traction on the fracture to include the pressure contribution - contactWrapper.addPressureToTraction( pressure[k], - fractureTraction[k], - dFractureTraction_dPressure[k] ); + fractureTraction[k][0] -= pressure[k]; + dFractureTraction_dPressure[k] = -1.0; real64 const jump[3] = LVARRAY_TENSOROPS_INIT_LOCAL_3 ( dispJump[k] ); real64 const traction[3] = LVARRAY_TENSOROPS_INIT_LOCAL_3 ( fractureTraction[k] ); diff --git a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsFractures.hpp b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsFractures.hpp index 58b6ab6d141..82bfd7a76b6 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsFractures.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsFractures.hpp @@ -35,7 +35,7 @@ struct StateUpdateKernel /** * @brief Launch the kernel function doing volume, aperture and fracture traction updates * @tparam POLICY the type of policy used in the kernel launch - * @tparam CONTACT_WRAPPER the type of contact wrapper doing the fracture traction updates + * @tparam HYDRAULIC_APERTURE_WRAPPER the type of hydraulic aperture model wrapper doing the fracture traction updates * @param[in] size the size of the subregion * @param[in] contactWrapper the wrapper implementing the contact relationship * @param[in] dispJump the displacement jump @@ -48,11 +48,11 @@ struct StateUpdateKernel * @param[out] hydraulicAperture the effecture aperture * @param[in] fractureTraction the fracture traction */ - template< typename POLICY, typename POROUS_WRAPPER, typename CONTACT_WRAPPER > + template< typename POLICY, typename POROUS_WRAPPER, typename HYDRAULIC_APERTURE_WRAPPER > static void launch( localIndex const size, POROUS_WRAPPER const & porousMaterialWrapper, - CONTACT_WRAPPER const & contactWrapper, + HYDRAULIC_APERTURE_WRAPPER const & contactWrapper, arrayView2d< real64 const > const & dispJump, arrayView1d< real64 const > const & pressure, arrayView1d< real64 const > const & area, @@ -70,7 +70,11 @@ struct StateUpdateKernel aperture[k] = dispJump[k][0]; // the first component of the jump is the normal one. real64 dHydraulicAperture_dNormalJump = 0.0; - hydraulicAperture[k] = contactWrapper.computeHydraulicAperture( aperture[k], dHydraulicAperture_dNormalJump ); + real64 dHydraulicAperture_dNormalTraction = 0.0; + hydraulicAperture[k] = contactWrapper.computeHydraulicAperture( aperture[k], + fractureTraction[k][0], + dHydraulicAperture_dNormalJump, + dHydraulicAperture_dNormalTraction ); deltaVolume[k] = hydraulicAperture[k] * area[k] - volume[k]; @@ -78,9 +82,11 @@ struct StateUpdateKernel real64 const traction[3] = LVARRAY_TENSOROPS_INIT_LOCAL_3 ( fractureTraction[k] ); porousMaterialWrapper.updateStateFromPressureApertureJumpAndTraction( k, 0, pressure[k], - oldHydraulicAperture[k], hydraulicAperture[k], + oldHydraulicAperture[k], + hydraulicAperture[k], dHydraulicAperture_dNormalJump, - jump, traction ); + jump, + traction ); } ); } diff --git a/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.cpp b/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.cpp index 23477cbf51c..70756a953d7 100644 --- a/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.cpp +++ b/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.cpp @@ -28,7 +28,6 @@ #include "codingUtilities/Utilities.hpp" #include "constitutive/ConstitutiveManager.hpp" -#include "constitutive/contact/ContactBase.hpp" #include "common/GEOS_RAJA_Interface.hpp" #include "discretizationMethods/NumericalMethodsManager.hpp" #include "fieldSpecification/FieldSpecificationManager.hpp" @@ -117,6 +116,11 @@ SolidMechanicsLagrangianFEM::SolidMechanicsLagrangianFEM( const string & name, setInputFlag( InputFlags::OPTIONAL ). setDescription( "Name of contact relation to enforce constraints on fracture boundary." ); + registerWrapper( viewKeyStruct::contactPenaltyStiffnessString(), &m_contactPenaltyStiffness ). + setInputFlag( InputFlags::OPTIONAL ). + setApplyDefaultValue( 0.0 ). + setDescription( "Value of the penetration penalty stiffness. Units of Pressure/length" ); + registerWrapper( viewKeyStruct::maxForceString(), &m_maxForce ). setInputFlag( InputFlags::FALSE ). setDescription( "The maximum force contribution in the problem domain." ); @@ -1378,9 +1382,7 @@ void SolidMechanicsLagrangianFEM::applyContactConstraint( DofManager const & dof elemManager.forElementSubRegions< FaceElementSubRegion >( [&]( FaceElementSubRegion & subRegion ) { - ContactBase const & contact = getConstitutiveModel< ContactBase >( subRegion, m_contactRelationName ); - - real64 const contactStiffness = contact.stiffness(); + real64 const contactStiffness = m_contactPenaltyStiffness; arrayView1d< real64 > const area = subRegion.getElementArea(); ArrayOfArraysView< localIndex const > const elemsToFaces = subRegion.faceList().toViewConst(); diff --git a/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.hpp b/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.hpp index 9deae4f3272..9417db2282f 100644 --- a/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.hpp +++ b/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.hpp @@ -251,6 +251,9 @@ class SolidMechanicsLagrangianFEM : public SolverBase static constexpr char const * nonSendOrReceiveNodesString() { return "nonSendOrReceiveNodes";} static constexpr char const * targetNodesString() { return "targetNodes";} static constexpr char const * forceString() { return "Force";} + + static constexpr char const * contactPenaltyStiffnessString() { return "contactPenaltyStiffness"; } + }; SortedArray< localIndex > & getElemsAttachedToSendOrReceiveNodes( ElementSubRegionBase & subRegion ) @@ -297,6 +300,8 @@ class SolidMechanicsLagrangianFEM : public SolverBase /// Rigid body modes array1d< ParallelVector > m_rigidBodyModes; + real64 m_contactPenaltyStiffness; + private: string m_contactRelationName; diff --git a/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsMPM.cpp b/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsMPM.cpp index 08640b56332..16e8377c0f1 100644 --- a/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsMPM.cpp +++ b/src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsMPM.cpp @@ -29,7 +29,7 @@ #include "codingUtilities/Utilities.hpp" #include "common/TimingMacros.hpp" #include "constitutive/ConstitutiveManager.hpp" -#include "constitutive/contact/ContactBase.hpp" +#include "constitutive/contact/FrictionBase.hpp" #include "finiteElement/FiniteElementDiscretizationManager.hpp" #include "finiteElement/Kinematics.h" #include "LvArray/src/output.hpp" diff --git a/src/coreComponents/physicsSolvers/solidMechanics/kernels/ExplicitMPM.hpp b/src/coreComponents/physicsSolvers/solidMechanics/kernels/ExplicitMPM.hpp index 495872c8038..05f39528d30 100644 --- a/src/coreComponents/physicsSolvers/solidMechanics/kernels/ExplicitMPM.hpp +++ b/src/coreComponents/physicsSolvers/solidMechanics/kernels/ExplicitMPM.hpp @@ -85,7 +85,7 @@ struct StateUpdateKernel /** * @brief Launch the kernel function doing constitutive updates * @tparam POLICY the type of policy used in the kernel launch - * @tparam CONTACT_WRAPPER the type of contact wrapper doing the constitutive updates + * @tparam CONSTITUTIVE_WRAPPER the type of consitutive wrapper doing the constitutive updates * @param[in] size the size of the subregion * @param[in] constitutiveWrapper the wrapper implementing the constitutive model * @param[in] deformationGradient the deformation gradient diff --git a/src/coreComponents/schema/docs/Constitutive.rst b/src/coreComponents/schema/docs/Constitutive.rst index 09b1aadeaff..c62cb08d281 100644 --- a/src/coreComponents/schema/docs/Constitutive.rst +++ b/src/coreComponents/schema/docs/Constitutive.rst @@ -42,6 +42,7 @@ ElasticTransverseIsotropic node :ref:`XML_ElasticTran ExponentialDecayPermeability node :ref:`XML_ExponentialDecayPermeability` ExtendedDruckerPrager node :ref:`XML_ExtendedDruckerPrager` FrictionlessContact node :ref:`XML_FrictionlessContact` +HydraulicApertureTable node :ref:`XML_HydraulicApertureTable` JFunctionCapillaryPressure node :ref:`XML_JFunctionCapillaryPressure` LinearIsotropicDispersion node :ref:`XML_LinearIsotropicDispersion` ModifiedCamClay node :ref:`XML_ModifiedCamClay` diff --git a/src/coreComponents/schema/docs/Constitutive_other.rst b/src/coreComponents/schema/docs/Constitutive_other.rst index d95527f1483..1195cddf026 100644 --- a/src/coreComponents/schema/docs/Constitutive_other.rst +++ b/src/coreComponents/schema/docs/Constitutive_other.rst @@ -42,6 +42,7 @@ ElasticTransverseIsotropic node :ref:`DATASTRUCTURE_ElasticTr ExponentialDecayPermeability node :ref:`DATASTRUCTURE_ExponentialDecayPermeability` ExtendedDruckerPrager node :ref:`DATASTRUCTURE_ExtendedDruckerPrager` FrictionlessContact node :ref:`DATASTRUCTURE_FrictionlessContact` +HydraulicApertureTable node :ref:`DATASTRUCTURE_HydraulicApertureTable` JFunctionCapillaryPressure node :ref:`DATASTRUCTURE_JFunctionCapillaryPressure` LinearIsotropicDispersion node :ref:`DATASTRUCTURE_LinearIsotropicDispersion` ModifiedCamClay node :ref:`DATASTRUCTURE_ModifiedCamClay` diff --git a/src/coreComponents/schema/docs/Coulomb.rst b/src/coreComponents/schema/docs/Coulomb.rst index 7b1a581e860..2cbf7fdeffc 100644 --- a/src/coreComponents/schema/docs/Coulomb.rst +++ b/src/coreComponents/schema/docs/Coulomb.rst @@ -1,16 +1,13 @@ -========================= ============ =========== ============================================================================================================================================================================================================================================================================================================================================================================================================================================================= -Name Type Default Description -========================= ============ =========== ============================================================================================================================================================================================================================================================================================================================================================================================================================================================= -apertureTableName groupNameRef required Name of the aperture table -apertureTolerance real64 1e-09 Value to be used to avoid floating point errors in expressions involving aperture. For example in the case of dividing by the actual aperture (not the effective aperture that results from the aperture function) this value may be used to avoid the 1/0 error. Note that this value may have some physical significance in its usage, as it may be used to smooth out highly nonlinear behavior associated with 1/0 in addition to avoiding the 1/0 error. -cohesion real64 required Cohesion -displacementJumpThreshold real64 2.22045e-16 A threshold valued to determine whether a fracture is open or not. -frictionCoefficient real64 required Friction coefficient -name groupName required A name is required for any non-unique nodes -penaltyStiffness real64 0 Value of the penetration penalty stiffness. Units of Pressure/length -shearStiffness real64 0 Value of the shear elastic stiffness. Units of Pressure/length -========================= ============ =========== ============================================================================================================================================================================================================================================================================================================================================================================================================================================================= +========================= ========= =========== ================================================================== +Name Type Default Description +========================= ========= =========== ================================================================== +cohesion real64 required Cohesion +displacementJumpThreshold real64 2.22045e-16 A threshold valued to determine whether a fracture is open or not. +frictionCoefficient real64 required Friction coefficient +name groupName required A name is required for any non-unique nodes +shearStiffness real64 0 Value of the shear elastic stiffness. Units of Pressure/length +========================= ========= =========== ================================================================== diff --git a/src/coreComponents/schema/docs/FrictionlessContact.rst b/src/coreComponents/schema/docs/FrictionlessContact.rst index 385d3738b2a..e150b24c06a 100644 --- a/src/coreComponents/schema/docs/FrictionlessContact.rst +++ b/src/coreComponents/schema/docs/FrictionlessContact.rst @@ -1,14 +1,10 @@ -========================= ============ =========== ============================================================================================================================================================================================================================================================================================================================================================================================================================================================= -Name Type Default Description -========================= ============ =========== ============================================================================================================================================================================================================================================================================================================================================================================================================================================================= -apertureTableName groupNameRef required Name of the aperture table -apertureTolerance real64 1e-09 Value to be used to avoid floating point errors in expressions involving aperture. For example in the case of dividing by the actual aperture (not the effective aperture that results from the aperture function) this value may be used to avoid the 1/0 error. Note that this value may have some physical significance in its usage, as it may be used to smooth out highly nonlinear behavior associated with 1/0 in addition to avoiding the 1/0 error. -displacementJumpThreshold real64 2.22045e-16 A threshold valued to determine whether a fracture is open or not. -name groupName required A name is required for any non-unique nodes -penaltyStiffness real64 0 Value of the penetration penalty stiffness. Units of Pressure/length -shearStiffness real64 0 Value of the shear elastic stiffness. Units of Pressure/length -========================= ============ =========== ============================================================================================================================================================================================================================================================================================================================================================================================================================================================= +========================= ========= =========== ================================================================== +Name Type Default Description +========================= ========= =========== ================================================================== +displacementJumpThreshold real64 2.22045e-16 A threshold valued to determine whether a fracture is open or not. +name groupName required A name is required for any non-unique nodes +========================= ========= =========== ================================================================== diff --git a/src/coreComponents/schema/docs/Hydrofracture.rst b/src/coreComponents/schema/docs/Hydrofracture.rst index 896a5cb77b0..d36978900e6 100644 --- a/src/coreComponents/schema/docs/Hydrofracture.rst +++ b/src/coreComponents/schema/docs/Hydrofracture.rst @@ -4,7 +4,6 @@ Name Type Default Description ===================================== =================================================================================================================================== ======== ====================================================================================================================================================================================================================================================================================================================== cflFactor real64 0.5 Factor to apply to the `CFL condition `_ when calculating the maximum allowable time step. Values should be in the interval (0,1] -contactRelationName groupNameRef required Name of contact relation to enforce constraints on fracture boundary. flowSolverName groupNameRef required Name of the flow solver used by the coupled solver initialDt real64 1e+99 Initial time-step value required by the solver to the event manager. isLaggingFractureStencilWeightsUpdate integer 0 Flag to determine whether or not to apply lagging update for the fracture stencil weights. diff --git a/src/coreComponents/schema/docs/SolidMechanicsAugmentedLagrangianContact.rst b/src/coreComponents/schema/docs/SolidMechanicsAugmentedLagrangianContact.rst index 9b736b1b4d6..4ea2de12d3a 100644 --- a/src/coreComponents/schema/docs/SolidMechanicsAugmentedLagrangianContact.rst +++ b/src/coreComponents/schema/docs/SolidMechanicsAugmentedLagrangianContact.rst @@ -4,6 +4,7 @@ Name Type Default Description ========================= ====================================================== =============== ======================================================================================================================================================================================================================================================================================================================== cflFactor real64 0.5 Factor to apply to the `CFL condition `_ when calculating the maximum allowable time step. Values should be in the interval (0,1] +contactPenaltyStiffness real64 0 Value of the penetration penalty stiffness. Units of Pressure/length discretization groupNameRef required Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified. initialDt real64 1e+99 Initial time-step value required by the solver to the event manager. logLevel integer 0 Log level diff --git a/src/coreComponents/schema/docs/SolidMechanicsEmbeddedFractures.rst b/src/coreComponents/schema/docs/SolidMechanicsEmbeddedFractures.rst index eca5d02f2ed..f1eeeefdbf1 100644 --- a/src/coreComponents/schema/docs/SolidMechanicsEmbeddedFractures.rst +++ b/src/coreComponents/schema/docs/SolidMechanicsEmbeddedFractures.rst @@ -4,6 +4,7 @@ Name Type Default Description ========================= ====================================================== =============== ======================================================================================================================================================================================================================================================================================================================== cflFactor real64 0.5 Factor to apply to the `CFL condition `_ when calculating the maximum allowable time step. Values should be in the interval (0,1] +contactPenaltyStiffness real64 required Value of the penetration penalty stiffness. Units of Pressure/length discretization groupNameRef required Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified. initialDt real64 1e+99 Initial time-step value required by the solver to the event manager. logLevel integer 0 Log level diff --git a/src/coreComponents/schema/docs/SolidMechanicsLagrangeContact.rst b/src/coreComponents/schema/docs/SolidMechanicsLagrangeContact.rst index ea949482327..e801acd20e0 100644 --- a/src/coreComponents/schema/docs/SolidMechanicsLagrangeContact.rst +++ b/src/coreComponents/schema/docs/SolidMechanicsLagrangeContact.rst @@ -4,6 +4,7 @@ Name Type Default Description =============================== ====================================================== =============== ======================================================================================================================================================================================================================================================================================================================== cflFactor real64 0.5 Factor to apply to the `CFL condition `_ when calculating the maximum allowable time step. Values should be in the interval (0,1] +contactPenaltyStiffness real64 0 Value of the penetration penalty stiffness. Units of Pressure/length discretization groupNameRef required Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified. initialDt real64 1e+99 Initial time-step value required by the solver to the event manager. logLevel integer 0 Log level diff --git a/src/coreComponents/schema/docs/SolidMechanicsLagrangianSSLE.rst b/src/coreComponents/schema/docs/SolidMechanicsLagrangianSSLE.rst index bed0562d496..1bccbf3c052 100644 --- a/src/coreComponents/schema/docs/SolidMechanicsLagrangianSSLE.rst +++ b/src/coreComponents/schema/docs/SolidMechanicsLagrangianSSLE.rst @@ -4,6 +4,7 @@ Name Type Default Description ========================= ====================================================== =============== ======================================================================================================================================================================================================================================================================================================================== cflFactor real64 0.5 Factor to apply to the `CFL condition `_ when calculating the maximum allowable time step. Values should be in the interval (0,1] +contactPenaltyStiffness real64 0 Value of the penetration penalty stiffness. Units of Pressure/length contactRelationName groupNameRef NOCONTACT Name of contact relation to enforce constraints on fracture boundary. discretization groupNameRef required Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified. initialDt real64 1e+99 Initial time-step value required by the solver to the event manager. diff --git a/src/coreComponents/schema/docs/SolidMechanics_LagrangianFEM.rst b/src/coreComponents/schema/docs/SolidMechanics_LagrangianFEM.rst index bed0562d496..1bccbf3c052 100644 --- a/src/coreComponents/schema/docs/SolidMechanics_LagrangianFEM.rst +++ b/src/coreComponents/schema/docs/SolidMechanics_LagrangianFEM.rst @@ -4,6 +4,7 @@ Name Type Default Description ========================= ====================================================== =============== ======================================================================================================================================================================================================================================================================================================================== cflFactor real64 0.5 Factor to apply to the `CFL condition `_ when calculating the maximum allowable time step. Values should be in the interval (0,1] +contactPenaltyStiffness real64 0 Value of the penetration penalty stiffness. Units of Pressure/length contactRelationName groupNameRef NOCONTACT Name of contact relation to enforce constraints on fracture boundary. discretization groupNameRef required Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified. initialDt real64 1e+99 Initial time-step value required by the solver to the event manager. diff --git a/src/coreComponents/schema/schema.xsd b/src/coreComponents/schema/schema.xsd index d02adab186c..2fe20af996e 100644 --- a/src/coreComponents/schema/schema.xsd +++ b/src/coreComponents/schema/schema.xsd @@ -701,6 +701,10 @@ + + + + @@ -2919,8 +2923,6 @@ Equal to 1 for surface conditions, and to 0 for reservoir conditions--> - - @@ -3568,6 +3570,8 @@ Local- Add jump stabilization on interior of macro elements--> + + @@ -3612,6 +3616,8 @@ Local- Add jump stabilization on interior of macro elements--> + + @@ -3653,6 +3659,8 @@ Local- Add jump stabilization on interior of macro elements--> + + @@ -3696,6 +3704,8 @@ Local- Add jump stabilization on interior of macro elements--> + + @@ -3739,6 +3749,8 @@ Local- Add jump stabilization on interior of macro elements--> + + @@ -4180,6 +4192,7 @@ Local- Add jump stabilization on interior of macro elements--> + @@ -4671,18 +4684,12 @@ The expected format is "{ waterMax, oilMax }", in that order--> - - - - - - @@ -5005,16 +5012,18 @@ For instance, if "oil" is before "gas" in "phaseNames", the table order should b + + + + + + - - - - - - + + diff --git a/src/coreComponents/schema/schema.xsd.other b/src/coreComponents/schema/schema.xsd.other index 73552a29993..fac7e939187 100644 --- a/src/coreComponents/schema/schema.xsd.other +++ b/src/coreComponents/schema/schema.xsd.other @@ -1449,6 +1449,7 @@ + @@ -2335,6 +2336,7 @@ + diff --git a/src/docs/sphinx/CompleteXMLSchema.rst b/src/docs/sphinx/CompleteXMLSchema.rst index 93fd92c0af4..92595791056 100644 --- a/src/docs/sphinx/CompleteXMLSchema.rst +++ b/src/docs/sphinx/CompleteXMLSchema.rst @@ -563,6 +563,13 @@ Element: HybridMimeticDiscretization .. include:: ../../coreComponents/schema/docs/HybridMimeticDiscretization.rst +.. _XML_HydraulicApertureTable: + +Element: HydraulicApertureTable +=============================== +.. include:: ../../coreComponents/schema/docs/HydraulicApertureTable.rst + + .. _XML_Hydrofracture: Element: Hydrofracture @@ -2037,6 +2044,13 @@ Datastructure: HybridMimeticDiscretization .. include:: ../../coreComponents/schema/docs/HybridMimeticDiscretization_other.rst +.. _DATASTRUCTURE_HydraulicApertureTable: + +Datastructure: HydraulicApertureTable +===================================== +.. include:: ../../coreComponents/schema/docs/HydraulicApertureTable_other.rst + + .. _DATASTRUCTURE_Hydrofracture: Datastructure: Hydrofracture diff --git a/src/docs/sphinx/developerGuide/KeyComponents/AddingNewSolver.rst b/src/docs/sphinx/developerGuide/KeyComponents/AddingNewSolver.rst index 00bf5cd0a90..38c122242b0 100644 --- a/src/docs/sphinx/developerGuide/KeyComponents/AddingNewSolver.rst +++ b/src/docs/sphinx/developerGuide/KeyComponents/AddingNewSolver.rst @@ -117,7 +117,7 @@ when ``applyBoundaryConditions()`` is called in this particular class override. Browsing the base class ``SolverBase``, it can be noted that most of the solver interface functions are called during either ``SolverBase::linearImplicitStep()`` or ``SolverBase::nonlinearImplicitStep()`` depending on the solver strategy chosen. -Switching to protected members, ``postProcessInput()`` is a central member function and +Switching to protected members, ``postInputInitialization()`` is a central member function and will be called by ``Group`` object after input is read from XML entry file. It will set and dispatch solver variables from the base class ``SolverBase`` to the most derived class. For ``LaplaceFEM``, it will allow us to set the right time integration scheme based on the XML value @@ -202,7 +202,7 @@ to writing our new *LaplaceDiffFEM* solver. .. note:: - We might want to remove final keyword from ``postProcessInput()`` as it will prevent you from overriding it. + We might want to remove final keyword from ``postInputInitialization()`` as it will prevent you from overriding it. Start doing your own Physic solver ================================== @@ -249,7 +249,7 @@ commented afterwards. } laplaceDiffFEMViewKeys; protected: - virtual void postProcessInput() override final; + virtual void postInputInitialization() override final; private: real64 m_diffusion; @@ -268,7 +268,7 @@ Then as mentioned in :ref:`Implementation`, the diffusion coefficient is used wh we will have to override the ``assembleSystem()`` function as detailed below. Moreover, if we want to introduce a new binding between the input XML and the code we will have to work on the three -``struct viewKeyStruct`` , ``postProcessInput()`` and the constructor. +``struct viewKeyStruct`` , ``postInputInitialization()`` and the constructor. Our new solver ``viewKeyStruct`` will have its own structure inheriting from the *LaplaceFEM* one to have the ``timeIntegrationOption`` and ``fieldName`` field. It will also create a ``diffusionCoeff`` field to be bound to the user defined homogeneous coefficient on one hand @@ -293,13 +293,13 @@ an "input uniform diffusion coefficient for the Laplace equation". setDescription("input uniform diffusion coeff for the laplace equation"); } -Another important spot for binding the value of the XML read parameter to our ``m_diffusion`` is in ``postProcessInput()``. +Another important spot for binding the value of the XML read parameter to our ``m_diffusion`` is in ``postInputInitialization()``. .. code-block:: c++ - void LaplaceDiffFEM::postProcessInput() + void LaplaceDiffFEM::postInputInitialization() { - LaplaceFEM::postProcessInput(); + LaplaceFEM::postInputInitialization(); string sDiffCoeff = this->getReference(laplaceDiffFEMViewKeys.diffusionCoeff); this->m_diffusion = std::stof(sDiffCoeff); From e5032697380ca6687bcb51e81883efebbf0dd8c6 Mon Sep 17 00:00:00 2001 From: Matteo Cusini <49037133+CusiniM@users.noreply.github.com> Date: Fri, 9 Aug 2024 16:40:30 -0400 Subject: [PATCH 10/42] Update README.md (#3265) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ee7671ba61e..000d3b45c7d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![DOI](https://zenodo.org/badge/131810578.svg)](https://zenodo.org/badge/latestdoi/131810578) [![codecov](https://codecov.io/github/GEOS-DEV/GEOS/graph/badge.svg?token=0VTEHPQG58)](https://codecov.io/github/GEOS-DEV/GEOS) -![CI](https://github.com/GEOS-DEV/GEOS/actions/workflows/ci_tests.yml/badge.svg) +[![CI](https://github.com/GEOS-DEV/GEOS/actions/workflows/ci_tests.yml/badge.svg)](https://github.com/GEOS-DEV/GEOS/actions?query=branch%3Adevelop) [![docs](https://readthedocs.com/projects/geosx-geosx/badge/?version=latest)](https://geosx-geosx.readthedocs-hosted.com/en/latest/) Welcome to the GEOS project! From b4b1a3ad46678dc17df8470d17e652b0139399b6 Mon Sep 17 00:00:00 2001 From: Matteo Cusini <49037133+CusiniM@users.noreply.github.com> Date: Fri, 9 Aug 2024 16:40:44 -0400 Subject: [PATCH 11/42] update LvArray submodule (#3277) --- src/coreComponents/LvArray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreComponents/LvArray b/src/coreComponents/LvArray index e7bf1096d57..02ce362c009 160000 --- a/src/coreComponents/LvArray +++ b/src/coreComponents/LvArray @@ -1 +1 @@ -Subproject commit e7bf1096d57558be720f177141c40e4ab69b3f5e +Subproject commit 02ce362c009f11ddb2ade0286df23408d7334c4f From 93b3a72a965fad4cc349674286bafb08761dac86 Mon Sep 17 00:00:00 2001 From: Randolph Settgast Date: Mon, 12 Aug 2024 10:22:42 -1000 Subject: [PATCH 12/42] refactor: Remove "using namespace" in header files (#3255) * remove using namespace dataRepository from headers files * remove using namespace multifluid from NegativeTwoPhaseFlash.hpp * removed using namespace constitutive from headers files * removed using namespace fields from headers files * removed using namespace stabilization from headers files * removed using namespace fluxKernelsHelper from headers files * remove using namespace surfaceGenerationKernelsHelpers from header files --- .../CO2Brine/functions/BrineEnthalpy.hpp | 2 +- .../CO2Brine/functions/CO2Enthalpy.hpp | 2 +- .../CO2Brine/functions/CO2Solubility.hpp | 6 +- .../functions/EzrokhiBrineDensity.hpp | 2 +- .../functions/EzrokhiBrineViscosity.hpp | 2 +- .../functions/FenghourCO2Viscosity.hpp | 2 +- .../functions/PhillipsBrineDensity.hpp | 2 +- .../functions/PhillipsBrineViscosity.hpp | 2 +- .../functions/SpanWagnerCO2Density.hpp | 2 +- .../CO2Brine/functions/WaterDensity.hpp | 2 +- .../fluid/multifluid/MultiFluidBase.hpp | 182 +++++++++--------- .../fluid/multifluid/MultiFluidSelector.hpp | 6 +- .../multifluid/blackOil/BlackOilFluid.hpp | 14 +- .../multifluid/blackOil/DeadOilFluid.hpp | 6 +- ...CompositionalMultiphaseFluidPVTPackage.hpp | 2 +- .../CompositionalMultiphaseFluidUpdates.hpp | 2 +- .../functions/NegativeTwoPhaseFlash.hpp | 5 +- .../models/LohrenzBrayClarkViscosityImpl.hpp | 8 +- .../models/NegativeTwoPhaseFlashModel.hpp | 4 +- .../reactive/ReactiveFluidDriver.hpp | 5 +- .../reactive/ReactiveMultiFluid.hpp | 8 +- .../BrooksCoreyBakerRelativePermeability.hpp | 18 +- .../BrooksCoreyRelativePermeability.hpp | 18 +- .../BrooksCoreyStone2RelativePermeability.hpp | 18 +- .../RelativePermeabilityBase.hpp | 28 +-- .../RelativePermeabilityInterpolators.hpp | 4 +- .../RelativePermeabilitySelector.hpp | 4 +- .../RelpermDriverRunTest.hpp | 15 +- .../TableRelativePermeability.hpp | 34 ++-- .../TableRelativePermeabilityHysteresis.hpp | 50 ++--- .../VanGenuchtenBakerRelativePermeability.hpp | 18 +- ...VanGenuchtenStone2RelativePermeability.hpp | 18 +- .../constitutive/solid/DamageSpectral.hpp | 2 - .../constitutive/solid/TriaxialDriver.hpp | 2 - .../AquiferBoundaryCondition.hpp | 2 +- .../EquilibriumInitialCondition.hpp | 2 +- .../TractionBoundaryCondition.hpp | 2 +- .../fileIO/Outputs/TimeHistoryOutput.cpp | 2 + .../fileIO/timeHistory/HistoryCollection.hpp | 2 - .../fileIO/timeHistory/PackCollection.cpp | 3 + .../mesh/generators/VTKUtilities.cpp | 1 + .../mesh/generators/VTKUtilities.hpp | 9 +- .../SolidMechanicsALMBubbleKernels.hpp | 2 +- .../SolidMechanicsEmbeddedFractures.hpp | 1 - ...ompositionalMultiphaseHybridFVMKernels.cpp | 1 + ...ompositionalMultiphaseHybridFVMKernels.hpp | 97 +++++----- ...ationCompositionalMultiphaseFVMKernels.hpp | 6 +- ...rmalCompositionalMultiphaseBaseKernels.hpp | 170 ++++++++-------- ...ermalCompositionalMultiphaseFVMKernels.cpp | 1 + ...ermalCompositionalMultiphaseFVMKernels.hpp | 172 ++++++++--------- ...ctiveCompositionalMultiphaseOBLKernels.hpp | 4 +- .../fluidFlow/SinglePhaseBase.hpp | 2 +- .../fluidFlow/SinglePhaseFVMKernels.hpp | 13 +- ...lizedCompositionalMultiphaseFVMKernels.hpp | 13 +- .../StabilizedSinglePhaseFVMKernels.hpp | 4 +- ...rmalCompositionalMultiphaseBaseKernels.hpp | 58 +++--- ...ermalCompositionalMultiphaseFVMKernels.hpp | 60 +++--- .../ThermalSinglePhaseFVMKernels.hpp | 12 +- .../ProppantTransportKernels.hpp | 14 +- .../CompositionalMultiphaseWellKernels.cpp | 1 + .../CompositionalMultiphaseWellKernels.hpp | 94 +++++---- .../multiphysics/PoromechanicsSolver.hpp | 24 +-- .../multiphysics/SinglePhasePoromechanics.cpp | 1 + ...ePhasePoromechanicsConformingFractures.hpp | 35 ++-- ...glePhasePoromechanicsEmbeddedFractures.hpp | 35 ++-- ...ePhasePoromechanicsConformingFractures.hpp | 49 +++-- ...glePhasePoromechanicsEmbeddedFractures.hpp | 49 +++-- .../kernels/surfaceGenerationKernels.hpp | 10 +- .../AcousticVTIWaveEquationSEMKernel.hpp | 15 +- .../isotropic/AcousticWaveEquationSEM.cpp | 6 +- .../AcousticWaveEquationSEMKernel.hpp | 8 +- .../ElasticVTIWaveEquationSEMKernel.hpp | 26 +-- .../ElasticWaveEquationSEMKernel.hpp | 32 +-- .../constitutiveTests/MultiFluidTest.hpp | 75 ++++---- .../testMultiFluidCO2Brine.cpp | 1 + ...FluidCompositionalMultiphasePVTPackage.cpp | 1 + .../testMultiFluidDeadOil.cpp | 1 + .../testMultiFluidLiveOil.cpp | 1 + .../fluidFlowTests/testCompFlowUtils.hpp | 13 +- .../fluidFlowTests/testSingleFlowUtils.hpp | 2 - 80 files changed, 785 insertions(+), 842 deletions(-) diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/BrineEnthalpy.hpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/BrineEnthalpy.hpp index cc0978206c0..b29592473a1 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/BrineEnthalpy.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/BrineEnthalpy.hpp @@ -144,7 +144,7 @@ void BrineEnthalpyUpdate::compute( real64 const & pressure, arraySlice1d< real64, USD3 > const & dValue, bool useMass ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; real64 const input[2] = { pressure, temperature }; real64 brineEnthalpy_dTemperature = 0.0; diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/CO2Enthalpy.hpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/CO2Enthalpy.hpp index 41aaa3ea1d5..6f00ccc7a53 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/CO2Enthalpy.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/CO2Enthalpy.hpp @@ -131,7 +131,7 @@ void CO2EnthalpyUpdate::compute( real64 const & pressure, { GEOS_UNUSED_VAR( phaseComposition, dPhaseComposition ); - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; real64 const input[2] = { pressure, temperature }; real64 CO2EnthalpyDeriv[2]{}; diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/CO2Solubility.hpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/CO2Solubility.hpp index d69edc81041..269528420fc 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/CO2Solubility.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/CO2Solubility.hpp @@ -42,8 +42,8 @@ class CO2SolubilityUpdate final : public FlashModelBaseUpdate { public: - using PhaseProp = MultiFluidVar< real64, 3, multifluid::LAYOUT_PHASE, multifluid::LAYOUT_PHASE_DC >; - using PhaseComp = MultiFluidVar< real64, 4, multifluid::LAYOUT_PHASE_COMP, multifluid::LAYOUT_PHASE_COMP_DC >; + using PhaseProp = MultiFluidVar< real64, 3, constitutive::multifluid::LAYOUT_PHASE, constitutive::multifluid::LAYOUT_PHASE_DC >; + using PhaseComp = MultiFluidVar< real64, 4, constitutive::multifluid::LAYOUT_PHASE_COMP, constitutive::multifluid::LAYOUT_PHASE_COMP_DC >; CO2SolubilityUpdate( arrayView1d< real64 const > const & componentMolarWeight, TableFunction const & CO2SolubilityTable, @@ -167,7 +167,7 @@ CO2SolubilityUpdate::compute( real64 const & pressure, PhaseProp::SliceType const phaseFraction, PhaseComp::SliceType const phaseCompFraction ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; // Solubility of CO2 is read from the tables in the form of moles of CO2 per kg of water // Solubility of water is read from the tables in the form of moles of water per kg of CO2 diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineDensity.hpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineDensity.hpp index 17a084355c2..892baf5751f 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineDensity.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineDensity.hpp @@ -173,7 +173,7 @@ void EzrokhiBrineDensityUpdate::compute( real64 const & pressure, bool useMass ) const { constexpr integer numDof = 4; - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; real64 waterSatDensity_dTemperature = 0.0; real64 waterSatPressure_dTemperature = 0.0; diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineViscosity.hpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineViscosity.hpp index 6a8c66be0c3..19db851b67f 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineViscosity.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/EzrokhiBrineViscosity.hpp @@ -158,7 +158,7 @@ void EzrokhiBrineViscosityUpdate::compute( real64 const & pressure, { GEOS_UNUSED_VAR( pressure, useMass ); - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; real64 waterVisc_dTemperature = 0.0; real64 const waterVisc = m_waterViscosityTable.compute( &temperature, &waterVisc_dTemperature ); diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/FenghourCO2Viscosity.hpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/FenghourCO2Viscosity.hpp index 3f9dd756f00..23803a777f9 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/FenghourCO2Viscosity.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/FenghourCO2Viscosity.hpp @@ -125,7 +125,7 @@ void FenghourCO2ViscosityUpdate::compute( real64 const & pressure, dPhaseComposition, useMass ); - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; real64 const input[2] = { pressure, temperature }; real64 densityDeriv[2]{}; diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PhillipsBrineDensity.hpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PhillipsBrineDensity.hpp index 8d5dbe22103..9033b586fa7 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PhillipsBrineDensity.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PhillipsBrineDensity.hpp @@ -136,7 +136,7 @@ void PhillipsBrineDensityUpdate::compute( real64 const & pressure, arraySlice1d< real64, USD3 > const & dValue, bool useMass ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; // this method implements the method proposed by E. Garcia (2001) diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PhillipsBrineViscosity.hpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PhillipsBrineViscosity.hpp index 14dd9c2c65c..e3776fe90cc 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PhillipsBrineViscosity.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/PhillipsBrineViscosity.hpp @@ -140,7 +140,7 @@ void PhillipsBrineViscosityUpdate::compute( real64 const & pressure, dPhaseComposition, useMass ); - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; // compute the viscosity of pure water as a function of temperature real64 dPureWaterVisc_dTemperature; diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/SpanWagnerCO2Density.hpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/SpanWagnerCO2Density.hpp index e68d2ea01d2..c706cd95264 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/SpanWagnerCO2Density.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/SpanWagnerCO2Density.hpp @@ -135,7 +135,7 @@ void SpanWagnerCO2DensityUpdate::compute( real64 const & pressure, { GEOS_UNUSED_VAR( phaseComposition, dPhaseComposition ); - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; real64 const input[2] = { pressure, temperature }; real64 densityDeriv[2]{}; diff --git a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/WaterDensity.hpp b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/WaterDensity.hpp index 96e1eecf0e0..ad3e8dd5c11 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/WaterDensity.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/CO2Brine/functions/WaterDensity.hpp @@ -118,7 +118,7 @@ void WaterDensityUpdate::compute( real64 const & pressure, { GEOS_UNUSED_VAR( phaseComposition, dPhaseComposition, useMass ); - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; real64 const input[2] = { pressure, temperature }; real64 densityDeriv[2]{}; diff --git a/src/coreComponents/constitutive/fluid/multifluid/MultiFluidBase.hpp b/src/coreComponents/constitutive/fluid/multifluid/MultiFluidBase.hpp index 825fac729af..b7b9a387b94 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/MultiFluidBase.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/MultiFluidBase.hpp @@ -128,67 +128,67 @@ class MultiFluidBase : public ConstitutiveBase */ void setMassFlag( bool const flag ) { m_useMass = flag; } - arrayView3d< real64 const, multifluid::USD_PHASE > phaseFraction() const + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseFraction() const { return m_phaseFraction.value; } - arrayView4d< real64 const, multifluid::USD_PHASE_DC > dPhaseFraction() const + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > dPhaseFraction() const { return m_phaseFraction.derivs; } - arrayView3d< real64 const, multifluid::USD_PHASE > phaseDensity() const + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseDensity() const { return m_phaseDensity.value; } - arrayView3d< real64 const, multifluid::USD_PHASE > phaseDensity_n() const + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseDensity_n() const { return m_phaseDensity_n; } - arrayView4d< real64 const, multifluid::USD_PHASE_DC > dPhaseDensity() const + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > dPhaseDensity() const { return m_phaseDensity.derivs; } - arrayView3d< real64 const, multifluid::USD_PHASE > phaseMassDensity() const + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseMassDensity() const { return m_phaseMassDensity.value; } - arrayView4d< real64 const, multifluid::USD_PHASE_DC > dPhaseMassDensity() const + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > dPhaseMassDensity() const { return m_phaseMassDensity.derivs; } - arrayView3d< real64 const, multifluid::USD_PHASE > phaseViscosity() const + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseViscosity() const { return m_phaseViscosity.value; } - arrayView4d< real64 const, multifluid::USD_PHASE_DC > dPhaseViscosity() const + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > dPhaseViscosity() const { return m_phaseViscosity.derivs; } - arrayView4d< real64 const, multifluid::USD_PHASE_COMP > phaseCompFraction() const + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > phaseCompFraction() const { return m_phaseCompFraction.value; } - arrayView4d< real64 const, multifluid::USD_PHASE_COMP > phaseCompFraction_n() const + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > phaseCompFraction_n() const { return m_phaseCompFraction_n; } - arrayView5d< real64 const, multifluid::USD_PHASE_COMP_DC > dPhaseCompFraction() const + arrayView5d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC > dPhaseCompFraction() const { return m_phaseCompFraction.derivs; } - arrayView2d< real64 const, multifluid::USD_FLUID > totalDensity() const + arrayView2d< real64 const, constitutive::multifluid::USD_FLUID > totalDensity() const { return m_totalDensity.value; } - arrayView2d< real64 const, multifluid::USD_FLUID > totalDensity_n() const + arrayView2d< real64 const, constitutive::multifluid::USD_FLUID > totalDensity_n() const { return m_totalDensity_n; } - arrayView3d< real64 const, multifluid::USD_FLUID_DC > dTotalDensity() const + arrayView3d< real64 const, constitutive::multifluid::USD_FLUID_DC > dTotalDensity() const { return m_totalDensity.derivs; } - arrayView3d< real64 const, multifluid::USD_PHASE > phaseEnthalpy() const + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseEnthalpy() const { return m_phaseEnthalpy.value; } - arrayView3d< real64 const, multifluid::USD_PHASE > phaseEnthalpy_n() const + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseEnthalpy_n() const { return m_phaseEnthalpy_n; } - arrayView4d< real64 const, multifluid::USD_PHASE_DC > dPhaseEnthalpy() const + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > dPhaseEnthalpy() const { return m_phaseEnthalpy.derivs; } - arrayView3d< real64 const, multifluid::USD_PHASE > phaseInternalEnergy() const + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseInternalEnergy() const { return m_phaseInternalEnergy.value; } - arrayView3d< real64 const, multifluid::USD_PHASE > phaseInternalEnergy_n() const + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseInternalEnergy_n() const { return m_phaseInternalEnergy_n; } - arrayView4d< real64 const, multifluid::USD_PHASE_DC > dPhaseInternalEnergy() const + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > dPhaseInternalEnergy() const { return m_phaseInternalEnergy.derivs; } /** @@ -222,9 +222,9 @@ class MultiFluidBase : public ConstitutiveBase public: - using PhaseProp = MultiFluidVar< real64, 3, multifluid::LAYOUT_PHASE, multifluid::LAYOUT_PHASE_DC >; - using PhaseComp = MultiFluidVar< real64, 4, multifluid::LAYOUT_PHASE_COMP, multifluid::LAYOUT_PHASE_COMP_DC >; - using FluidProp = MultiFluidVar< real64, 2, multifluid::LAYOUT_FLUID, multifluid::LAYOUT_FLUID_DC >; + using PhaseProp = MultiFluidVar< real64, 3, constitutive::multifluid::LAYOUT_PHASE, constitutive::multifluid::LAYOUT_PHASE_DC >; + using PhaseComp = MultiFluidVar< real64, 4, constitutive::multifluid::LAYOUT_PHASE_COMP, constitutive::multifluid::LAYOUT_PHASE_COMP_DC >; + using FluidProp = MultiFluidVar< real64, 2, constitutive::multifluid::LAYOUT_FLUID, constitutive::multifluid::LAYOUT_FLUID_DC >; public: class KernelWrapper @@ -271,28 +271,28 @@ class MultiFluidBase : public ConstitutiveBase GEOS_FORCE_INLINE integer numPhases() const { return LvArray::integerConversion< integer >( m_phaseFraction.value.size( 2 ) ); } - GEOS_HOST_DEVICE arrayView3d< real64 const, multifluid::USD_PHASE > phaseFraction() const + GEOS_HOST_DEVICE arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseFraction() const { return m_phaseFraction.value; } - GEOS_HOST_DEVICE arrayView3d< real64 const, multifluid::USD_PHASE > phaseDensity() const + GEOS_HOST_DEVICE arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseDensity() const { return m_phaseDensity.value; } - GEOS_HOST_DEVICE arrayView3d< real64 const, multifluid::USD_PHASE > phaseMassDensity() const + GEOS_HOST_DEVICE arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseMassDensity() const { return m_phaseMassDensity.value; } - GEOS_HOST_DEVICE arrayView3d< real64 const, multifluid::USD_PHASE > phaseViscosity() const + GEOS_HOST_DEVICE arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseViscosity() const { return m_phaseViscosity.value; } - GEOS_HOST_DEVICE arrayView4d< real64 const, multifluid::USD_PHASE_COMP > phaseCompFraction() const + GEOS_HOST_DEVICE arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > phaseCompFraction() const { return m_phaseCompFraction.value; } - GEOS_HOST_DEVICE arrayView2d< real64 const, multifluid::USD_FLUID > totalDensity() const + GEOS_HOST_DEVICE arrayView2d< real64 const, constitutive::multifluid::USD_FLUID > totalDensity() const { return m_totalDensity.value; } - GEOS_HOST_DEVICE arrayView3d< real64 const, multifluid::USD_PHASE > phaseEnthalpy() const + GEOS_HOST_DEVICE arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseEnthalpy() const { return m_phaseEnthalpy.value; } - GEOS_HOST_DEVICE arrayView3d< real64 const, multifluid::USD_PHASE > phaseInternalEnergy() const + GEOS_HOST_DEVICE arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > phaseInternalEnergy() const { return m_phaseInternalEnergy.value; } /** @@ -318,13 +318,13 @@ class MultiFluidBase : public ConstitutiveBase real64 const pressure, real64 const temperature, arraySlice1d< real64 const, compflow::USD_COMP - 1 > const & composition, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const & phaseFraction, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const & phaseDensity, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const & phaseMassDensity, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const & phaseViscosity, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const & phaseEnthalpy, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const & phaseInternalEnergy, - arraySlice2d< real64, multifluid::USD_PHASE_COMP-2 > const & phaseCompFraction, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const & phaseFraction, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const & phaseDensity, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const & phaseMassDensity, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const & phaseViscosity, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const & phaseEnthalpy, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const & phaseInternalEnergy, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_COMP-2 > const & phaseCompFraction, real64 & totalDensity ); protected: @@ -404,8 +404,8 @@ class MultiFluidBase : public ConstitutiveBase template< integer maxNumComp, integer maxNumPhase > GEOS_HOST_DEVICE void convertToMassFractions( real64 const (&phaseMolecularWeight)[maxNumPhase], - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseFrac, - arraySlice2d< real64, multifluid::USD_PHASE_COMP - 2 > const phaseCompFrac ) const; + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseFrac, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_COMP - 2 > const phaseCompFrac ) const; /** * @brief Utility function to convert mole fractions to mass fractions and keep derivatives @@ -432,10 +432,10 @@ class MultiFluidBase : public ConstitutiveBase real64 const (&dPhaseMolecularWeight)[maxNumPhase][maxNumComp+2], PhaseProp::SliceType const phaseFrac, PhaseComp::SliceType const phaseCompFrac, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseDens, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseVisc, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseEnthalpy, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseInternalEnergy ) const; + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseDens, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseVisc, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseEnthalpy, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseInternalEnergy ) const; /** * @brief Utility function to compute the internal energy from pressure, enthalpy, and density @@ -450,10 +450,10 @@ class MultiFluidBase : public ConstitutiveBase template< integer maxNumComp, integer maxNumPhase > GEOS_HOST_DEVICE void computeInternalEnergy( real64 const & pressure, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseFrac, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseMassDens, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseEnthalpy, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseInternalEnergy ) const; + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseFrac, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseMassDens, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseEnthalpy, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseInternalEnergy ) const; /** * @brief Utility function to compute the internal energy from pressure, enthalpy, and density and keep derivatives @@ -480,8 +480,8 @@ class MultiFluidBase : public ConstitutiveBase */ template< integer maxNumComp, integer maxNumPhase > GEOS_HOST_DEVICE - void computeTotalDensity( arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseFrac, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseDens, + void computeTotalDensity( arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseFrac, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseDens, real64 & totalDens ) const; /** @@ -523,7 +523,7 @@ class MultiFluidBase : public ConstitutiveBase real64 totalCompressibility( integer const i, integer const q ) const { real64 const totalFluidDensity = totalDensity()( i, q ); - real64 const dTotalFluidDensity_dP = m_totalDensity.derivs( i, q, multifluid::DerivativeOffset::dP ); + real64 const dTotalFluidDensity_dP = m_totalDensity.derivs( i, q, constitutive::multifluid::DerivativeOffset::dP ); return 0.0 < totalFluidDensity ? dTotalFluidDensity_dP / totalFluidDensity : 0.0; } @@ -600,10 +600,10 @@ class MultiFluidBase : public ConstitutiveBase void computeDerivativesWrtMassFractions( real64 const (&dCompMoleFrac_dCompMassFrac)[maxNumComp][maxNumComp], PhaseProp::SliceType const phaseFrac, PhaseComp::SliceType const phaseCompFrac, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseDens, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseVisc, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseEnthalpy, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseInternalEnergy ) const; + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseDens, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseVisc, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseEnthalpy, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseInternalEnergy ) const; /** * @brief Main compute function to update properties in a cell with derivatives (used in Newton iterations) @@ -693,11 +693,11 @@ class MultiFluidBase : public ConstitutiveBase // backup data - array3d< real64, multifluid::LAYOUT_PHASE > m_phaseDensity_n; - array3d< real64, multifluid::LAYOUT_PHASE > m_phaseEnthalpy_n; - array3d< real64, multifluid::LAYOUT_PHASE > m_phaseInternalEnergy_n; - array4d< real64, multifluid::LAYOUT_PHASE_COMP > m_phaseCompFraction_n; - array2d< real64, multifluid::LAYOUT_FLUID > m_totalDensity_n; + array3d< real64, constitutive::multifluid::LAYOUT_PHASE > m_phaseDensity_n; + array3d< real64, constitutive::multifluid::LAYOUT_PHASE > m_phaseEnthalpy_n; + array3d< real64, constitutive::multifluid::LAYOUT_PHASE > m_phaseInternalEnergy_n; + array4d< real64, constitutive::multifluid::LAYOUT_PHASE_COMP > m_phaseCompFraction_n; + array2d< real64, constitutive::multifluid::LAYOUT_FLUID > m_totalDensity_n; }; @@ -708,13 +708,13 @@ MultiFluidBase::KernelWrapper::computeValues( FLUIDWRAPPER const fluidWrapper, real64 const pressure, real64 const temperature, arraySlice1d< real64 const, compflow::USD_COMP - 1 > const & composition, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const & phaseFraction, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const & phaseDensity, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const & phaseMassDensity, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const & phaseViscosity, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const & phaseEnthalpy, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const & phaseInternalEnergy, - arraySlice2d< real64, multifluid::USD_PHASE_COMP-2 > const & phaseCompFraction, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const & phaseFraction, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const & phaseDensity, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const & phaseMassDensity, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const & phaseViscosity, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const & phaseEnthalpy, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const & phaseInternalEnergy, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_COMP-2 > const & phaseCompFraction, real64 & totalDensity ) { integer constexpr maxNumPhase = MAX_NUM_PHASES; @@ -726,9 +726,9 @@ MultiFluidBase::KernelWrapper::computeValues( FLUIDWRAPPER const fluidWrapper, // Allocate data for derivatives. All properties of the same type will use the same memory // space for the derivatives. The derivatives returned will clearly be garbage but the values // should be correct. - StackArray< real64, 4, maxNumDof * maxNumPhase, multifluid::LAYOUT_PHASE_DC > dPhaseProp( 1, 1, numPhase, numComp+2 ); - StackArray< real64, 5, maxNumDof * maxNumComp * maxNumPhase, multifluid::LAYOUT_PHASE_COMP_DC > dPhaseComp( 1, 1, numPhase, numComp, numComp+2 ); - StackArray< real64, 3, maxNumDof, multifluid::LAYOUT_FLUID_DC > dFluidProp( 1, 1, numComp+2 ); + StackArray< real64, 4, maxNumDof * maxNumPhase, constitutive::multifluid::LAYOUT_PHASE_DC > dPhaseProp( 1, 1, numPhase, numComp+2 ); + StackArray< real64, 5, maxNumDof * maxNumComp * maxNumPhase, constitutive::multifluid::LAYOUT_PHASE_COMP_DC > dPhaseComp( 1, 1, numPhase, numComp, numComp+2 ); + StackArray< real64, 3, maxNumDof, constitutive::multifluid::LAYOUT_FLUID_DC > dFluidProp( 1, 1, numComp+2 ); // Wrap the output in multi variable objects PhaseProp::SliceType phaseFractionWrapper { phaseFraction, dPhaseProp[0][0] }; @@ -808,8 +808,8 @@ GEOS_FORCE_INLINE void MultiFluidBase::KernelWrapper:: convertToMassFractions( real64 const (&phaseMolecularWeight)[maxNumPhase], - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseFrac, - arraySlice2d< real64, multifluid::USD_PHASE_COMP - 2 > const phaseCompFrac ) const + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseFrac, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_COMP - 2 > const phaseCompFrac ) const { using namespace multifluid; @@ -854,10 +854,10 @@ MultiFluidBase::KernelWrapper:: real64 const (&dPhaseMolecularWeight)[maxNumPhase][maxNumComp+2], PhaseProp::SliceType const phaseFrac, PhaseComp::SliceType const phaseCompFrac, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseDens, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseVisc, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseEnthalpy, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseInternalEnergy ) const + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseDens, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseVisc, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseEnthalpy, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseInternalEnergy ) const { convertToPhaseMassFractions( phaseMolecularWeight, dPhaseMolecularWeight, @@ -884,7 +884,7 @@ MultiFluidBase::KernelWrapper:: real64 const (&dPhaseMolecularWeight)[maxNumPhase][maxNumDof], PhaseProp::SliceType const phaseFrac ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; integer const numPhase = numPhases(); integer const numComp = numComponents(); @@ -939,7 +939,7 @@ MultiFluidBase::KernelWrapper:: PhaseProp::SliceType const phaseFrac, PhaseComp::SliceType const phaseCompFrac ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; integer const numPhase = numPhases(); integer const numComp = numComponents(); @@ -985,12 +985,12 @@ MultiFluidBase::KernelWrapper:: computeDerivativesWrtMassFractions( real64 const (&dCompMoleFrac_dCompMassFrac)[maxNumComp][maxNumComp], PhaseProp::SliceType const phaseFrac, PhaseComp::SliceType const phaseCompFrac, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseDens, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseVisc, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseEnthalpy, - arraySlice2d< real64, multifluid::USD_PHASE_DC - 2 > const dPhaseInternalEnergy ) const + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseDens, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseVisc, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseEnthalpy, + arraySlice2d< real64, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseInternalEnergy ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; integer const numPhase = numPhases(); integer const numComp = numComponents(); @@ -1017,10 +1017,10 @@ GEOS_FORCE_INLINE void MultiFluidBase::KernelWrapper:: computeInternalEnergy( real64 const & pressure, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseFrac, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseMassDens, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseEnthalpy, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseInternalEnergy ) const + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseFrac, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseMassDens, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseEnthalpy, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseInternalEnergy ) const { using namespace multifluid; @@ -1087,8 +1087,8 @@ template< integer maxNumComp, integer maxNumPhase > GEOS_HOST_DEVICE inline void MultiFluidBase::KernelWrapper:: - computeTotalDensity( arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseFrac, - arraySlice1d< real64, multifluid::USD_PHASE - 2 > const phaseDens, + computeTotalDensity( arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseFrac, + arraySlice1d< real64, constitutive::multifluid::USD_PHASE - 2 > const phaseDens, real64 & totalDens ) const { using namespace multifluid; @@ -1119,7 +1119,7 @@ MultiFluidBase::KernelWrapper:: PhaseProp::SliceType const phaseDensity, FluidProp::SliceType const totalDensity ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; integer const numComp = numComponents(); integer const numPhase = numPhases(); diff --git a/src/coreComponents/constitutive/fluid/multifluid/MultiFluidSelector.hpp b/src/coreComponents/constitutive/fluid/multifluid/MultiFluidSelector.hpp index 470720f3617..8391c62965f 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/MultiFluidSelector.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/MultiFluidSelector.hpp @@ -37,7 +37,7 @@ namespace constitutive { template< typename LAMBDA > -void constitutiveUpdatePassThru( MultiFluidBase const & fluid, +void constitutiveUpdatePassThru( constitutive::MultiFluidBase const & fluid, LAMBDA && lambda ) { ConstitutivePassThruHandler< DeadOilFluid, @@ -59,7 +59,7 @@ void constitutiveUpdatePassThru( MultiFluidBase const & fluid, } template< typename LAMBDA > -void constitutiveUpdatePassThru( MultiFluidBase & fluid, +void constitutiveUpdatePassThru( constitutive::MultiFluidBase & fluid, LAMBDA && lambda ) { ConstitutivePassThruHandler< DeadOilFluid, @@ -117,7 +117,7 @@ struct ComponentSelector< camp::idx_seq< Is ... > > } template< bool THERMAL = false, typename LAMBDA = NoOpFunc > -void constitutiveComponentUpdatePassThru( MultiFluidBase & fluidBase, +void constitutiveComponentUpdatePassThru( constitutive::MultiFluidBase & fluidBase, integer const numComps, LAMBDA && lambda ) { diff --git a/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluid.hpp b/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluid.hpp index 29ff379ea41..832ea0904e8 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluid.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/blackOil/BlackOilFluid.hpp @@ -142,7 +142,7 @@ class BlackOilFluid : public BlackOilFluidBase void computeDensitiesViscosities( bool const needDerivs, real64 const pressure, real64 const composition[NC_BO], - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const & phaseFrac, + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const & phaseFrac, PhaseProp::SliceType const & phaseDens, PhaseProp::SliceType const & phaseMassDens, PhaseProp::SliceType const & phaseVisc, @@ -253,7 +253,7 @@ class BlackOilFluid : public BlackOilFluidBase real64 const dBo_dPres, real64 const dBo_dComp[HNC_BO], real64 & dens, - arraySlice1d< real64, multifluid::USD_PHASE_DC - 3 > const & dDens ) const; + arraySlice1d< real64, constitutive::multifluid::USD_PHASE_DC - 3 > const & dDens ) const; /// Data needed to update the oil phase properties PVTOData::KernelWrapper m_PVTOView; @@ -415,7 +415,7 @@ BlackOilFluid::KernelWrapper:: PhaseProp::SliceType const & phaseFraction, PhaseComp::SliceType const & phaseCompFraction ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; using PT = BlackOilFluid::PhaseType; integer const ipOil = m_phaseOrder[PT::OIL]; @@ -563,14 +563,14 @@ BlackOilFluid::KernelWrapper:: computeDensitiesViscosities( bool const needDerivs, real64 const pressure, real64 const composition[NC_BO], - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const & phaseFrac, + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const & phaseFrac, PhaseProp::SliceType const & phaseDens, PhaseProp::SliceType const & phaseMassDens, PhaseProp::SliceType const & phaseVisc, real64 phaseMolecularWeight[NP_BO], real64 dPhaseMolecularWeight[NP_BO][NC_BO+2] ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; using PT = BlackOilFluid::PhaseType; integer const ipOil = m_phaseOrder[PT::OIL]; @@ -905,9 +905,9 @@ BlackOilFluid::KernelWrapper:: real64 const dBo_dPres, real64 const dBo_dComp[HNC_BO], real64 & dens, - arraySlice1d< real64, multifluid::USD_PHASE_DC - 3 > const & dDens ) const + arraySlice1d< real64, constitutive::multifluid::USD_PHASE_DC - 3 > const & dDens ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; using PT = BlackOilFluid::PhaseType; real64 const oilDens = (useMass)? m_PVTOView.m_surfaceMassDensity[PT::OIL]: diff --git a/src/coreComponents/constitutive/fluid/multifluid/blackOil/DeadOilFluid.hpp b/src/coreComponents/constitutive/fluid/multifluid/blackOil/DeadOilFluid.hpp index 361f15aa343..e0405f17f20 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/blackOil/DeadOilFluid.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/blackOil/DeadOilFluid.hpp @@ -161,7 +161,7 @@ DeadOilFluid::KernelWrapper:: computeDensities( real64 const pressure, PhaseProp::SliceType const & phaseMassDens ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; LvArray::forValuesInSlice( phaseMassDens.derivs, []( real64 & val ){ val = 0.0; } ); @@ -207,7 +207,7 @@ DeadOilFluid::KernelWrapper:: computeViscosities( real64 const pressure, PhaseProp::SliceType const & phaseVisc ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; LvArray::forValuesInSlice( phaseVisc.derivs, []( real64 & val ){ val = 0.0; } ); @@ -255,7 +255,7 @@ DeadOilFluid::KernelWrapper:: { GEOS_UNUSED_VAR( temperature, phaseEnthalpy, phaseInternalEnergy ); - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; integer const nComps = numComponents(); integer const nPhases = numPhases(); diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidPVTPackage.hpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidPVTPackage.hpp index 85bb218a6f3..3df983ad857 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidPVTPackage.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidPVTPackage.hpp @@ -188,7 +188,7 @@ CompositionalMultiphaseFluidPVTPackage::KernelWrapper:: GEOS_UNUSED_VAR( totalDensity ); #else - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; integer constexpr maxNumComp = MultiFluidBase::MAX_NUM_COMPONENTS; integer constexpr maxNumPhase = MultiFluidBase::MAX_NUM_PHASES; diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidUpdates.hpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidUpdates.hpp index bcf0e5c482e..7b37415f954 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidUpdates.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidUpdates.hpp @@ -421,7 +421,7 @@ convertDerivativesToTotalMoleFraction( integer const numComps, arraySlice1d< real64, USD2 > const & dProperty, arraySlice1d< real64 > const & workSpace ) { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; integer const numDofs = numComps + 2; for( integer kc = 0; kc < numDofs; ++kc ) { diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/functions/NegativeTwoPhaseFlash.hpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/functions/NegativeTwoPhaseFlash.hpp index be61c18688d..96b2bdf5de4 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/compositional/functions/NegativeTwoPhaseFlash.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/functions/NegativeTwoPhaseFlash.hpp @@ -32,15 +32,12 @@ namespace geos namespace constitutive { - -using namespace multifluid; - namespace compositional { struct NegativeTwoPhaseFlash { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; public: /** diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/models/LohrenzBrayClarkViscosityImpl.hpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/LohrenzBrayClarkViscosityImpl.hpp index 77b624b50a2..cb87558e693 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/compositional/models/LohrenzBrayClarkViscosityImpl.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/LohrenzBrayClarkViscosityImpl.hpp @@ -136,7 +136,7 @@ void LohrenzBrayClarkViscosityUpdate::computePhaseDiluteViscosity_HerningZippere real64 & phaseViscosity, arraySlice1d< real64, USD2 > const & dPhaseViscosity ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; GEOS_UNUSED_VAR( temperature ); real64 A = 0.0; @@ -175,7 +175,7 @@ void LohrenzBrayClarkViscosityUpdate::computePhaseDiluteViscosity_Wilke( integer real64 & phaseViscosity, arraySlice1d< real64, USD2 > const & dPhaseViscosity ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; GEOS_UNUSED_VAR( temperature ); // compute the "phi" interaction matrix (and its temperature derivatives) @@ -256,7 +256,7 @@ void LohrenzBrayClarkViscosityUpdate::computePhaseDiluteViscosity_Brokaw( intege real64 & phaseViscosity, arraySlice1d< real64, USD2 > const & dPhaseViscosity ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; GEOS_UNUSED_VAR( temperature ); // Compute the "phi" interaction matrix (constant, as only function of molecular weights) @@ -324,7 +324,7 @@ void LohrenzBrayClarkViscosityUpdate::computePhaseViscosity_LohrenzBrayClark( in real64 & phaseViscosity, arraySlice1d< real64, USD2 > const & dPhaseViscosity ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; // Compute phase pseudo properties via Kay's mixing rule real64 phaseCriticalPressure = 0.0; real64 phaseCriticalTemperature = 0.0; diff --git a/src/coreComponents/constitutive/fluid/multifluid/compositional/models/NegativeTwoPhaseFlashModel.hpp b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/NegativeTwoPhaseFlashModel.hpp index 32300637aea..ec5c1423f4d 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/compositional/models/NegativeTwoPhaseFlashModel.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/compositional/models/NegativeTwoPhaseFlashModel.hpp @@ -42,8 +42,8 @@ class NegativeTwoPhaseFlashModelUpdate final : public FunctionBaseUpdate { public: - using PhaseProp = MultiFluidVar< real64, 3, multifluid::LAYOUT_PHASE, multifluid::LAYOUT_PHASE_DC >; - using PhaseComp = MultiFluidVar< real64, 4, multifluid::LAYOUT_PHASE_COMP, multifluid::LAYOUT_PHASE_COMP_DC >; + using PhaseProp = MultiFluidVar< real64, 3, constitutive::multifluid::LAYOUT_PHASE, constitutive::multifluid::LAYOUT_PHASE_DC >; + using PhaseComp = MultiFluidVar< real64, 4, constitutive::multifluid::LAYOUT_PHASE_COMP, constitutive::multifluid::LAYOUT_PHASE_COMP_DC >; NegativeTwoPhaseFlashModelUpdate( integer const numComponents, integer const liquidIndex, diff --git a/src/coreComponents/constitutive/fluid/multifluid/reactive/ReactiveFluidDriver.hpp b/src/coreComponents/constitutive/fluid/multifluid/reactive/ReactiveFluidDriver.hpp index 5f8ff2f2597..4c36e18cdb1 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/reactive/ReactiveFluidDriver.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/reactive/ReactiveFluidDriver.hpp @@ -32,8 +32,6 @@ namespace geos { -using namespace constitutive; - /** * @class ReactiveFluidDriver * @@ -114,7 +112,8 @@ class ReactiveFluidDriver : public TaskBase enum columnKeys { TIME, PRES, TEMP }; ///< Enumeration of "input" column keys for readability - static constexpr real64 m_baselineTol = MultiFluidConstants::baselineTolerance; ///< Comparison tolerance for baseline results + static constexpr real64 m_baselineTol = constitutive::MultiFluidConstants::baselineTolerance; ///< Comparison tolerance for baseline + ///< results }; } /* namespace geos */ diff --git a/src/coreComponents/constitutive/fluid/multifluid/reactive/ReactiveMultiFluid.hpp b/src/coreComponents/constitutive/fluid/multifluid/reactive/ReactiveMultiFluid.hpp index 4fd8f6c9fb3..35c629ef71d 100644 --- a/src/coreComponents/constitutive/fluid/multifluid/reactive/ReactiveMultiFluid.hpp +++ b/src/coreComponents/constitutive/fluid/multifluid/reactive/ReactiveMultiFluid.hpp @@ -189,13 +189,13 @@ class ReactiveMultiFluid : public MultiFluidBase std::unique_ptr< chemicalReactions::KineticReactions > m_kineticReactions; - array2d< real64, multifluid::LAYOUT_FLUID > m_primarySpeciesConcentration; + array2d< real64, constitutive::multifluid::LAYOUT_FLUID > m_primarySpeciesConcentration; - array2d< real64, multifluid::LAYOUT_FLUID > m_secondarySpeciesConcentration; + array2d< real64, constitutive::multifluid::LAYOUT_FLUID > m_secondarySpeciesConcentration; - array2d< real64, multifluid::LAYOUT_FLUID > m_primarySpeciesTotalConcentration; + array2d< real64, constitutive::multifluid::LAYOUT_FLUID > m_primarySpeciesTotalConcentration; - array2d< real64, multifluid::LAYOUT_FLUID > m_kineticReactionRates; + array2d< real64, constitutive::multifluid::LAYOUT_FLUID > m_kineticReactionRates; }; inline void diff --git a/src/coreComponents/constitutive/relativePermeability/BrooksCoreyBakerRelativePermeability.hpp b/src/coreComponents/constitutive/relativePermeability/BrooksCoreyBakerRelativePermeability.hpp index 584dffca25a..210a1f8b9e8 100644 --- a/src/coreComponents/constitutive/relativePermeability/BrooksCoreyBakerRelativePermeability.hpp +++ b/src/coreComponents/constitutive/relativePermeability/BrooksCoreyBakerRelativePermeability.hpp @@ -40,9 +40,9 @@ class BrooksCoreyBakerRelativePermeabilityUpdate final : public RelativePermeabi real64 const volFracScale, arrayView1d< integer const > const & phaseTypes, arrayView1d< integer const > const & phaseOrder, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseRelPerm, - arrayView4d< real64, relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseTrappedVolFrac ) + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseRelPerm, + arrayView4d< real64, constitutive::relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseTrappedVolFrac ) : RelativePermeabilityBaseUpdate( phaseTypes, phaseOrder, phaseRelPerm, @@ -58,9 +58,9 @@ class BrooksCoreyBakerRelativePermeabilityUpdate final : public RelativePermeabi GEOS_HOST_DEVICE void compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; GEOS_HOST_DEVICE virtual void update( localIndex const k, @@ -164,9 +164,9 @@ GEOS_HOST_DEVICE inline void BrooksCoreyBakerRelativePermeabilityUpdate:: compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const { LvArray::forValuesInSlice( dPhaseRelPerm_dPhaseVolFrac, []( real64 & val ){ val = 0.0; } ); diff --git a/src/coreComponents/constitutive/relativePermeability/BrooksCoreyRelativePermeability.hpp b/src/coreComponents/constitutive/relativePermeability/BrooksCoreyRelativePermeability.hpp index 38908ea028a..f1b382deeeb 100644 --- a/src/coreComponents/constitutive/relativePermeability/BrooksCoreyRelativePermeability.hpp +++ b/src/coreComponents/constitutive/relativePermeability/BrooksCoreyRelativePermeability.hpp @@ -37,9 +37,9 @@ class BrooksCoreyRelativePermeabilityUpdate final : public RelativePermeabilityB real64 const volFracScale, arrayView1d< integer const > const & phaseTypes, arrayView1d< integer const > const & phaseOrder, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseRelPerm, - arrayView4d< real64, relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseTrappedVolFrac ) + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseRelPerm, + arrayView4d< real64, constitutive::relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseTrappedVolFrac ) : RelativePermeabilityBaseUpdate( phaseTypes, phaseOrder, phaseRelPerm, @@ -53,9 +53,9 @@ class BrooksCoreyRelativePermeabilityUpdate final : public RelativePermeabilityB GEOS_HOST_DEVICE void compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; GEOS_HOST_DEVICE virtual void update( localIndex const k, @@ -125,9 +125,9 @@ GEOS_HOST_DEVICE inline void BrooksCoreyRelativePermeabilityUpdate:: compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const { LvArray::forValuesInSlice( dPhaseRelPerm_dPhaseVolFrac, []( real64 & val ){ val = 0.0; } ); diff --git a/src/coreComponents/constitutive/relativePermeability/BrooksCoreyStone2RelativePermeability.hpp b/src/coreComponents/constitutive/relativePermeability/BrooksCoreyStone2RelativePermeability.hpp index a73d7894d54..6f60e69fcbe 100644 --- a/src/coreComponents/constitutive/relativePermeability/BrooksCoreyStone2RelativePermeability.hpp +++ b/src/coreComponents/constitutive/relativePermeability/BrooksCoreyStone2RelativePermeability.hpp @@ -40,9 +40,9 @@ class BrooksCoreyStone2RelativePermeabilityUpdate final : public RelativePermeab real64 const volFracScale, arrayView1d< integer const > const & phaseTypes, arrayView1d< integer const > const & phaseOrder, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseRelPerm, - arrayView4d< real64, relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseTrappedVolFrac ) + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseRelPerm, + arrayView4d< real64, constitutive::relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseTrappedVolFrac ) : RelativePermeabilityBaseUpdate( phaseTypes, phaseOrder, phaseRelPerm, @@ -58,9 +58,9 @@ class BrooksCoreyStone2RelativePermeabilityUpdate final : public RelativePermeab GEOS_HOST_DEVICE void compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; GEOS_HOST_DEVICE virtual void update( localIndex const k, @@ -162,9 +162,9 @@ GEOS_HOST_DEVICE inline void BrooksCoreyStone2RelativePermeabilityUpdate:: compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const { LvArray::forValuesInSlice( dPhaseRelPerm_dPhaseVolFrac, []( real64 & val ){ val = 0.0; } ); diff --git a/src/coreComponents/constitutive/relativePermeability/RelativePermeabilityBase.hpp b/src/coreComponents/constitutive/relativePermeability/RelativePermeabilityBase.hpp index 00f8f9a5be1..86bf7c44e58 100644 --- a/src/coreComponents/constitutive/relativePermeability/RelativePermeabilityBase.hpp +++ b/src/coreComponents/constitutive/relativePermeability/RelativePermeabilityBase.hpp @@ -58,7 +58,7 @@ class RelativePermeabilityBaseUpdate */ GEOS_HOST_DEVICE - arrayView3d< real64 const, relperm::USD_RELPERM > relperm() const + arrayView3d< real64 const, constitutive::relperm::USD_RELPERM > relperm() const { return m_phaseRelPerm; } /** @@ -87,9 +87,9 @@ class RelativePermeabilityBaseUpdate RelativePermeabilityBaseUpdate( arrayView1d< integer const > const & phaseTypes, arrayView1d< integer const > const & phaseOrder, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseRelPerm, - arrayView4d< real64, relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseTrappedVolFrac ) + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseRelPerm, + arrayView4d< real64, constitutive::relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseTrappedVolFrac ) : m_phaseTypes( phaseTypes ), m_phaseOrder( phaseOrder ), m_phaseRelPerm( phaseRelPerm ), @@ -99,10 +99,10 @@ class RelativePermeabilityBaseUpdate arrayView1d< integer const > m_phaseTypes; arrayView1d< integer const > m_phaseOrder; - arrayView3d< real64, relperm::USD_RELPERM > m_phaseRelPerm; - arrayView4d< real64, relperm::USD_RELPERM_DS > m_dPhaseRelPerm_dPhaseVolFrac; + arrayView3d< real64, constitutive::relperm::USD_RELPERM > m_phaseRelPerm; + arrayView4d< real64, constitutive::relperm::USD_RELPERM_DS > m_dPhaseRelPerm_dPhaseVolFrac; - arrayView3d< real64, relperm::USD_RELPERM > m_phaseTrappedVolFrac; + arrayView3d< real64, constitutive::relperm::USD_RELPERM > m_phaseTrappedVolFrac; private: GEOS_HOST_DEVICE @@ -157,10 +157,10 @@ class RelativePermeabilityBase : public ConstitutiveBase arrayView1d< string const > phaseNames() const { return m_phaseNames; } - arrayView3d< real64 const, relperm::USD_RELPERM > phaseTrappedVolFraction() const { return m_phaseTrappedVolFrac; } + arrayView3d< real64 const, constitutive::relperm::USD_RELPERM > phaseTrappedVolFraction() const { return m_phaseTrappedVolFrac; } - arrayView3d< real64 const, relperm::USD_RELPERM > phaseRelPerm() const { return m_phaseRelPerm; } - arrayView4d< real64 const, relperm::USD_RELPERM_DS > dPhaseRelPerm_dPhaseVolFraction() const { return m_dPhaseRelPerm_dPhaseVolFrac; } + arrayView3d< real64 const, constitutive::relperm::USD_RELPERM > phaseRelPerm() const { return m_phaseRelPerm; } + arrayView4d< real64 const, constitutive::relperm::USD_RELPERM_DS > dPhaseRelPerm_dPhaseVolFraction() const { return m_dPhaseRelPerm_dPhaseVolFrac; } arrayView1d< integer const > getPhaseOrder() const { return m_phaseOrder; } virtual arrayView1d< real64 const > getPhaseMinVolumeFraction() const = 0; @@ -213,10 +213,10 @@ class RelativePermeabilityBase : public ConstitutiveBase protected: // output quantities - array3d< real64, relperm::LAYOUT_RELPERM > m_phaseRelPerm; - array3d< real64, relperm::LAYOUT_RELPERM > m_phaseRelPerm_n; - array4d< real64, relperm::LAYOUT_RELPERM_DS > m_dPhaseRelPerm_dPhaseVolFrac; - array3d< real64, relperm::LAYOUT_RELPERM > m_phaseTrappedVolFrac; + array3d< real64, constitutive::relperm::LAYOUT_RELPERM > m_phaseRelPerm; + array3d< real64, constitutive::relperm::LAYOUT_RELPERM > m_phaseRelPerm_n; + array4d< real64, constitutive::relperm::LAYOUT_RELPERM_DS > m_dPhaseRelPerm_dPhaseVolFrac; + array3d< real64, constitutive::relperm::LAYOUT_RELPERM > m_phaseTrappedVolFrac; }; diff --git a/src/coreComponents/constitutive/relativePermeability/RelativePermeabilityInterpolators.hpp b/src/coreComponents/constitutive/relativePermeability/RelativePermeabilityInterpolators.hpp index 2b91a498afb..0b4f49bb9f1 100644 --- a/src/coreComponents/constitutive/relativePermeability/RelativePermeabilityInterpolators.hpp +++ b/src/coreComponents/constitutive/relativePermeability/RelativePermeabilityInterpolators.hpp @@ -60,7 +60,7 @@ struct Baker real64 const & goRelPerm, real64 const & dGoRelPerm_dOilVolFrac, real64 & threePhaseRelPerm, - arraySlice1d< real64, relperm::USD_RELPERM_DS - 3 > const & dThreePhaseRelPerm_dVolFrac ) + arraySlice1d< real64, constitutive::relperm::USD_RELPERM_DS - 3 > const & dThreePhaseRelPerm_dVolFrac ) { using PT = RelativePermeabilityBase::PhaseType; integer const ipWater = phaseOrder[PT::WATER]; @@ -148,7 +148,7 @@ struct Stone2 real64 const & gRelPerm, real64 const & dGRelPerm_dGasVolFrac, real64 & threePhaseRelPerm, - arraySlice1d< real64, relperm::USD_RELPERM_DS - 3 > const & dThreePhaseRelPerm_dVolFrac ) + arraySlice1d< real64, constitutive::relperm::USD_RELPERM_DS - 3 > const & dThreePhaseRelPerm_dVolFrac ) { using PT = RelativePermeabilityBase::PhaseType; diff --git a/src/coreComponents/constitutive/relativePermeability/RelativePermeabilitySelector.hpp b/src/coreComponents/constitutive/relativePermeability/RelativePermeabilitySelector.hpp index 4f4f1622661..6329538cda5 100644 --- a/src/coreComponents/constitutive/relativePermeability/RelativePermeabilitySelector.hpp +++ b/src/coreComponents/constitutive/relativePermeability/RelativePermeabilitySelector.hpp @@ -51,7 +51,7 @@ void constitutiveUpdatePassThru( RelativePermeabilityBase const & relPerm, BrooksCoreyBakerRelativePermeability, BrooksCoreyStone2RelativePermeability, TableRelativePermeability, - TableRelativePermeabilityHysteresis, + constitutive::TableRelativePermeabilityHysteresis, VanGenuchtenBakerRelativePermeability, VanGenuchtenStone2RelativePermeability >::execute( relPerm, std::forward< LAMBDA >( lambda ) ); } @@ -64,7 +64,7 @@ void constitutiveUpdatePassThru( RelativePermeabilityBase & relPerm, BrooksCoreyBakerRelativePermeability, BrooksCoreyStone2RelativePermeability, TableRelativePermeability, - TableRelativePermeabilityHysteresis, + constitutive::TableRelativePermeabilityHysteresis, VanGenuchtenBakerRelativePermeability, VanGenuchtenStone2RelativePermeability >::execute( relPerm, std::forward< LAMBDA >( lambda ) ); } diff --git a/src/coreComponents/constitutive/relativePermeability/RelpermDriverRunTest.hpp b/src/coreComponents/constitutive/relativePermeability/RelpermDriverRunTest.hpp index a6fe4f06212..f361beaf00c 100644 --- a/src/coreComponents/constitutive/relativePermeability/RelpermDriverRunTest.hpp +++ b/src/coreComponents/constitutive/relativePermeability/RelpermDriverRunTest.hpp @@ -24,11 +24,10 @@ namespace geos { -using namespace constitutive; - //specific to Hysteresis template< typename RELPERM_TYPE > -std::enable_if_t< std::is_same< TableRelativePermeabilityHysteresis, RELPERM_TYPE >::value, void > +std::enable_if_t< std::is_same< constitutive::TableRelativePermeabilityHysteresis, + RELPERM_TYPE >::value, void > RelpermDriver::runTest( RELPERM_TYPE & relperm, const arrayView2d< real64 > & table ) { @@ -37,7 +36,7 @@ RelpermDriver::runTest( RELPERM_TYPE & relperm, // create kernel wrapper - typename TableRelativePermeabilityHysteresis::KernelWrapper const kernelWrapper = relperm.createKernelWrapper(); + typename constitutive::TableRelativePermeabilityHysteresis::KernelWrapper const kernelWrapper = relperm.createKernelWrapper(); // set saturation to user specified feed // it is more convenient to provide input in molar, so perform molar to mass conversion here @@ -91,15 +90,15 @@ RelpermDriver::runTest( RELPERM_TYPE & relperm, arrayView2d< real64 const, compflow::USD_PHASE > const saturation = saturationValues.toViewConst(); - auto const & phaseHasHysteresis = relperm.template getReference< array1d< integer > >( TableRelativePermeabilityHysteresis::viewKeyStruct::phaseHasHysteresisString()); + auto const & phaseHasHysteresis = relperm.template getReference< array1d< integer > >( constitutive::TableRelativePermeabilityHysteresis::viewKeyStruct::phaseHasHysteresisString()); arrayView2d< real64, compflow::USD_PHASE > phaseMaxHistoricalVolFraction = relperm.template getField< fields::relperm::phaseMaxHistoricalVolFraction >().reference(); arrayView2d< real64, compflow::USD_PHASE > phaseMinHistoricalVolFraction = relperm.template getField< fields::relperm::phaseMinHistoricalVolFraction >().reference(); arrayView1d< real64 > const drainagePhaseMinVolFraction = relperm.template getReference< array1d< real64 > >( - TableRelativePermeabilityHysteresis::viewKeyStruct::drainagePhaseMinVolumeFractionString()); + constitutive::TableRelativePermeabilityHysteresis::viewKeyStruct::drainagePhaseMinVolumeFractionString()); arrayView1d< real64 > const drainagePhaseMaxVolFraction = relperm.template getReference< array1d< real64 > >( - TableRelativePermeabilityHysteresis::viewKeyStruct::drainagePhaseMaxVolumeFractionString()); + constitutive::TableRelativePermeabilityHysteresis::viewKeyStruct::drainagePhaseMaxVolumeFractionString()); //setting for drainage { @@ -165,7 +164,7 @@ RelpermDriver::runTest( RELPERM_TYPE & relperm, } template< typename RELPERM_TYPE > -std::enable_if_t< !std::is_same< TableRelativePermeabilityHysteresis, RELPERM_TYPE >::value, void > +std::enable_if_t< !std::is_same< constitutive::TableRelativePermeabilityHysteresis, RELPERM_TYPE >::value, void > RelpermDriver::runTest( RELPERM_TYPE & relperm, const arrayView2d< real64 > & table ) { diff --git a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeability.hpp b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeability.hpp index 81ebbe2d5a0..7d7be256a4a 100644 --- a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeability.hpp +++ b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeability.hpp @@ -73,31 +73,31 @@ class TableRelativePermeability : public RelativePermeabilityBase arrayView1d< integer const > const & phaseTypes, arrayView1d< integer const > const & phaseOrder, ThreePhaseInterpolator const & threePhaseInterpolator, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseRelPerm, - arrayView4d< real64, relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseTrappedVolFrac ); + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseRelPerm, + arrayView4d< real64, constitutive::relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseTrappedVolFrac ); GEOS_HOST_DEVICE void computeTwoPhase( integer const ipWetting, integer const ipNonWetting, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; GEOS_HOST_DEVICE void computeThreePhase( integer const ipWetting, integer const ipInter, integer const ipNonWetting, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; GEOS_HOST_DEVICE void compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; GEOS_HOST_DEVICE virtual void update( localIndex const k, @@ -190,8 +190,8 @@ TableRelativePermeability::KernelWrapper:: computeTwoPhase( integer const ipWetting, integer const ipNonWetting, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const { using TPT = TableRelativePermeability::TwoPhasePairPhaseType; @@ -216,8 +216,8 @@ TableRelativePermeability::KernelWrapper:: integer const ipInter, integer const ipNonWetting, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const { real64 interRelPerm_wi = 0; // oil rel perm using two-phase gas-oil data real64 dInterRelPerm_wi_dInterVolFrac = 0; // derivative w.r.t to So @@ -295,9 +295,9 @@ GEOS_HOST_DEVICE inline void TableRelativePermeability::KernelWrapper:: compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const { LvArray::forValuesInSlice( dPhaseRelPerm_dPhaseVolFrac, []( real64 & val ){ val = 0.0; } ); diff --git a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.hpp b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.hpp index 9b50ca2fdf4..97a50d598b9 100644 --- a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.hpp +++ b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.hpp @@ -135,9 +135,9 @@ class TableRelativePermeabilityHysteresis : public RelativePermeabilityBase real64 const & waterOilRelPermMaxValue, arrayView2d< real64 const, compflow::USD_PHASE > const & phaseMinHistoricalVolFraction, arrayView2d< real64 const, compflow::USD_PHASE > const & phaseMaxHistoricalVolFraction, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseTrappedVolFrac, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseRelPerm, - arrayView4d< real64, relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac ); + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseTrappedVolFrac, + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseRelPerm, + arrayView4d< real64, constitutive::relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac ); /** * @brief Function updating the relperm (and derivative) for a phase using the drainage table @@ -256,10 +256,10 @@ class TableRelativePermeabilityHysteresis : public RelativePermeabilityBase arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseMaxHistoricalVolFraction, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseMinHistoricalVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, arraySlice2d< real64, - relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; + constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; /** * @brief Function updating all the phase relperms (and derivatives) for three-phase flow @@ -281,10 +281,10 @@ class TableRelativePermeabilityHysteresis : public RelativePermeabilityBase arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseMaxHistoricalVolFraction, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseMinHistoricalVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, arraySlice2d< real64, - relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; + constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; /** * @brief Main function updating all the phase relperms (and derivatives) @@ -298,9 +298,9 @@ class TableRelativePermeabilityHysteresis : public RelativePermeabilityBase void compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseMaxHistoricalVolFraction, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseMinHistoricalVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; GEOS_HOST_DEVICE virtual void update( localIndex const k, @@ -780,12 +780,12 @@ TableRelativePermeabilityHysteresis::KernelWrapper:: arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseMaxHistoricalVolFraction, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseMinHistoricalVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const { - using TPT = TableRelativePermeabilityHysteresis::TwoPhasePairPhaseType; - using IPT = TableRelativePermeabilityHysteresis::ImbibitionPhasePairPhaseType; + using TPT = constitutive::TableRelativePermeabilityHysteresis::TwoPhasePairPhaseType; + using IPT = constitutive::TableRelativePermeabilityHysteresis::ImbibitionPhasePairPhaseType; // ---------- wetting rel perm if( !m_phaseHasHysteresis[IPT::WETTING] || @@ -870,17 +870,17 @@ TableRelativePermeabilityHysteresis::KernelWrapper:: arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseMaxHistoricalVolFraction, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseMinHistoricalVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const { real64 interRelPerm_wi = 0; // oil rel perm using two-phase gas-oil data real64 dInterRelPerm_wi_dInterVolFrac = 0; // derivative w.r.t to So real64 interRelPerm_nwi = 0; // oil rel perm using two-phase gas-oil data real64 dInterRelPerm_nwi_dInterVolFrac = 0; // derivative w.r.t to So - using TPT = TableRelativePermeabilityHysteresis::ThreePhasePairPhaseType; - using IPT = TableRelativePermeabilityHysteresis::ImbibitionPhasePairPhaseType; + using TPT = constitutive::TableRelativePermeabilityHysteresis::ThreePhasePairPhaseType; + using IPT = constitutive::TableRelativePermeabilityHysteresis::ImbibitionPhasePairPhaseType; // 1) Wetting and intermediate phase relative permeabilities using two-phase wetting-intermediate data @@ -1013,9 +1013,9 @@ TableRelativePermeabilityHysteresis::KernelWrapper:: compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseMaxHistoricalVolFraction, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseMinHistoricalVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const { LvArray::forValuesInSlice( dPhaseRelPerm_dPhaseVolFrac, []( real64 & val ) { val = 0.0; } ); diff --git a/src/coreComponents/constitutive/relativePermeability/VanGenuchtenBakerRelativePermeability.hpp b/src/coreComponents/constitutive/relativePermeability/VanGenuchtenBakerRelativePermeability.hpp index 2ac9e4ce0b6..18c30499a01 100644 --- a/src/coreComponents/constitutive/relativePermeability/VanGenuchtenBakerRelativePermeability.hpp +++ b/src/coreComponents/constitutive/relativePermeability/VanGenuchtenBakerRelativePermeability.hpp @@ -40,9 +40,9 @@ class VanGenuchtenBakerRelativePermeabilityUpdate final : public RelativePermeab real64 const volFracScale, arrayView1d< integer const > const & phaseTypes, arrayView1d< integer const > const & phaseOrder, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseRelPerm, - arrayView4d< real64, relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseTrappedVolFrac ) + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseRelPerm, + arrayView4d< real64, constitutive::relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseTrappedVolFrac ) : RelativePermeabilityBaseUpdate( phaseTypes, phaseOrder, phaseRelPerm, @@ -58,9 +58,9 @@ class VanGenuchtenBakerRelativePermeabilityUpdate final : public RelativePermeab GEOS_HOST_DEVICE void compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; GEOS_HOST_DEVICE virtual void update( localIndex const k, @@ -162,9 +162,9 @@ GEOS_HOST_DEVICE inline void VanGenuchtenBakerRelativePermeabilityUpdate:: compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const { LvArray::forValuesInSlice( dPhaseRelPerm_dPhaseVolFrac, []( real64 & val ){ val = 0.0; } ); diff --git a/src/coreComponents/constitutive/relativePermeability/VanGenuchtenStone2RelativePermeability.hpp b/src/coreComponents/constitutive/relativePermeability/VanGenuchtenStone2RelativePermeability.hpp index 2753175bfd7..46a95e5b212 100644 --- a/src/coreComponents/constitutive/relativePermeability/VanGenuchtenStone2RelativePermeability.hpp +++ b/src/coreComponents/constitutive/relativePermeability/VanGenuchtenStone2RelativePermeability.hpp @@ -40,9 +40,9 @@ class VanGenuchtenStone2RelativePermeabilityUpdate final : public RelativePermea real64 const volFracScale, arrayView1d< integer const > const & phaseTypes, arrayView1d< integer const > const & phaseOrder, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseRelPerm, - arrayView4d< real64, relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseTrappedVolFrac ) + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseRelPerm, + arrayView4d< real64, constitutive::relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, + arrayView3d< real64, constitutive::relperm::USD_RELPERM > const & phaseTrappedVolFrac ) : RelativePermeabilityBaseUpdate( phaseTypes, phaseOrder, phaseRelPerm, @@ -58,9 +58,9 @@ class VanGenuchtenStone2RelativePermeabilityUpdate final : public RelativePermea GEOS_HOST_DEVICE void compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const; GEOS_HOST_DEVICE virtual void update( localIndex const k, @@ -163,9 +163,9 @@ GEOS_HOST_DEVICE inline void VanGenuchtenStone2RelativePermeabilityUpdate:: compute( arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFraction, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, - arraySlice1d< real64, relperm::USD_RELPERM - 2 > const & phaseRelPerm, - arraySlice2d< real64, relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseTrappedVolFrac, + arraySlice1d< real64, constitutive::relperm::USD_RELPERM - 2 > const & phaseRelPerm, + arraySlice2d< real64, constitutive::relperm::USD_RELPERM_DS - 2 > const & dPhaseRelPerm_dPhaseVolFrac ) const { LvArray::forValuesInSlice( dPhaseRelPerm_dPhaseVolFrac, []( real64 & val ){ val = 0.0; } ); diff --git a/src/coreComponents/constitutive/solid/DamageSpectral.hpp b/src/coreComponents/constitutive/solid/DamageSpectral.hpp index 10439797fed..1bd6c35d30e 100644 --- a/src/coreComponents/constitutive/solid/DamageSpectral.hpp +++ b/src/coreComponents/constitutive/solid/DamageSpectral.hpp @@ -29,8 +29,6 @@ #define QUADRATIC_DISSIPATION 0 -using namespace LvArray; - namespace geos { namespace constitutive diff --git a/src/coreComponents/constitutive/solid/TriaxialDriver.hpp b/src/coreComponents/constitutive/solid/TriaxialDriver.hpp index 73e4957a13a..4ebe6251dbd 100644 --- a/src/coreComponents/constitutive/solid/TriaxialDriver.hpp +++ b/src/coreComponents/constitutive/solid/TriaxialDriver.hpp @@ -32,8 +32,6 @@ namespace geos { -using namespace constitutive; - /** * @class TriaxialDriver * diff --git a/src/coreComponents/fieldSpecification/AquiferBoundaryCondition.hpp b/src/coreComponents/fieldSpecification/AquiferBoundaryCondition.hpp index 0e7a21f9603..ea0186e7082 100644 --- a/src/coreComponents/fieldSpecification/AquiferBoundaryCondition.hpp +++ b/src/coreComponents/fieldSpecification/AquiferBoundaryCondition.hpp @@ -118,7 +118,7 @@ class AquiferBoundaryCondition : public FieldSpecificationBase }; - /// @copydoc FieldSpecificationBase(string const &, Group *) + /// @copydoc FieldSpecificationBase(string const &, dataRepository::Group *) AquiferBoundaryCondition( string const & name, Group * parent ); /// deleted default constructor diff --git a/src/coreComponents/fieldSpecification/EquilibriumInitialCondition.hpp b/src/coreComponents/fieldSpecification/EquilibriumInitialCondition.hpp index f9e53715558..d91baca73ae 100644 --- a/src/coreComponents/fieldSpecification/EquilibriumInitialCondition.hpp +++ b/src/coreComponents/fieldSpecification/EquilibriumInitialCondition.hpp @@ -34,7 +34,7 @@ class EquilibriumInitialCondition : public FieldSpecificationBase { public: - /// @copydoc FieldSpecificationBase(string const &, Group *) + /// @copydoc FieldSpecificationBase(string const &, dataRepository::Group *) EquilibriumInitialCondition( string const & name, Group * parent ); /// deleted default constructor diff --git a/src/coreComponents/fieldSpecification/TractionBoundaryCondition.hpp b/src/coreComponents/fieldSpecification/TractionBoundaryCondition.hpp index e1ba3890d7c..605b9666c5c 100644 --- a/src/coreComponents/fieldSpecification/TractionBoundaryCondition.hpp +++ b/src/coreComponents/fieldSpecification/TractionBoundaryCondition.hpp @@ -36,7 +36,7 @@ class TableFunction; class TractionBoundaryCondition : public FieldSpecificationBase { public: - /// @copydoc FieldSpecificationBase(string const &, Group *) + /// @copydoc FieldSpecificationBase(string const &, dataRepository::Group *) TractionBoundaryCondition( string const & name, Group * parent ); /// deleted default constructor diff --git a/src/coreComponents/fileIO/Outputs/TimeHistoryOutput.cpp b/src/coreComponents/fileIO/Outputs/TimeHistoryOutput.cpp index a99528b0057..cc913d66d56 100644 --- a/src/coreComponents/fileIO/Outputs/TimeHistoryOutput.cpp +++ b/src/coreComponents/fileIO/Outputs/TimeHistoryOutput.cpp @@ -23,6 +23,8 @@ namespace geos { +using namespace dataRepository; + TimeHistoryOutput::TimeHistoryOutput( string const & name, Group * const parent ): OutputBase( name, parent ), diff --git a/src/coreComponents/fileIO/timeHistory/HistoryCollection.hpp b/src/coreComponents/fileIO/timeHistory/HistoryCollection.hpp index 67264b16051..1de883c9176 100644 --- a/src/coreComponents/fileIO/timeHistory/HistoryCollection.hpp +++ b/src/coreComponents/fileIO/timeHistory/HistoryCollection.hpp @@ -26,8 +26,6 @@ namespace geos { -using namespace dataRepository; - /** * @class HistoryCollection * diff --git a/src/coreComponents/fileIO/timeHistory/PackCollection.cpp b/src/coreComponents/fileIO/timeHistory/PackCollection.cpp index 14b06f61a0b..383a3d223a0 100644 --- a/src/coreComponents/fileIO/timeHistory/PackCollection.cpp +++ b/src/coreComponents/fileIO/timeHistory/PackCollection.cpp @@ -17,6 +17,9 @@ namespace geos { + +using namespace dataRepository; + PackCollection::PackCollection ( string const & name, Group * parent ) : HistoryCollectionBase( name, parent ) , m_setsIndices( ) diff --git a/src/coreComponents/mesh/generators/VTKUtilities.cpp b/src/coreComponents/mesh/generators/VTKUtilities.cpp index a2cfae5da17..ac36adf2c21 100644 --- a/src/coreComponents/mesh/generators/VTKUtilities.cpp +++ b/src/coreComponents/mesh/generators/VTKUtilities.cpp @@ -72,6 +72,7 @@ namespace geos { +using namespace dataRepository; namespace vtk { diff --git a/src/coreComponents/mesh/generators/VTKUtilities.hpp b/src/coreComponents/mesh/generators/VTKUtilities.hpp index fc05b8fb6ae..ecab1c26c5d 100644 --- a/src/coreComponents/mesh/generators/VTKUtilities.hpp +++ b/src/coreComponents/mesh/generators/VTKUtilities.hpp @@ -33,9 +33,6 @@ namespace geos { - -using namespace dataRepository; - namespace vtk { @@ -222,7 +219,7 @@ string buildCellBlockName( ElementType const type, int const regionId ); */ void importMaterialField( std::vector< vtkIdType > const & cellIds, vtkDataArray * vtkArray, - WrapperBase & wrapper ); + dataRepository::WrapperBase & wrapper ); /** * @brief Imports 1d and 2d arrays from @p vtkArray to @p wrapper, only for @p cellIds @@ -232,7 +229,7 @@ void importMaterialField( std::vector< vtkIdType > const & cellIds, */ void importRegularField( std::vector< vtkIdType > const & cellIds, vtkDataArray * vtkArray, - WrapperBase & wrapper ); + dataRepository::WrapperBase & wrapper ); /** * @brief Imports 1d and 2d arrays from @p vtkArray to @p wrapper, for all the elements/cells of the provided wrapper. @@ -240,7 +237,7 @@ void importRegularField( std::vector< vtkIdType > const & cellIds, * @param wrapper The destination. */ void importRegularField( vtkDataArray * vtkArray, - WrapperBase & wrapper ); + dataRepository::WrapperBase & wrapper ); } // namespace vtk diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMBubbleKernels.hpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMBubbleKernels.hpp index 3235bca00c6..9dc020a428a 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMBubbleKernels.hpp +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsALMBubbleKernels.hpp @@ -323,7 +323,7 @@ class ALMBubbleKernels : LvArray::tensorOps::Rij_eq_AikBkj< nBubbleUdof, nBubbleUdof, 6 >( Abb_gauss, matBD, strainBubbleMatrix ); // transp(B)DBb - tensorOps::transpose< nUdof, nBubbleUdof >( Aub_gauss, Abu_gauss ); + LvArray::tensorOps::transpose< nUdof, nBubbleUdof >( Aub_gauss, Abu_gauss ); // multiply by determinant and add to element matrix LvArray::tensorOps::scaledAdd< nBubbleUdof, nBubbleUdof >( stack.localAbb, Abb_gauss, -detJ ); diff --git a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.hpp b/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.hpp index d601ccdf50d..b04c2037384 100644 --- a/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.hpp +++ b/src/coreComponents/physicsSolvers/contact/SolidMechanicsEmbeddedFractures.hpp @@ -25,7 +25,6 @@ namespace geos { -using namespace constitutive; class SolidMechanicsEmbeddedFractures : public ContactSolverBase { diff --git a/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseHybridFVMKernels.cpp b/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseHybridFVMKernels.cpp index fe0b452865e..ca60225e582 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseHybridFVMKernels.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseHybridFVMKernels.cpp @@ -29,6 +29,7 @@ namespace geos { +using namespace constitutive; namespace compositionalMultiphaseHybridFVMKernels { diff --git a/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseHybridFVMKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseHybridFVMKernels.hpp index b0a12568c7a..e043807a798 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseHybridFVMKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseHybridFVMKernels.hpp @@ -41,9 +41,6 @@ namespace geos namespace compositionalMultiphaseHybridFVMKernels { -using namespace constitutive; - - // struct to specify local and neighbor derivatives struct Pos { @@ -90,13 +87,13 @@ struct UpwindingHelper static void upwindViscousCoefficient( localIndex const (&localIds)[ 3 ], localIndex const (&neighborIds)[ 3 ], - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dPhaseDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dPhaseDens, ElementViewConst< arrayView2d< real64 const, compflow::USD_PHASE > > const & phaseMob, ElementViewConst< arrayView3d< real64 const, compflow::USD_PHASE_DC > > const & dPhaseMob, ElementViewConst< arrayView3d< real64 const, compflow::USD_COMP_DC > > const & dCompFrac_dCompDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_COMP > > const & phaseCompFrac, - ElementViewConst< arrayView5d< real64 const, multifluid::USD_PHASE_COMP_DC > > const & dPhaseCompFrac, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > > const & phaseCompFrac, + ElementViewConst< arrayView5d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC > > const & dPhaseCompFrac, ElementViewConst< arrayView1d< globalIndex const > > const & elemDofNumber, real64 const & oneSidedVolFlux, real64 ( &upwPhaseViscCoef )[ NP ][ NC ], @@ -134,15 +131,15 @@ struct UpwindingHelper upwindBuoyancyCoefficient( localIndex const (&localIds)[ 3 ], localIndex const (&neighborIds)[ 3 ], real64 const & transGravCoef, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dPhaseDens, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseMassDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dPhaseMassDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dPhaseDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseMassDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dPhaseMassDens, ElementViewConst< arrayView2d< real64 const, compflow::USD_PHASE > > const & phaseMob, ElementViewConst< arrayView3d< real64 const, compflow::USD_PHASE_DC > > const & dPhaseMob, ElementViewConst< arrayView3d< real64 const, compflow::USD_COMP_DC > > const & dCompFrac_dCompDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_COMP > > const & phaseCompFrac, - ElementViewConst< arrayView5d< real64 const, multifluid::USD_PHASE_COMP_DC > > const & dPhaseCompFrac, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > > const & phaseCompFrac, + ElementViewConst< arrayView5d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC > > const & dPhaseCompFrac, real64 ( &phaseGravTerm )[ NP ][ NP-1 ], real64 ( &dPhaseGravTerm_dPres )[ NP ][ NP-1 ][ 2 ], real64 ( &dPhaseGravTerm_dCompDens )[ NP ][ NP-1 ][ 2 ][ NC ], @@ -170,8 +167,8 @@ struct UpwindingHelper computePhaseGravTerm( localIndex const (&localIds)[ 3 ], localIndex const (&neighborIds)[ 3 ], real64 const & transGravCoef, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseMassDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dPhaseMassDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseMassDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dPhaseMassDens, ElementViewConst< arrayView3d< real64 const, compflow::USD_COMP_DC > > const & dCompFrac_dCompDens, real64 ( &phaseGravTerm )[ NP ][ NP-1 ], real64 ( &dPhaseGravTerm_dPres )[ NP ][ NP-1 ][ 2 ], @@ -286,8 +283,8 @@ struct AssemblerKernelHelper arraySlice1d< localIndex const > const & elemToFaces, real64 const & elemPres, real64 const & elemGravCoef, - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const & elemPhaseMassDens, - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const & dElemPhaseMassDens, + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const & elemPhaseMassDens, + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const & dElemPhaseMassDens, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & elemPhaseMob, arraySlice2d< real64 const, compflow::USD_PHASE_DC - 1 > const & dElemPhaseMob, arraySlice2d< real64 const, compflow::USD_COMP_DC - 1 > const & dElemCompFrac_dCompDens, @@ -337,15 +334,15 @@ struct AssemblerKernelHelper arraySlice1d< localIndex const > const & elemToFaces, real64 const & elemGravCoef, integer const useTotalMassEquation, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dPhaseDens, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseMassDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dPhaseMassDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dPhaseDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseMassDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dPhaseMassDens, ElementViewConst< arrayView2d< real64 const, compflow::USD_PHASE > > const & phaseMob, ElementViewConst< arrayView3d< real64 const, compflow::USD_PHASE_DC > > const & dPhaseMob, ElementViewConst< arrayView3d< real64 const, compflow::USD_COMP_DC > > const & dCompFrac_dCompDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_COMP > > const & phaseCompFrac, - ElementViewConst< arrayView5d< real64 const, multifluid::USD_PHASE_COMP_DC > > const & dPhaseCompFrac, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > > const & phaseCompFrac, + ElementViewConst< arrayView5d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC > > const & dPhaseCompFrac, ElementViewConst< arrayView1d< globalIndex const > > const & elemDofNumber, arraySlice2d< real64 const > const & transMatrixGrav, real64 const (&oneSidedVolFlux)[ NF ], @@ -525,15 +522,15 @@ struct AssemblerKernel real64 const & elemPres, real64 const & elemGravCoef, const integer useTotalMassEquation, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dPhaseDens, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseMassDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dPhaseMassDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dPhaseDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseMassDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dPhaseMassDens, ElementViewConst< arrayView2d< real64 const, compflow::USD_PHASE > > const & phaseMob, ElementViewConst< arrayView3d< real64 const, compflow::USD_PHASE_DC > > const & dPhaseMob, ElementViewConst< arrayView3d< real64 const, compflow::USD_COMP_DC > > const & dCompFrac_dCompDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_COMP > > const & phaseCompFrac, - ElementViewConst< arrayView5d< real64 const, multifluid::USD_PHASE_COMP_DC > > const & dPhaseCompFrac, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > > const & phaseCompFrac, + ElementViewConst< arrayView5d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC > > const & dPhaseCompFrac, ElementViewConst< arrayView1d< globalIndex const > > const & elemDofNumber, integer const elemGhostRank, globalIndex const rankOffset, @@ -566,7 +563,7 @@ struct FluxKernel fields::flow::dGlobalCompFraction_dGlobalCompDensity >; using MultiFluidAccessors = - StencilMaterialAccessors< MultiFluidBase, + StencilMaterialAccessors< constitutive::MultiFluidBase, fields::multifluid::phaseDensity, fields::multifluid::dPhaseDensity, fields::multifluid::phaseMassDensity, @@ -629,12 +626,12 @@ struct FluxKernel ElementViewConst< arrayView2d< real64 const, compflow::USD_PHASE > > const & phaseMob, ElementViewConst< arrayView3d< real64 const, compflow::USD_PHASE_DC > > const & dPhaseMob, ElementViewConst< arrayView3d< real64 const, compflow::USD_COMP_DC > > const & dCompFrac_dCompDens, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dPhaseDens, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseMassDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dPhaseMassDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_COMP > > const & phaseCompFrac, - ElementViewConst< arrayView5d< real64 const, multifluid::USD_PHASE_COMP_DC > > const & dPhaseCompFrac, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dPhaseDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseMassDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dPhaseMassDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > > const & phaseCompFrac, + ElementViewConst< arrayView5d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC > > const & dPhaseCompFrac, ElementViewConst< arrayView1d< globalIndex const > > const & elemDofNumber, globalIndex const rankOffset, real64 const lengthTolerance, @@ -672,8 +669,8 @@ class PhaseMobilityKernel : public isothermalCompositionalMultiphaseBaseKernels: * @param[in] relperm the relperm model */ PhaseMobilityKernel( ObjectManagerBase & subRegion, - MultiFluidBase const & fluid, - RelativePermeabilityBase const & relperm ) + constitutive::MultiFluidBase const & fluid, + constitutive::RelativePermeabilityBase const & relperm ) : Base(), m_phaseVolFrac( subRegion.getField< fields::flow::phaseVolumeFraction >() ), m_dPhaseVolFrac( subRegion.getField< fields::flow::dPhaseVolumeFraction >() ), @@ -697,13 +694,13 @@ class PhaseMobilityKernel : public isothermalCompositionalMultiphaseBaseKernels: void compute( localIndex const ei, FUNC && phaseMobilityKernelOp = NoOpFunc{} ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; arraySlice2d< real64 const, compflow::USD_COMP_DC - 1 > const dCompFrac_dCompDens = m_dCompFrac_dCompDens[ei]; - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const phaseVisc = m_phaseVisc[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const dPhaseVisc = m_dPhaseVisc[ei][0]; - arraySlice1d< real64 const, relperm::USD_RELPERM - 2 > const phaseRelPerm = m_phaseRelPerm[ei][0]; - arraySlice2d< real64 const, relperm::USD_RELPERM_DS - 2 > const dPhaseRelPerm_dPhaseVolFrac = m_dPhaseRelPerm_dPhaseVolFrac[ei][0]; + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const phaseVisc = m_phaseVisc[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseVisc = m_dPhaseVisc[ei][0]; + arraySlice1d< real64 const, constitutive::relperm::USD_RELPERM - 2 > const phaseRelPerm = m_phaseRelPerm[ei][0]; + arraySlice2d< real64 const, constitutive::relperm::USD_RELPERM_DS - 2 > const dPhaseRelPerm_dPhaseVolFrac = m_dPhaseRelPerm_dPhaseVolFrac[ei][0]; arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const phaseVolFrac = m_phaseVolFrac[ei]; arraySlice2d< real64 const, compflow::USD_PHASE_DC - 1 > const dPhaseVolFrac = m_dPhaseVolFrac[ei]; arraySlice1d< real64, compflow::USD_PHASE - 1 > const phaseMob = m_phaseMob[ei]; @@ -778,12 +775,12 @@ class PhaseMobilityKernel : public isothermalCompositionalMultiphaseBaseKernels: arrayView3d< real64 const, compflow::USD_COMP_DC > m_dCompFrac_dCompDens; /// Views on the phase viscosities - arrayView3d< real64 const, multifluid::USD_PHASE > m_phaseVisc; - arrayView4d< real64 const, multifluid::USD_PHASE_DC > m_dPhaseVisc; + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > m_phaseVisc; + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > m_dPhaseVisc; /// Views on the phase relative permeabilities - arrayView3d< real64 const, relperm::USD_RELPERM > m_phaseRelPerm; - arrayView4d< real64 const, relperm::USD_RELPERM_DS > m_dPhaseRelPerm_dPhaseVolFrac; + arrayView3d< real64 const, constitutive::relperm::USD_RELPERM > m_phaseRelPerm; + arrayView4d< real64 const, constitutive::relperm::USD_RELPERM_DS > m_dPhaseRelPerm_dPhaseVolFrac; // outputs @@ -814,8 +811,8 @@ class PhaseMobilityKernelFactory createAndLaunch( integer const numComp, integer const numPhase, ObjectManagerBase & subRegion, - MultiFluidBase const & fluid, - RelativePermeabilityBase const & relperm ) + constitutive::MultiFluidBase const & fluid, + constitutive::RelativePermeabilityBase const & relperm ) { if( numPhase == 2 ) { @@ -976,7 +973,7 @@ class ResidualNormKernel : public solverBaseKernels::ResidualNormKernelBase< 1 > ElementViewConst< arrayView2d< real64 const > > const m_porosity_n; /// View on total mass/molar density at the previous converged time step - ElementViewConst< arrayView2d< real64 const, multifluid::USD_FLUID > > const m_totalDens_n; + ElementViewConst< arrayView2d< real64 const, constitutive::multifluid::USD_FLUID > > const m_totalDens_n; }; diff --git a/src/coreComponents/physicsSolvers/fluidFlow/DissipationCompositionalMultiphaseFVMKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/DissipationCompositionalMultiphaseFVMKernels.hpp index 10b42f0e79a..3453ec47f30 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/DissipationCompositionalMultiphaseFVMKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/DissipationCompositionalMultiphaseFVMKernels.hpp @@ -30,8 +30,6 @@ namespace geos namespace dissipationCompositionalMultiphaseFVMKernels { -using namespace constitutive; - static constexpr integer newtonContinuationCutoffIteration = 5; static constexpr real64 initialDirectionalCoef = 100; static constexpr real64 multiplierDirectionalCoef = 1000; @@ -85,9 +83,9 @@ class FaceBasedAssemblyKernel : public isothermalCompositionalMultiphaseFVMKerne fields::elementVolume >; using PorosityAccessors = - StencilMaterialAccessors< PorosityBase, fields::porosity::porosity_n >; + StencilMaterialAccessors< constitutive::PorosityBase, fields::porosity::porosity_n >; - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; /** * @brief Constructor for the kernel interface diff --git a/src/coreComponents/physicsSolvers/fluidFlow/IsothermalCompositionalMultiphaseBaseKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/IsothermalCompositionalMultiphaseBaseKernels.hpp index 108e5a9261a..02b8c7f6bf7 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/IsothermalCompositionalMultiphaseBaseKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/IsothermalCompositionalMultiphaseBaseKernels.hpp @@ -41,8 +41,6 @@ namespace geos namespace isothermalCompositionalMultiphaseBaseKernels { -using namespace constitutive; - static constexpr real64 minDensForDivision = 1e-10; enum class ElementBasedAssemblyKernelFlags @@ -273,7 +271,7 @@ class PhaseVolumeFractionKernel : public PropertyKernelBase< NUM_COMP > * @param[in] fluid the fluid model */ PhaseVolumeFractionKernel( ObjectManagerBase & subRegion, - MultiFluidBase const & fluid ) + constitutive::MultiFluidBase const & fluid ) : Base(), m_phaseVolFrac( subRegion.getField< fields::flow::phaseVolumeFraction >() ), m_dPhaseVolFrac( subRegion.getField< fields::flow::dPhaseVolumeFraction >() ), @@ -296,14 +294,14 @@ class PhaseVolumeFractionKernel : public PropertyKernelBase< NUM_COMP > real64 compute( localIndex const ei, FUNC && phaseVolFractionKernelOp = NoOpFunc{} ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; arraySlice1d< real64 const, compflow::USD_COMP - 1 > const compDens = m_compDens[ei]; arraySlice2d< real64 const, compflow::USD_COMP_DC - 1 > const dCompFrac_dCompDens = m_dCompFrac_dCompDens[ei]; - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const phaseDens = m_phaseDens[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const dPhaseDens = m_dPhaseDens[ei][0]; - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const phaseFrac = m_phaseFrac[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const dPhaseFrac = m_dPhaseFrac[ei][0]; + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const phaseDens = m_phaseDens[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseDens = m_dPhaseDens[ei][0]; + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const phaseFrac = m_phaseFrac[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseFrac = m_dPhaseFrac[ei][0]; arraySlice1d< real64, compflow::USD_PHASE - 1 > const phaseVolFrac = m_phaseVolFrac[ei]; arraySlice2d< real64, compflow::USD_PHASE_DC - 1 > const dPhaseVolFrac = m_dPhaseVolFrac[ei]; @@ -414,12 +412,12 @@ class PhaseVolumeFractionKernel : public PropertyKernelBase< NUM_COMP > arrayView3d< real64 const, compflow::USD_COMP_DC > m_dCompFrac_dCompDens; /// Views on phase fractions - arrayView3d< real64 const, multifluid::USD_PHASE > m_phaseFrac; - arrayView4d< real64 const, multifluid::USD_PHASE_DC > m_dPhaseFrac; + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > m_phaseFrac; + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > m_dPhaseFrac; /// Views on phase densities - arrayView3d< real64 const, multifluid::USD_PHASE > m_phaseDens; - arrayView4d< real64 const, multifluid::USD_PHASE_DC > m_dPhaseDens; + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > m_phaseDens; + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > m_dPhaseDens; }; @@ -443,7 +441,7 @@ class PhaseVolumeFractionKernelFactory createAndLaunch( integer const numComp, integer const numPhase, ObjectManagerBase & subRegion, - MultiFluidBase const & fluid ) + constitutive::MultiFluidBase const & fluid ) { real64 maxDeltaPhaseVolFrac = 0.0; if( numPhase == 2 ) @@ -578,8 +576,8 @@ class ElementBasedAssemblyKernel globalIndex const rankOffset, string const dofKey, ElementSubRegionBase const & subRegion, - MultiFluidBase const & fluid, - CoupledSolidBase const & solid, + constitutive::MultiFluidBase const & fluid, + constitutive::CoupledSolidBase const & solid, CRSMatrixView< real64, globalIndex const > const & localMatrix, arrayView1d< real64 > const & localRhs, BitFlags< ElementBasedAssemblyKernelFlags > const kernelFlags ) @@ -702,7 +700,7 @@ class ElementBasedAssemblyKernel } else { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; // construct the slices for variables accessed multiple times arraySlice2d< real64 const, compflow::USD_COMP_DC - 1 > dCompFrac_dCompDens = m_dCompFrac_dCompDens[ei]; @@ -710,11 +708,11 @@ class ElementBasedAssemblyKernel arraySlice1d< real64 const, compflow::USD_PHASE - 1 > phaseVolFrac = m_phaseVolFrac[ei]; arraySlice2d< real64 const, compflow::USD_PHASE_DC - 1 > dPhaseVolFrac = m_dPhaseVolFrac[ei]; - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > phaseDens = m_phaseDens[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > dPhaseDens = m_dPhaseDens[ei][0]; + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > phaseDens = m_phaseDens[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > dPhaseDens = m_dPhaseDens[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_COMP - 2 > phaseCompFrac = m_phaseCompFrac[ei][0]; - arraySlice3d< real64 const, multifluid::USD_PHASE_COMP_DC - 2 > dPhaseCompFrac = m_dPhaseCompFrac[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_COMP - 2 > phaseCompFrac = m_phaseCompFrac[ei][0]; + arraySlice3d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC - 2 > dPhaseCompFrac = m_dPhaseCompFrac[ei][0]; // temporary work arrays real64 dPhaseAmount_dC[numComp]{}; @@ -791,7 +789,7 @@ class ElementBasedAssemblyKernel StackVariables & stack, FUNC && phaseVolFractionSumKernelOp = NoOpFunc{} ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; arraySlice1d< real64 const, compflow::USD_PHASE - 1 > phaseVolFrac = m_phaseVolFrac[ei]; arraySlice2d< real64 const, compflow::USD_PHASE_DC - 1 > dPhaseVolFrac = m_dPhaseVolFrac[ei]; @@ -916,12 +914,12 @@ class ElementBasedAssemblyKernel arrayView3d< real64 const, compflow::USD_PHASE_DC > const m_dPhaseVolFrac; /// Views on the phase densities - arrayView3d< real64 const, multifluid::USD_PHASE > const m_phaseDens; - arrayView4d< real64 const, multifluid::USD_PHASE_DC > const m_dPhaseDens; + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > const m_phaseDens; + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > const m_dPhaseDens; /// Views on the phase component fraction - arrayView4d< real64 const, multifluid::USD_PHASE_COMP > const m_phaseCompFrac; - arrayView5d< real64 const, multifluid::USD_PHASE_COMP_DC > const m_dPhaseCompFrac; + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > const m_phaseCompFrac; + arrayView5d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC > const m_dPhaseCompFrac; // View on component densities arrayView2d< real64 const, compflow::USD_COMP > m_compDens; @@ -966,8 +964,8 @@ class ElementBasedAssemblyKernelFactory integer const useSimpleAccumulation, string const dofKey, ElementSubRegionBase const & subRegion, - MultiFluidBase const & fluid, - CoupledSolidBase const & solid, + constitutive::MultiFluidBase const & fluid, + constitutive::CoupledSolidBase const & solid, CRSMatrixView< real64, globalIndex const > const & localMatrix, arrayView1d< real64 > const & localRhs ) { @@ -1805,8 +1803,8 @@ class ResidualNormKernel : public solverBaseKernels::ResidualNormKernelBase< 1 > arrayView1d< localIndex const > const & ghostRank, integer const numComponents, ElementSubRegionBase const & subRegion, - MultiFluidBase const & fluid, - CoupledSolidBase const & solid, + constitutive::MultiFluidBase const & fluid, + constitutive::CoupledSolidBase const & solid, real64 const minNormalizer ) : Base( rankOffset, localResidual, @@ -1884,7 +1882,7 @@ class ResidualNormKernel : public solverBaseKernels::ResidualNormKernelBase< 1 > arrayView2d< real64 const > const m_porosity_n; /// View on total mass/molar density at the previous converged time step - arrayView2d< real64 const, multifluid::USD_FLUID > const m_totalDens_n; + arrayView2d< real64 const, constitutive::multifluid::USD_FLUID > const m_totalDens_n; }; @@ -1917,8 +1915,8 @@ class ResidualNormKernelFactory string const dofKey, arrayView1d< real64 const > const & localResidual, ElementSubRegionBase const & subRegion, - MultiFluidBase const & fluid, - CoupledSolidBase const & solid, + constitutive::MultiFluidBase const & fluid, + constitutive::CoupledSolidBase const & solid, real64 const minNormalizer, real64 (& residualNorm)[1], real64 (& residualNormalizer)[1] ) @@ -1969,11 +1967,11 @@ struct StatisticsKernel arrayView1d< real64 const > const & temp, arrayView1d< real64 const > const & refPorosity, arrayView2d< real64 const > const & porosity, - arrayView3d< real64 const, multifluid::USD_PHASE > const & phaseDensity, - arrayView4d< real64 const, multifluid::USD_PHASE_COMP > const & phaseCompFraction, + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > const & phaseDensity, + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > const & phaseCompFraction, arrayView2d< real64 const, compflow::USD_PHASE > const & phaseVolFrac, - arrayView3d< real64 const, relperm::USD_RELPERM > const & phaseTrappedVolFrac, - arrayView3d< real64 const, relperm::USD_RELPERM > const & phaseRelperm, + arrayView3d< real64 const, constitutive::relperm::USD_RELPERM > const & phaseTrappedVolFrac, + arrayView3d< real64 const, constitutive::relperm::USD_RELPERM > const & phaseRelperm, real64 & minPres, real64 & avgPresNumerator, real64 & maxPres, @@ -2128,14 +2126,14 @@ struct HydrostaticPressureKernel { // fluid properties at this elevation StackArray< real64, 2, constitutive::MultiFluidBase::MAX_NUM_COMPONENTS, compflow::LAYOUT_COMP > compFrac( 1, numComps ); - StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, multifluid::LAYOUT_PHASE > phaseFrac( 1, 1, numPhases ); - StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, multifluid::LAYOUT_PHASE > phaseDens( 1, 1, numPhases ); - StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, multifluid::LAYOUT_PHASE > phaseMassDens( 1, 1, numPhases ); - StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, multifluid::LAYOUT_PHASE > phaseVisc( 1, 1, numPhases ); - StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, multifluid::LAYOUT_PHASE > phaseEnthalpy( 1, 1, numPhases ); - StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, multifluid::LAYOUT_PHASE > phaseInternalEnergy( 1, 1, numPhases ); + StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, constitutive::multifluid::LAYOUT_PHASE > phaseFrac( 1, 1, numPhases ); + StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, constitutive::multifluid::LAYOUT_PHASE > phaseDens( 1, 1, numPhases ); + StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, constitutive::multifluid::LAYOUT_PHASE > phaseMassDens( 1, 1, numPhases ); + StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, constitutive::multifluid::LAYOUT_PHASE > phaseVisc( 1, 1, numPhases ); + StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, constitutive::multifluid::LAYOUT_PHASE > phaseEnthalpy( 1, 1, numPhases ); + StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, constitutive::multifluid::LAYOUT_PHASE > phaseInternalEnergy( 1, 1, numPhases ); StackArray< real64, 4, constitutive::MultiFluidBase::MAX_NUM_PHASES *constitutive::MultiFluidBase::MAX_NUM_COMPONENTS, - multifluid::LAYOUT_PHASE_COMP > phaseCompFrac( 1, 1, numPhases, numComps ); + constitutive::multifluid::LAYOUT_PHASE_COMP > phaseCompFrac( 1, 1, numPhases, numComps ); real64 totalDens = 0.0; bool isSinglePhaseFlow = true; @@ -2156,18 +2154,18 @@ struct HydrostaticPressureKernel // Step 3: compute the mass density at this elevation using the guess, and update pressure - MultiFluidBase::KernelWrapper::computeValues( fluidWrapper, - pres0, - temp, - compFrac[0], - phaseFrac[0][0], - phaseDens[0][0], - phaseMassDens[0][0], - phaseVisc[0][0], - phaseEnthalpy[0][0], - phaseInternalEnergy[0][0], - phaseCompFrac[0][0], - totalDens ); + constitutive::MultiFluidBase::KernelWrapper::computeValues( fluidWrapper, + pres0, + temp, + compFrac[0], + phaseFrac[0][0], + phaseDens[0][0], + phaseMassDens[0][0], + phaseVisc[0][0], + phaseEnthalpy[0][0], + phaseInternalEnergy[0][0], + phaseCompFrac[0][0], + totalDens ); pres1 = refPres - 0.5 * ( refPhaseMassDens[ipInit] + phaseMassDens[0][0][ipInit] ) * gravCoef; // Step 4: fixed-point iteration until convergence @@ -2202,18 +2200,18 @@ struct HydrostaticPressureKernel } // compute the mass density at this elevation using the previous pressure, and compute the new pressure - MultiFluidBase::KernelWrapper::computeValues( fluidWrapper, - pres0, - temp, - compFrac[0], - phaseFrac[0][0], - phaseDens[0][0], - phaseMassDens[0][0], - phaseVisc[0][0], - phaseEnthalpy[0][0], - phaseInternalEnergy[0][0], - phaseCompFrac[0][0], - totalDens ); + constitutive::MultiFluidBase::KernelWrapper::computeValues( fluidWrapper, + pres0, + temp, + compFrac[0], + phaseFrac[0][0], + phaseDens[0][0], + phaseMassDens[0][0], + phaseVisc[0][0], + phaseEnthalpy[0][0], + phaseInternalEnergy[0][0], + phaseCompFrac[0][0], + totalDens ); pres1 = refPres - 0.5 * ( refPhaseMassDens[ipInit] + phaseMassDens[0][0][ipInit] ) * gravCoef; } @@ -2265,13 +2263,13 @@ struct HydrostaticPressureKernel // datum fluid properties array2d< real64, compflow::LAYOUT_COMP > datumCompFrac( 1, numComps ); - array3d< real64, multifluid::LAYOUT_PHASE > datumPhaseFrac( 1, 1, numPhases ); - array3d< real64, multifluid::LAYOUT_PHASE > datumPhaseDens( 1, 1, numPhases ); - array3d< real64, multifluid::LAYOUT_PHASE > datumPhaseMassDens( 1, 1, numPhases ); - array3d< real64, multifluid::LAYOUT_PHASE > datumPhaseVisc( 1, 1, numPhases ); - array3d< real64, multifluid::LAYOUT_PHASE > datumPhaseEnthalpy( 1, 1, numPhases ); - array3d< real64, multifluid::LAYOUT_PHASE > datumPhaseInternalEnergy( 1, 1, numPhases ); - array4d< real64, multifluid::LAYOUT_PHASE_COMP > datumPhaseCompFrac( 1, 1, numPhases, numComps ); + array3d< real64, constitutive::multifluid::LAYOUT_PHASE > datumPhaseFrac( 1, 1, numPhases ); + array3d< real64, constitutive::multifluid::LAYOUT_PHASE > datumPhaseDens( 1, 1, numPhases ); + array3d< real64, constitutive::multifluid::LAYOUT_PHASE > datumPhaseMassDens( 1, 1, numPhases ); + array3d< real64, constitutive::multifluid::LAYOUT_PHASE > datumPhaseVisc( 1, 1, numPhases ); + array3d< real64, constitutive::multifluid::LAYOUT_PHASE > datumPhaseEnthalpy( 1, 1, numPhases ); + array3d< real64, constitutive::multifluid::LAYOUT_PHASE > datumPhaseInternalEnergy( 1, 1, numPhases ); + array4d< real64, constitutive::multifluid::LAYOUT_PHASE_COMP > datumPhaseCompFrac( 1, 1, numPhases, numComps ); real64 datumTotalDens = 0.0; real64 const datumTemp = tempTableWrapper.compute( &datumElevation ); @@ -2279,18 +2277,18 @@ struct HydrostaticPressureKernel { datumCompFrac[0][ic] = compFracTableWrappers[ic].compute( &datumElevation ); } - MultiFluidBase::KernelWrapper::computeValues( fluidWrapper, - datumPres, - datumTemp, - datumCompFrac[0], - datumPhaseFrac[0][0], - datumPhaseDens[0][0], - datumPhaseMassDens[0][0], - datumPhaseVisc[0][0], - datumPhaseEnthalpy[0][0], - datumPhaseInternalEnergy[0][0], - datumPhaseCompFrac[0][0], - datumTotalDens ); + constitutive::MultiFluidBase::KernelWrapper::computeValues( fluidWrapper, + datumPres, + datumTemp, + datumCompFrac[0], + datumPhaseFrac[0][0], + datumPhaseDens[0][0], + datumPhaseMassDens[0][0], + datumPhaseVisc[0][0], + datumPhaseEnthalpy[0][0], + datumPhaseInternalEnergy[0][0], + datumPhaseCompFrac[0][0], + datumTotalDens ); // Step 2: find the closest elevation to datumElevation diff --git a/src/coreComponents/physicsSolvers/fluidFlow/IsothermalCompositionalMultiphaseFVMKernels.cpp b/src/coreComponents/physicsSolvers/fluidFlow/IsothermalCompositionalMultiphaseFVMKernels.cpp index 53e0e77be7a..c26187ed8ae 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/IsothermalCompositionalMultiphaseFVMKernels.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/IsothermalCompositionalMultiphaseFVMKernels.cpp @@ -28,6 +28,7 @@ namespace geos { +using namespace constitutive; namespace isothermalCompositionalMultiphaseFVMKernels { diff --git a/src/coreComponents/physicsSolvers/fluidFlow/IsothermalCompositionalMultiphaseFVMKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/IsothermalCompositionalMultiphaseFVMKernels.hpp index e873db36651..43b6ca1c277 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/IsothermalCompositionalMultiphaseFVMKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/IsothermalCompositionalMultiphaseFVMKernels.hpp @@ -56,8 +56,6 @@ namespace geos namespace isothermalCompositionalMultiphaseFVMKernels { -using namespace constitutive; - enum class FaceBasedAssemblyKernelFlags { /// Flag to specify whether capillary pressure is used or not @@ -101,8 +99,8 @@ class PhaseMobilityKernel : public isothermalCompositionalMultiphaseBaseKernels: * @param[in] relperm the relperm model */ PhaseMobilityKernel( ObjectManagerBase & subRegion, - MultiFluidBase const & fluid, - RelativePermeabilityBase const & relperm ) + constitutive::MultiFluidBase const & fluid, + constitutive::RelativePermeabilityBase const & relperm ) : Base(), m_phaseVolFrac( subRegion.getField< fields::flow::phaseVolumeFraction >() ), m_dPhaseVolFrac( subRegion.getField< fields::flow::dPhaseVolumeFraction >() ), @@ -128,15 +126,15 @@ class PhaseMobilityKernel : public isothermalCompositionalMultiphaseBaseKernels: void compute( localIndex const ei, FUNC && phaseMobilityKernelOp = NoOpFunc{} ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; arraySlice2d< real64 const, compflow::USD_COMP_DC - 1 > const dCompFrac_dCompDens = m_dCompFrac_dCompDens[ei]; - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const phaseDens = m_phaseDens[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const dPhaseDens = m_dPhaseDens[ei][0]; - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const phaseVisc = m_phaseVisc[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const dPhaseVisc = m_dPhaseVisc[ei][0]; - arraySlice1d< real64 const, relperm::USD_RELPERM - 2 > const phaseRelPerm = m_phaseRelPerm[ei][0]; - arraySlice2d< real64 const, relperm::USD_RELPERM_DS - 2 > const dPhaseRelPerm_dPhaseVolFrac = m_dPhaseRelPerm_dPhaseVolFrac[ei][0]; + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const phaseDens = m_phaseDens[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseDens = m_dPhaseDens[ei][0]; + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const phaseVisc = m_phaseVisc[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseVisc = m_dPhaseVisc[ei][0]; + arraySlice1d< real64 const, constitutive::relperm::USD_RELPERM - 2 > const phaseRelPerm = m_phaseRelPerm[ei][0]; + arraySlice2d< real64 const, constitutive::relperm::USD_RELPERM_DS - 2 > const dPhaseRelPerm_dPhaseVolFrac = m_dPhaseRelPerm_dPhaseVolFrac[ei][0]; arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const phaseVolFrac = m_phaseVolFrac[ei]; arraySlice2d< real64 const, compflow::USD_PHASE_DC - 1 > const dPhaseVolFrac = m_dPhaseVolFrac[ei]; arraySlice1d< real64, compflow::USD_PHASE - 1 > const phaseMob = m_phaseMob[ei]; @@ -216,16 +214,16 @@ class PhaseMobilityKernel : public isothermalCompositionalMultiphaseBaseKernels: arrayView3d< real64 const, compflow::USD_COMP_DC > m_dCompFrac_dCompDens; /// Views on the phase densities - arrayView3d< real64 const, multifluid::USD_PHASE > m_phaseDens; - arrayView4d< real64 const, multifluid::USD_PHASE_DC > m_dPhaseDens; + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > m_phaseDens; + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > m_dPhaseDens; /// Views on the phase viscosities - arrayView3d< real64 const, multifluid::USD_PHASE > m_phaseVisc; - arrayView4d< real64 const, multifluid::USD_PHASE_DC > m_dPhaseVisc; + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > m_phaseVisc; + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > m_dPhaseVisc; /// Views on the phase relative permeabilities - arrayView3d< real64 const, relperm::USD_RELPERM > m_phaseRelPerm; - arrayView4d< real64 const, relperm::USD_RELPERM_DS > m_dPhaseRelPerm_dPhaseVolFrac; + arrayView3d< real64 const, constitutive::relperm::USD_RELPERM > m_phaseRelPerm; + arrayView4d< real64 const, constitutive::relperm::USD_RELPERM_DS > m_dPhaseRelPerm_dPhaseVolFrac; // outputs @@ -256,8 +254,8 @@ class PhaseMobilityKernelFactory createAndLaunch( integer const numComp, integer const numPhase, ObjectManagerBase & subRegion, - MultiFluidBase const & fluid, - RelativePermeabilityBase const & relperm ) + constitutive::MultiFluidBase const & fluid, + constitutive::RelativePermeabilityBase const & relperm ) { if( numPhase == 2 ) { @@ -312,7 +310,7 @@ class FaceBasedAssemblyKernelBase fields::flow::phaseMobility, fields::flow::dPhaseMobility >; using MultiFluidAccessors = - StencilMaterialAccessors< MultiFluidBase, + StencilMaterialAccessors< constitutive::MultiFluidBase, fields::multifluid::phaseDensity, fields::multifluid::dPhaseDensity, fields::multifluid::phaseMassDensity, @@ -321,12 +319,12 @@ class FaceBasedAssemblyKernelBase fields::multifluid::dPhaseCompFraction >; using CapPressureAccessors = - StencilMaterialAccessors< CapillaryPressureBase, + StencilMaterialAccessors< constitutive::CapillaryPressureBase, fields::cappres::phaseCapPressure, fields::cappres::dPhaseCapPressure_dPhaseVolFraction >; using PermeabilityAccessors = - StencilMaterialAccessors< PermeabilityBase, + StencilMaterialAccessors< constitutive::PermeabilityBase, fields::permeability::permeability, fields::permeability::dPerm_dPressure >; @@ -380,8 +378,8 @@ class FaceBasedAssemblyKernelBase ElementViewConst< arrayView3d< real64 const, compflow::USD_PHASE_DC > > const m_dPhaseVolFrac; /// Views on phase component fractions - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_COMP > > const m_phaseCompFrac; - ElementViewConst< arrayView5d< real64 const, multifluid::USD_PHASE_COMP_DC > > const m_dPhaseCompFrac; + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > > const m_phaseCompFrac; + ElementViewConst< arrayView5d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC > > const m_dPhaseCompFrac; // Residual and jacobian @@ -826,12 +824,12 @@ class FaceBasedAssemblyKernel : public FaceBasedAssemblyKernelBase ElementViewConst< arrayView3d< real64 const, compflow::USD_PHASE_DC > > const m_dPhaseMob; /// Views on phase mass densities - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const m_phaseMassDens; - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const m_dPhaseMassDens; + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const m_phaseMassDens; + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const m_dPhaseMassDens; /// Views on phase capillary pressure - ElementViewConst< arrayView3d< real64 const, cappres::USD_CAPPRES > > const m_phaseCapPressure; - ElementViewConst< arrayView4d< real64 const, cappres::USD_CAPPRES_DS > > const m_dPhaseCapPressure_dPhaseVolFrac; + ElementViewConst< arrayView3d< real64 const, constitutive::cappres::USD_CAPPRES > > const m_phaseCapPressure; + ElementViewConst< arrayView4d< real64 const, constitutive::cappres::USD_CAPPRES_DS > > const m_dPhaseCapPressure_dPhaseVolFrac; // Stencil information @@ -959,17 +957,17 @@ class DiffusionDispersionFaceBasedAssemblyKernel : public FaceBasedAssemblyKerne using AbstractBase::m_kernelFlags; using DiffusionAccessors = - StencilMaterialAccessors< DiffusionBase, + StencilMaterialAccessors< constitutive::DiffusionBase, fields::diffusion::diffusivity, fields::diffusion::dDiffusivity_dTemperature, fields::diffusion::phaseDiffusivityMultiplier >; using DispersionAccessors = - StencilMaterialAccessors< DispersionBase, + StencilMaterialAccessors< constitutive::DispersionBase, fields::dispersion::dispersivity >; using PorosityAccessors = - StencilMaterialAccessors< PorosityBase, + StencilMaterialAccessors< constitutive::PorosityBase, fields::porosity::referencePorosity >; /** @@ -1127,7 +1125,7 @@ class DiffusionDispersionFaceBasedAssemblyKernel : public FaceBasedAssemblyKerne StackVariables & stack, FUNC && diffusionFluxKernelOp = NoOpFunc{} ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; // first, compute the transmissibilities at this face m_stencilWrapper.computeWeights( iconn, @@ -1260,7 +1258,7 @@ class DiffusionDispersionFaceBasedAssemblyKernel : public FaceBasedAssemblyKerne StackVariables & stack, FUNC && dispersionFluxKernelOp = NoOpFunc{} ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; // first, compute the transmissibilities at this face // note that the dispersion tensor is lagged in iteration @@ -1389,7 +1387,7 @@ class DiffusionDispersionFaceBasedAssemblyKernel : public FaceBasedAssemblyKerne real64 (& dCompFracGrad_dP)[numFluxSupportPoints], real64 (& dCompFracGrad_dC)[numFluxSupportPoints][numComp] ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; real64 dCompFrac_dC[numComp]{}; @@ -1548,8 +1546,8 @@ class DiffusionDispersionFaceBasedAssemblyKernel : public FaceBasedAssemblyKerne ElementViewConst< arrayView2d< real64 const, compflow::USD_PHASE > > const m_phaseVolFrac; /// Views on phase densities - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const m_phaseDens; - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const m_dPhaseDens; + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const m_phaseDens; + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const m_dPhaseDens; /// Views on diffusivity ElementViewConst< arrayView3d< real64 const > > const m_diffusivity; @@ -1831,7 +1829,7 @@ class DirichletFaceBasedAssemblyKernel : public FaceBasedAssemblyKernel< NUM_COM StackVariables & stack, FUNC && compFluxKernelOp = NoOpFunc{} ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; using Order = BoundaryStencil::Order; localIndex const er = m_seri( iconn, Order::ELEM ); @@ -1852,28 +1850,28 @@ class DirichletFaceBasedAssemblyKernel : public FaceBasedAssemblyKernel< NUM_COM // This is needed to get the phase mass density and the phase comp fraction at the face // Because we approximate the face mobility using the total element mobility - StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, multifluid::LAYOUT_PHASE > facePhaseFrac( 1, 1, m_numPhases ); - StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, multifluid::LAYOUT_PHASE > facePhaseDens( 1, 1, m_numPhases ); - StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, multifluid::LAYOUT_PHASE > facePhaseMassDens( 1, 1, m_numPhases ); - StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, multifluid::LAYOUT_PHASE > facePhaseVisc( 1, 1, m_numPhases ); - StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, multifluid::LAYOUT_PHASE > facePhaseEnthalpy( 1, 1, m_numPhases ); - StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, multifluid::LAYOUT_PHASE > facePhaseInternalEnergy( 1, 1, m_numPhases ); + StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, constitutive::multifluid::LAYOUT_PHASE > facePhaseFrac( 1, 1, m_numPhases ); + StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, constitutive::multifluid::LAYOUT_PHASE > facePhaseDens( 1, 1, m_numPhases ); + StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, constitutive::multifluid::LAYOUT_PHASE > facePhaseMassDens( 1, 1, m_numPhases ); + StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, constitutive::multifluid::LAYOUT_PHASE > facePhaseVisc( 1, 1, m_numPhases ); + StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, constitutive::multifluid::LAYOUT_PHASE > facePhaseEnthalpy( 1, 1, m_numPhases ); + StackArray< real64, 3, constitutive::MultiFluidBase::MAX_NUM_PHASES, constitutive::multifluid::LAYOUT_PHASE > facePhaseInternalEnergy( 1, 1, m_numPhases ); StackArray< real64, 4, constitutive::MultiFluidBase::MAX_NUM_PHASES * NUM_COMP, - multifluid::LAYOUT_PHASE_COMP > facePhaseCompFrac( 1, 1, m_numPhases, NUM_COMP ); + constitutive::multifluid::LAYOUT_PHASE_COMP > facePhaseCompFrac( 1, 1, m_numPhases, NUM_COMP ); real64 faceTotalDens = 0.0; - MultiFluidBase::KernelWrapper::computeValues( m_fluidWrapper, - m_facePres[kf], - m_faceTemp[kf], - m_faceCompFrac[kf], - facePhaseFrac[0][0], - facePhaseDens[0][0], - facePhaseMassDens[0][0], - facePhaseVisc[0][0], - facePhaseEnthalpy[0][0], - facePhaseInternalEnergy[0][0], - facePhaseCompFrac[0][0], - faceTotalDens ); + constitutive::MultiFluidBase::KernelWrapper::computeValues( m_fluidWrapper, + m_facePres[kf], + m_faceTemp[kf], + m_faceCompFrac[kf], + facePhaseFrac[0][0], + facePhaseDens[0][0], + facePhaseMassDens[0][0], + facePhaseVisc[0][0], + facePhaseEnthalpy[0][0], + facePhaseInternalEnergy[0][0], + facePhaseCompFrac[0][0], + faceTotalDens ); // Step 3: loop over phases, compute and upwind phase flux and sum contributions to each component's flux @@ -1952,9 +1950,9 @@ class DirichletFaceBasedAssemblyKernel : public FaceBasedAssemblyKernel< NUM_COM } // slice some constitutive arrays to avoid too much indexing in component loop - arraySlice1d< real64 const, multifluid::USD_PHASE_COMP-3 > phaseCompFracSub = + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE_COMP-3 > phaseCompFracSub = m_phaseCompFrac[er][esr][ei][0][ip]; - arraySlice2d< real64 const, multifluid::USD_PHASE_COMP_DC-3 > dPhaseCompFracSub = + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC-3 > dPhaseCompFracSub = m_dPhaseCompFrac[er][esr][ei][0][ip]; // compute component fluxes and derivatives using element composition @@ -2120,7 +2118,7 @@ class DirichletFaceBasedAssemblyKernelFactory FaceManager const & faceManager, ElementRegionManager const & elemManager, BoundaryStencilWrapper const & stencilWrapper, - MultiFluidBase & fluidBase, + constitutive::MultiFluidBase & fluidBase, real64 const dt, CRSMatrixView< real64, globalIndex const > const & localMatrix, arrayView1d< real64 > const & localRhs ) @@ -2185,20 +2183,20 @@ struct CFLFluxKernel fields::flow::componentOutflux >; using MultiFluidAccessors = - StencilMaterialAccessors< MultiFluidBase, + StencilMaterialAccessors< constitutive::MultiFluidBase, fields::multifluid::phaseViscosity, fields::multifluid::phaseDensity, fields::multifluid::phaseMassDensity, fields::multifluid::phaseCompFraction >; using PermeabilityAccessors = - StencilMaterialAccessors< PermeabilityBase, + StencilMaterialAccessors< constitutive::PermeabilityBase, fields::permeability::permeability, fields::permeability::dPerm_dPressure >; using RelPermAccessors = - StencilMaterialAccessors< RelativePermeabilityBase, fields::relperm::phaseRelPerm >; + StencilMaterialAccessors< constitutive::RelativePermeabilityBase, fields::relperm::phaseRelPerm >; template< integer NC, localIndex NUM_ELEMS, localIndex maxStencilSize > GEOS_HOST_DEVICE @@ -2214,11 +2212,11 @@ struct CFLFluxKernel ElementViewConst< arrayView1d< real64 const > > const & pres, ElementViewConst< arrayView1d< real64 const > > const & gravCoef, ElementViewConst< arrayView2d< real64 const, compflow::USD_PHASE > > const & phaseVolFrac, - ElementViewConst< arrayView3d< real64 const, relperm::USD_RELPERM > > const & phaseRelPerm, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseVisc, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseDens, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseMassDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_COMP > > const & phaseCompFrac, + ElementViewConst< arrayView3d< real64 const, constitutive::relperm::USD_RELPERM > > const & phaseRelPerm, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseVisc, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseMassDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > > const & phaseCompFrac, ElementView< arrayView2d< real64, compflow::USD_PHASE > > const & phaseOutflux, ElementView< arrayView2d< real64, compflow::USD_COMP > > const & compOutflux ); @@ -2232,11 +2230,11 @@ struct CFLFluxKernel ElementViewConst< arrayView2d< real64 const, compflow::USD_PHASE > > const & phaseVolFrac, ElementViewConst< arrayView3d< real64 const > > const & permeability, ElementViewConst< arrayView3d< real64 const > > const & dPerm_dPres, - ElementViewConst< arrayView3d< real64 const, relperm::USD_RELPERM > > const & phaseRelPerm, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseVisc, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseDens, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseMassDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_COMP > > const & phaseCompFrac, + ElementViewConst< arrayView3d< real64 const, constitutive::relperm::USD_RELPERM > > const & phaseRelPerm, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseVisc, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseMassDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > > const & phaseCompFrac, ElementView< arrayView2d< real64, compflow::USD_PHASE > > const & phaseOutflux, ElementView< arrayView2d< real64, compflow::USD_COMP > > const & compOutflux ); }; @@ -2258,9 +2256,9 @@ struct CFLKernel static void computePhaseCFL( real64 const poreVol, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > phaseVolFrac, - arraySlice1d< real64 const, relperm::USD_RELPERM - 2 > phaseRelPerm, - arraySlice2d< real64 const, relperm::USD_RELPERM_DS - 2 > dPhaseRelPerm_dPhaseVolFrac, - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > phaseVisc, + arraySlice1d< real64 const, constitutive::relperm::USD_RELPERM - 2 > phaseRelPerm, + arraySlice2d< real64 const, constitutive::relperm::USD_RELPERM_DS - 2 > dPhaseRelPerm_dPhaseVolFrac, + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > phaseVisc, arraySlice1d< real64 const, compflow::USD_PHASE- 1 > phaseOutflux, real64 & phaseCFLNumber ); @@ -2282,9 +2280,9 @@ struct CFLKernel arrayView2d< real64 const, compflow::USD_COMP > const & compDens, arrayView2d< real64 const, compflow::USD_COMP > const & compFrac, arrayView2d< real64 const, compflow::USD_PHASE > const & phaseVolFrac, - arrayView3d< real64 const, relperm::USD_RELPERM > const & phaseRelPerm, - arrayView4d< real64 const, relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, - arrayView3d< real64 const, multifluid::USD_PHASE > const & phaseVisc, + arrayView3d< real64 const, constitutive::relperm::USD_RELPERM > const & phaseRelPerm, + arrayView4d< real64 const, constitutive::relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac, + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > const & phaseVisc, arrayView2d< real64 const, compflow::USD_PHASE > const & phaseOutflux, arrayView2d< real64 const, compflow::USD_COMP > const & compOutflux, arrayView1d< real64 > const & phaseCFLNumber, @@ -2321,7 +2319,7 @@ struct AquiferBCKernel fields::flow::dGlobalCompFraction_dGlobalCompDensity >; using MultiFluidAccessors = - StencilMaterialAccessors< MultiFluidBase, + StencilMaterialAccessors< constitutive::MultiFluidBase, fields::multifluid::phaseDensity, fields::multifluid::dPhaseDensity, fields::multifluid::phaseCompFraction, @@ -2338,12 +2336,12 @@ struct AquiferBCKernel real64 const dAquiferVolFlux_dPres, real64 const aquiferWaterPhaseDens, arrayView1d< real64 const > const & aquiferWaterPhaseCompFrac, - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > phaseDens, - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > dPhaseDens, + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > phaseDens, + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > dPhaseDens, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > phaseVolFrac, arraySlice2d< real64 const, compflow::USD_PHASE_DC - 1 > dPhaseVolFrac, - arraySlice2d< real64 const, multifluid::USD_PHASE_COMP - 2 > phaseCompFrac, - arraySlice3d< real64 const, multifluid::USD_PHASE_COMP_DC - 2 > dPhaseCompFrac, + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_COMP - 2 > phaseCompFrac, + arraySlice3d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC - 2 > dPhaseCompFrac, arraySlice2d< real64 const, compflow::USD_COMP_DC - 1 > dCompFrac_dCompDens, real64 const dt, real64 ( &localFlux )[NC], @@ -2368,10 +2366,10 @@ struct AquiferBCKernel ElementViewConst< arrayView2d< real64 const, compflow::USD_PHASE > > const & phaseVolFrac, ElementViewConst< arrayView3d< real64 const, compflow::USD_PHASE_DC > > const & dPhaseVolFrac, ElementViewConst< arrayView3d< real64 const, compflow::USD_COMP_DC > > const & dCompFrac_dCompDens, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & phaseDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dPhaseDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_COMP > > const & phaseCompFrac, - ElementViewConst< arrayView5d< real64 const, multifluid::USD_PHASE_COMP_DC > > const & dPhaseCompFrac, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & phaseDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dPhaseDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > > const & phaseCompFrac, + ElementViewConst< arrayView5d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC > > const & dPhaseCompFrac, real64 const timeAtBeginningOfStep, real64 const dt, CRSMatrixView< real64, globalIndex const > const & localMatrix, diff --git a/src/coreComponents/physicsSolvers/fluidFlow/ReactiveCompositionalMultiphaseOBLKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/ReactiveCompositionalMultiphaseOBLKernels.hpp index 6cb7be8bd40..ac7d0e583b6 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/ReactiveCompositionalMultiphaseOBLKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/ReactiveCompositionalMultiphaseOBLKernels.hpp @@ -40,8 +40,6 @@ namespace geos namespace reactiveCompositionalMultiphaseOBLKernels { -using namespace constitutive; - static constexpr real64 minValueForDivision = 1e-10; @@ -643,7 +641,7 @@ class FaceBasedAssemblyKernelBase fields::flow::OBLOperatorDerivatives >; using PermeabilityAccessors = - StencilMaterialAccessors< PermeabilityBase, + StencilMaterialAccessors< constitutive::PermeabilityBase, fields::permeability::permeability, fields::permeability::dPerm_dPressure >; diff --git a/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.hpp b/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.hpp index cc7f9bb3a03..6a726ed5757 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.hpp @@ -416,7 +416,7 @@ class SinglePhaseBase : public FlowSolverBase * * This function enables derived solvers to substitute SingleFluidBase for a different, * unrelated fluid class, and customize property extraction. For example, it is used by - * SinglePhaseProppantBase to allow using SlurryFluidBase, which does not inherit from + * SinglePhaseProppantBase to allow using constitutive::SlurryFluidBase, which does not inherit from * SingleFluidBase currently (but this design may need to be revised). */ virtual FluidPropViews getFluidProperties( constitutive::ConstitutiveBase const & fluid ) const; diff --git a/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseFVMKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseFVMKernels.hpp index fe0474e4cfd..d2b6f0db263 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseFVMKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseFVMKernels.hpp @@ -43,7 +43,6 @@ namespace geos namespace singlePhaseFVMKernels { -using namespace constitutive; /******************************** FaceBasedAssemblyKernelBase ********************************/ @@ -75,22 +74,22 @@ class FaceBasedAssemblyKernelBase fields::flow::dMobility_dPressure >; using SinglePhaseFluidAccessors = - StencilMaterialAccessors< SingleFluidBase, + StencilMaterialAccessors< constitutive::SingleFluidBase, fields::singlefluid::density, fields::singlefluid::dDensity_dPressure >; using SlurryFluidAccessors = - StencilMaterialAccessors< SlurryFluidBase, + StencilMaterialAccessors< constitutive::SlurryFluidBase, fields::singlefluid::density, fields::singlefluid::dDensity_dPressure >; using PermeabilityAccessors = - StencilMaterialAccessors< PermeabilityBase, + StencilMaterialAccessors< constitutive::PermeabilityBase, fields::permeability::permeability, fields::permeability::dPerm_dPressure >; using ProppantPermeabilityAccessors = - StencilMaterialAccessors< PermeabilityBase, + StencilMaterialAccessors< constitutive::PermeabilityBase, fields::permeability::permeability, fields::permeability::dPerm_dPressure, fields::permeability::dPerm_dDispJump, @@ -779,7 +778,7 @@ class DirichletFaceBasedAssemblyKernel : public FaceBasedAssemblyKernel< NUM_EQN // Get flow quantities on the elem/face real64 faceDens, faceVisc; - SingleFluidBaseUpdate::computeValues( m_fluidWrapper, m_facePres[kf], faceDens, faceVisc ); + constitutive::SingleFluidBaseUpdate::computeValues( m_fluidWrapper, m_facePres[kf], faceDens, faceVisc ); mobility[Order::ELEM] = m_mob[er][esr][ei]; singlePhaseBaseKernels::MobilityKernel::compute( faceDens, faceVisc, mobility[Order::FACE] ); @@ -899,7 +898,7 @@ class DirichletFaceBasedAssemblyKernelFactory FaceManager const & faceManager, ElementRegionManager const & elemManager, BoundaryStencilWrapper const & stencilWrapper, - SingleFluidBase & fluidBase, + constitutive::SingleFluidBase & fluidBase, real64 const & dt, CRSMatrixView< real64, globalIndex const > const & localMatrix, arrayView1d< real64 > const & localRhs ) diff --git a/src/coreComponents/physicsSolvers/fluidFlow/StabilizedCompositionalMultiphaseFVMKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/StabilizedCompositionalMultiphaseFVMKernels.hpp index 0e484bf1902..30b8b288c56 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/StabilizedCompositionalMultiphaseFVMKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/StabilizedCompositionalMultiphaseFVMKernels.hpp @@ -28,9 +28,6 @@ namespace geos namespace stabilizedCompositionalMultiphaseFVMKernels { -using namespace constitutive; - - /******************************** FaceBasedAssemblyKernel ********************************/ /** @@ -67,12 +64,12 @@ class FaceBasedAssemblyKernel : public isothermalCompositionalMultiphaseFVMKerne fields::flow::pressure_n >; using StabMultiFluidAccessors = - StencilMaterialAccessors< MultiFluidBase, + StencilMaterialAccessors< constitutive::MultiFluidBase, fields::multifluid::phaseDensity_n, fields::multifluid::phaseCompFraction_n >; using RelPermAccessors = - StencilMaterialAccessors< RelativePermeabilityBase, fields::relperm::phaseRelPerm_n >; + StencilMaterialAccessors< constitutive::RelativePermeabilityBase, fields::relperm::phaseRelPerm_n >; using AbstractBase::m_dt; using AbstractBase::m_numPhases; @@ -288,9 +285,9 @@ class FaceBasedAssemblyKernel : public isothermalCompositionalMultiphaseFVMKerne /// Views on flow properties at the previous converged time step ElementViewConst< arrayView1d< real64 const > > const m_pres_n; - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const m_phaseDens_n; - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_COMP > > const m_phaseCompFrac_n; - ElementViewConst< arrayView3d< real64 const, relperm::USD_RELPERM > > const m_phaseRelPerm_n; + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const m_phaseDens_n; + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > > const m_phaseCompFrac_n; + ElementViewConst< arrayView3d< real64 const, constitutive::relperm::USD_RELPERM > > const m_phaseRelPerm_n; /// Views on the macroelement indices and stab constant ElementViewConst< arrayView1d< integer const > > const m_macroElementIndex; diff --git a/src/coreComponents/physicsSolvers/fluidFlow/StabilizedSinglePhaseFVMKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/StabilizedSinglePhaseFVMKernels.hpp index 272b27d8227..c2be6462655 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/StabilizedSinglePhaseFVMKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/StabilizedSinglePhaseFVMKernels.hpp @@ -28,8 +28,6 @@ namespace geos namespace stabilizedSinglePhaseFVMKernels { -using namespace constitutive; - /******************************** FaceBasedAssemblyKernel ********************************/ @@ -59,7 +57,7 @@ class FaceBasedAssemblyKernel : public singlePhaseFVMKernels::FaceBasedAssemblyK fields::flow::pressure_n >; using StabSinglePhaseFluidAccessors = - StencilMaterialAccessors< SingleFluidBase, + StencilMaterialAccessors< constitutive::SingleFluidBase, fields::singlefluid::density_n >; using AbstractBase::m_dt; diff --git a/src/coreComponents/physicsSolvers/fluidFlow/ThermalCompositionalMultiphaseBaseKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/ThermalCompositionalMultiphaseBaseKernels.hpp index 9f67629fb94..5bf8be65aaf 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/ThermalCompositionalMultiphaseBaseKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/ThermalCompositionalMultiphaseBaseKernels.hpp @@ -30,8 +30,6 @@ namespace geos namespace thermalCompositionalMultiphaseBaseKernels { -using namespace constitutive; - /******************************** PhaseVolumeFractionKernel ********************************/ @@ -57,7 +55,7 @@ class PhaseVolumeFractionKernel : public isothermalCompositionalMultiphaseBaseKe * @param[in] fluid the fluid model */ PhaseVolumeFractionKernel( ObjectManagerBase & subRegion, - MultiFluidBase const & fluid ) + constitutive::MultiFluidBase const & fluid ) : Base( subRegion, fluid ) {} @@ -68,10 +66,10 @@ class PhaseVolumeFractionKernel : public isothermalCompositionalMultiphaseBaseKe GEOS_HOST_DEVICE real64 compute( localIndex const ei ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const dPhaseDens = m_dPhaseDens[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const dPhaseFrac = m_dPhaseFrac[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseDens = m_dPhaseDens[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseFrac = m_dPhaseFrac[ei][0]; arraySlice2d< real64, compflow::USD_PHASE_DC - 1 > const dPhaseVolFrac = m_dPhaseVolFrac[ei]; @@ -110,7 +108,7 @@ class PhaseVolumeFractionKernelFactory createAndLaunch( integer const numComp, integer const numPhase, ObjectManagerBase & subRegion, - MultiFluidBase const & fluid ) + constitutive::MultiFluidBase const & fluid ) { real64 maxDeltaPhaseVolFrac = 0.0; if( numPhase == 2 ) @@ -187,8 +185,8 @@ class ElementBasedAssemblyKernel : public isothermalCompositionalMultiphaseBaseK globalIndex const rankOffset, string const dofKey, ElementSubRegionBase const & subRegion, - MultiFluidBase const & fluid, - CoupledSolidBase const & solid, + constitutive::MultiFluidBase const & fluid, + constitutive::CoupledSolidBase const & solid, CRSMatrixView< real64, globalIndex const > const & localMatrix, arrayView1d< real64 > const & localRhs, BitFlags< isothermalCompositionalMultiphaseBaseKernels::ElementBasedAssemblyKernelFlags > const kernelFlags ) @@ -267,7 +265,7 @@ class ElementBasedAssemblyKernel : public isothermalCompositionalMultiphaseBaseK void computeAccumulation( localIndex const ei, StackVariables & stack ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; // start with old time step value stack.localResidual[numEqn-1] = -m_energy_n[ei]; @@ -288,12 +286,12 @@ class ElementBasedAssemblyKernel : public isothermalCompositionalMultiphaseBaseK arraySlice2d< real64 const, compflow::USD_COMP_DC - 1 > dCompFrac_dCompDens = m_dCompFrac_dCompDens[ei]; arraySlice1d< real64 const, compflow::USD_PHASE - 1 > phaseVolFrac = m_phaseVolFrac[ei]; arraySlice2d< real64 const, compflow::USD_PHASE_DC - 1 > dPhaseVolFrac = m_dPhaseVolFrac[ei]; - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > phaseDens = m_phaseDens[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > dPhaseDens = m_dPhaseDens[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_COMP - 2 > phaseCompFrac = m_phaseCompFrac[ei][0]; - arraySlice3d< real64 const, multifluid::USD_PHASE_COMP_DC - 2 > dPhaseCompFrac = m_dPhaseCompFrac[ei][0]; - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > phaseInternalEnergy = m_phaseInternalEnergy[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > dPhaseInternalEnergy = m_dPhaseInternalEnergy[ei][0]; + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > phaseDens = m_phaseDens[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > dPhaseDens = m_dPhaseDens[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_COMP - 2 > phaseCompFrac = m_phaseCompFrac[ei][0]; + arraySlice3d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC - 2 > dPhaseCompFrac = m_dPhaseCompFrac[ei][0]; + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > phaseInternalEnergy = m_phaseInternalEnergy[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > dPhaseInternalEnergy = m_dPhaseInternalEnergy[ei][0]; // Step 1: assemble the derivatives of the component mass balance equations with respect to temperature @@ -348,7 +346,7 @@ class ElementBasedAssemblyKernel : public isothermalCompositionalMultiphaseBaseK void computeVolumeBalance( localIndex const ei, StackVariables & stack ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; Base::computeVolumeBalance( ei, stack, [&] ( real64 const & oneMinusPhaseVolFraction ) { @@ -384,8 +382,8 @@ class ElementBasedAssemblyKernel : public isothermalCompositionalMultiphaseBaseK arrayView2d< real64 const > const m_dPoro_dTemp; /// Views on phase internal energy - arrayView3d< real64 const, multifluid::USD_PHASE > m_phaseInternalEnergy; - arrayView4d< real64 const, multifluid::USD_PHASE_DC > m_dPhaseInternalEnergy; + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > m_phaseInternalEnergy; + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > m_dPhaseInternalEnergy; /// Views on rock internal energy arrayView2d< real64 const > m_rockInternalEnergy; @@ -424,8 +422,8 @@ class ElementBasedAssemblyKernelFactory integer const useTotalMassEquation, string const dofKey, ElementSubRegionBase const & subRegion, - MultiFluidBase const & fluid, - CoupledSolidBase const & solid, + constitutive::MultiFluidBase const & fluid, + constitutive::CoupledSolidBase const & solid, CRSMatrixView< real64, globalIndex const > const & localMatrix, arrayView1d< real64 > const & localRhs ) { @@ -855,9 +853,9 @@ class ResidualNormKernel : public solverBaseKernels::ResidualNormKernelBase< 2 > integer const numComponents, integer const numPhases, ElementSubRegionBase const & subRegion, - MultiFluidBase const & fluid, - CoupledSolidBase const & solid, - SolidInternalEnergy const & solidInternalEnergy, + constitutive::MultiFluidBase const & fluid, + constitutive::CoupledSolidBase const & solid, + constitutive::SolidInternalEnergy const & solidInternalEnergy, real64 const minNormalizer ) : Base( rankOffset, localResidual, @@ -972,9 +970,9 @@ class ResidualNormKernel : public solverBaseKernels::ResidualNormKernelBase< 2 > /// View on phase properties at the previous converged time step arrayView2d< real64 const, compflow::USD_PHASE > const m_phaseVolFrac_n; - arrayView2d< real64 const, multifluid::USD_FLUID > const m_totalDens_n; - arrayView3d< real64 const, multifluid::USD_PHASE > const m_phaseDens_n; - arrayView3d< real64 const, multifluid::USD_PHASE > const m_phaseInternalEnergy_n; + arrayView2d< real64 const, constitutive::multifluid::USD_FLUID > const m_totalDens_n; + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > const m_phaseDens_n; + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > const m_phaseInternalEnergy_n; /// View on solid properties at the previous converged time step arrayView2d< real64 const > const m_solidInternalEnergy_n; @@ -1013,9 +1011,9 @@ class ResidualNormKernelFactory string const & dofKey, arrayView1d< real64 const > const & localResidual, ElementSubRegionBase const & subRegion, - MultiFluidBase const & fluid, - CoupledSolidBase const & solid, - SolidInternalEnergy const & solidInternalEnergy, + constitutive::MultiFluidBase const & fluid, + constitutive::CoupledSolidBase const & solid, + constitutive::SolidInternalEnergy const & solidInternalEnergy, real64 const minNormalizer, real64 (& residualNorm)[2], real64 (& residualNormalizer)[2] ) diff --git a/src/coreComponents/physicsSolvers/fluidFlow/ThermalCompositionalMultiphaseFVMKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/ThermalCompositionalMultiphaseFVMKernels.hpp index 8b9de7e2650..795aaad63cb 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/ThermalCompositionalMultiphaseFVMKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/ThermalCompositionalMultiphaseFVMKernels.hpp @@ -31,8 +31,6 @@ namespace geos namespace thermalCompositionalMultiphaseFVMKernels { -using namespace constitutive; - /******************************** PhaseMobilityKernel ********************************/ /** @@ -63,8 +61,8 @@ class PhaseMobilityKernel : public isothermalCompositionalMultiphaseFVMKernels:: * @param[in] relperm the relperm model */ PhaseMobilityKernel( ObjectManagerBase & subRegion, - MultiFluidBase const & fluid, - RelativePermeabilityBase const & relperm ) + constitutive::MultiFluidBase const & fluid, + constitutive::RelativePermeabilityBase const & relperm ) : Base( subRegion, fluid, relperm ) {} @@ -76,13 +74,13 @@ class PhaseMobilityKernel : public isothermalCompositionalMultiphaseFVMKernels:: inline void compute( localIndex const ei ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const phaseDens = m_phaseDens[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const dPhaseDens = m_dPhaseDens[ei][0]; - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const phaseVisc = m_phaseVisc[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const dPhaseVisc = m_dPhaseVisc[ei][0]; - arraySlice2d< real64 const, relperm::USD_RELPERM_DS - 2 > const dPhaseRelPerm_dPhaseVolFrac = m_dPhaseRelPerm_dPhaseVolFrac[ei][0]; + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const phaseDens = m_phaseDens[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseDens = m_dPhaseDens[ei][0]; + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const phaseVisc = m_phaseVisc[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const dPhaseVisc = m_dPhaseVisc[ei][0]; + arraySlice2d< real64 const, constitutive::relperm::USD_RELPERM_DS - 2 > const dPhaseRelPerm_dPhaseVolFrac = m_dPhaseRelPerm_dPhaseVolFrac[ei][0]; arraySlice2d< real64 const, compflow::USD_PHASE_DC - 1 > const dPhaseVolFrac = m_dPhaseVolFrac[ei]; Base::compute( ei, [&] ( localIndex const ip, @@ -125,8 +123,8 @@ class PhaseMobilityKernelFactory createAndLaunch( integer const numComp, integer const numPhase, ObjectManagerBase & subRegion, - MultiFluidBase const & fluid, - RelativePermeabilityBase const & relperm ) + constitutive::MultiFluidBase const & fluid, + constitutive::RelativePermeabilityBase const & relperm ) { if( numPhase == 2 ) { @@ -213,12 +211,12 @@ class FaceBasedAssemblyKernel : public isothermalCompositionalMultiphaseFVMKerne StencilAccessors< fields::flow::temperature >; using ThermalMultiFluidAccessors = - StencilMaterialAccessors< MultiFluidBase, + StencilMaterialAccessors< constitutive::MultiFluidBase, fields::multifluid::phaseEnthalpy, fields::multifluid::dPhaseEnthalpy >; using ThermalConductivityAccessors = - StencilMaterialAccessors< MultiPhaseThermalConductivityBase, + StencilMaterialAccessors< constitutive::MultiPhaseThermalConductivityBase, fields::thermalconductivity::effectiveConductivity >; // for now, we treat thermal conductivity explicitly @@ -305,7 +303,7 @@ class FaceBasedAssemblyKernel : public isothermalCompositionalMultiphaseFVMKerne void computeFlux( localIndex const iconn, StackVariables & stack ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; // *********************************************** // First, we call the base computeFlux to compute: @@ -416,9 +414,9 @@ class FaceBasedAssemblyKernel : public isothermalCompositionalMultiphaseFVMKerne // Step 3.2: compute the derivative of component flux wrt temperature // slice some constitutive arrays to avoid too much indexing in component loop - arraySlice1d< real64 const, multifluid::USD_PHASE_COMP - 3 > phaseCompFracSub = + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE_COMP - 3 > phaseCompFracSub = m_phaseCompFrac[er_up][esr_up][ei_up][0][ip]; - arraySlice2d< real64 const, multifluid::USD_PHASE_COMP_DC - 3 > dPhaseCompFracSub = + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC - 3 > dPhaseCompFracSub = m_dPhaseCompFrac[er_up][esr_up][ei_up][0][ip]; for( integer ic = 0; ic < numComp; ++ic ) @@ -588,8 +586,8 @@ class FaceBasedAssemblyKernel : public isothermalCompositionalMultiphaseFVMKerne ElementViewConst< arrayView1d< real64 const > > const m_temp; /// Views on phase enthalpies - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const m_phaseEnthalpy; - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const m_dPhaseEnthalpy; + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const m_phaseEnthalpy; + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const m_dPhaseEnthalpy; /// View on thermal conductivity ElementViewConst< arrayView3d< real64 const > > const m_thermalConductivity; @@ -784,7 +782,7 @@ class DiffusionDispersionFaceBasedAssemblyKernel : void computeDiffusionFlux( localIndex const iconn, StackVariables & stack ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; // *********************************************** // First, we call the base computeFlux to compute the diffusionFlux and its derivatives (including derivatives wrt temperature), @@ -856,7 +854,7 @@ class DiffusionDispersionFaceBasedAssemblyKernel : void computeDispersionFlux( localIndex const iconn, StackVariables & stack ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; // *********************************************** // First, we call the base computeFlux to compute the dispersionFlux and its derivatives (including derivatives wrt temperature), @@ -1046,12 +1044,12 @@ class DirichletFaceBasedAssemblyKernel : public isothermalCompositionalMultiphas StencilAccessors< fields::flow::temperature >; using ThermalMultiFluidAccessors = - StencilMaterialAccessors< MultiFluidBase, + StencilMaterialAccessors< constitutive::MultiFluidBase, fields::multifluid::phaseEnthalpy, fields::multifluid::dPhaseEnthalpy >; using ThermalConductivityAccessors = - StencilMaterialAccessors< MultiPhaseThermalConductivityBase, + StencilMaterialAccessors< constitutive::MultiPhaseThermalConductivityBase, fields::thermalconductivity::effectiveConductivity >; // for now, we treat thermal conductivity explicitly @@ -1160,7 +1158,7 @@ class DirichletFaceBasedAssemblyKernel : public isothermalCompositionalMultiphas StackVariables & stack ) const { using Order = BoundaryStencil::Order; - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; // *********************************************** // First, we call the base computeFlux to compute: @@ -1177,8 +1175,8 @@ class DirichletFaceBasedAssemblyKernel : public isothermalCompositionalMultiphas localIndex const kf, real64 const f, // potGrad times trans real64 const facePhaseMob, - arraySlice1d< const real64, multifluid::USD_PHASE - 2 > const & facePhaseEnthalpy, - arraySlice2d< const real64, multifluid::USD_PHASE_COMP-2 > const & facePhaseCompFrac, + arraySlice1d< const real64, constitutive::multifluid::USD_PHASE - 2 > const & facePhaseEnthalpy, + arraySlice2d< const real64, constitutive::multifluid::USD_PHASE_COMP-2 > const & facePhaseCompFrac, real64 const phaseFlux, real64 const dPhaseFlux_dP, real64 const (&dPhaseFlux_dC)[numComp] ) @@ -1211,9 +1209,9 @@ class DirichletFaceBasedAssemblyKernel : public isothermalCompositionalMultiphas // Step 3.2.a: compute the derivative of component flux wrt temperature // slice some constitutive arrays to avoid too much indexing in component loop - arraySlice1d< real64 const, multifluid::USD_PHASE_COMP - 3 > phaseCompFracSub = + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE_COMP - 3 > phaseCompFracSub = m_phaseCompFrac[er][esr][ei][0][ip]; - arraySlice2d< real64 const, multifluid::USD_PHASE_COMP_DC - 3 > dPhaseCompFracSub = + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC - 3 > dPhaseCompFracSub = m_dPhaseCompFrac[er][esr][ei][0][ip]; for( integer ic = 0; ic < numComp; ++ic ) @@ -1346,8 +1344,8 @@ class DirichletFaceBasedAssemblyKernel : public isothermalCompositionalMultiphas ElementViewConst< arrayView1d< real64 const > > const m_temp; /// Views on phase enthalpies - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const m_phaseEnthalpy; - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const m_dPhaseEnthalpy; + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const m_phaseEnthalpy; + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const m_dPhaseEnthalpy; /// View on thermal conductivity ElementViewConst< arrayView3d< real64 const > > const m_thermalConductivity; @@ -1390,7 +1388,7 @@ class DirichletFaceBasedAssemblyKernelFactory FaceManager const & faceManager, ElementRegionManager const & elemManager, STENCILWRAPPER const & stencilWrapper, - MultiFluidBase & fluidBase, + constitutive::MultiFluidBase & fluidBase, real64 const dt, CRSMatrixView< real64, globalIndex const > const & localMatrix, arrayView1d< real64 > const & localRhs ) diff --git a/src/coreComponents/physicsSolvers/fluidFlow/ThermalSinglePhaseFVMKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/ThermalSinglePhaseFVMKernels.hpp index d1759b86120..0ccb49617ac 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/ThermalSinglePhaseFVMKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/ThermalSinglePhaseFVMKernels.hpp @@ -30,8 +30,6 @@ namespace geos namespace thermalSinglePhaseFVMKernels { -using namespace constitutive; - /******************************** FaceBasedAssemblyKernel ********************************/ /** @@ -83,14 +81,14 @@ class FaceBasedAssemblyKernel : public singlePhaseFVMKernels::FaceBasedAssemblyK fields::flow::dMobility_dTemperature >; using ThermalSinglePhaseFluidAccessors = - StencilMaterialAccessors< SingleFluidBase, + StencilMaterialAccessors< constitutive::SingleFluidBase, fields::singlefluid::dDensity_dTemperature, fields::singlefluid::enthalpy, fields::singlefluid::dEnthalpy_dPressure, fields::singlefluid::dEnthalpy_dTemperature >; using ThermalConductivityAccessors = - StencilMaterialAccessors< SinglePhaseThermalConductivityBase, + StencilMaterialAccessors< constitutive::SinglePhaseThermalConductivityBase, fields::thermalconductivity::effectiveConductivity >; /** @@ -533,14 +531,14 @@ class DirichletFaceBasedAssemblyKernel : public singlePhaseFVMKernels::Dirichlet fields::flow::dMobility_dTemperature >; using ThermalSinglePhaseFluidAccessors = - StencilMaterialAccessors< SingleFluidBase, + StencilMaterialAccessors< constitutive::SingleFluidBase, fields::singlefluid::dDensity_dTemperature, fields::singlefluid::enthalpy, fields::singlefluid::dEnthalpy_dPressure, fields::singlefluid::dEnthalpy_dTemperature >; using ThermalConductivityAccessors = - StencilMaterialAccessors< SinglePhaseThermalConductivityBase, + StencilMaterialAccessors< constitutive::SinglePhaseThermalConductivityBase, fields::thermalconductivity::effectiveConductivity >; /** @@ -778,7 +776,7 @@ class DirichletFaceBasedAssemblyKernelFactory FaceManager const & faceManager, ElementRegionManager const & elemManager, BoundaryStencilWrapper const & stencilWrapper, - SingleFluidBase & fluidBase, + constitutive::SingleFluidBase & fluidBase, real64 const & dt, CRSMatrixView< real64, globalIndex const > const & localMatrix, arrayView1d< real64 > const & localRhs ) diff --git a/src/coreComponents/physicsSolvers/fluidFlow/proppantTransport/ProppantTransportKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/proppantTransport/ProppantTransportKernels.hpp index 7ff85e5ac44..75769763fed 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/proppantTransport/ProppantTransportKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/proppantTransport/ProppantTransportKernels.hpp @@ -40,8 +40,6 @@ namespace geos namespace proppantTransportKernels { -using namespace constitutive; - /******************************** FluidUpdateKernel ********************************/ struct FluidUpdateKernel @@ -191,7 +189,7 @@ struct FluxKernel fields::elementAperture >; using ParticleFluidAccessors = - StencilMaterialAccessors< ParticleFluidBase, + StencilMaterialAccessors< constitutive::ParticleFluidBase, fields::particlefluid::settlingFactor, fields::particlefluid::dSettlingFactor_dPressure, fields::particlefluid::dSettlingFactor_dProppantConcentration, @@ -200,7 +198,7 @@ struct FluxKernel fields::particlefluid::dCollisionFactor_dProppantConcentration >; using SlurryFluidAccessors = - StencilMaterialAccessors< SlurryFluidBase, + StencilMaterialAccessors< constitutive::SlurryFluidBase, fields::singlefluid::density, fields::singlefluid::dDensity_dPressure, fields::slurryfluid::dDensity_dProppantConcentration, @@ -217,12 +215,12 @@ struct FluxKernel fields::slurryfluid::dFluidDensity_dComponentConcentration >; using CellBasedFluxSlurryFluidAccessors = - StencilMaterialAccessors< SlurryFluidBase, + StencilMaterialAccessors< constitutive::SlurryFluidBase, fields::singlefluid::density, fields::singlefluid::viscosity >; using PermeabilityAccessors = - StencilMaterialAccessors< PermeabilityBase, + StencilMaterialAccessors< constitutive::PermeabilityBase, fields::permeability::permeability, fields::permeability::permeabilityMultiplier >; @@ -362,10 +360,10 @@ struct ProppantPackVolumeKernel fields::proppant::isProppantBoundary >; using ParticleFluidAccessors = - StencilMaterialAccessors< ParticleFluidBase, fields::particlefluid::settlingFactor >; + StencilMaterialAccessors< constitutive::ParticleFluidBase, fields::particlefluid::settlingFactor >; using SlurryFluidAccessors = - StencilMaterialAccessors< SlurryFluidBase, + StencilMaterialAccessors< constitutive::SlurryFluidBase, fields::singlefluid::density, fields::slurryfluid::fluidDensity, fields::slurryfluid::fluidViscosity >; diff --git a/src/coreComponents/physicsSolvers/fluidFlow/wells/CompositionalMultiphaseWellKernels.cpp b/src/coreComponents/physicsSolvers/fluidFlow/wells/CompositionalMultiphaseWellKernels.cpp index 809751a6b8c..5f25f370274 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/wells/CompositionalMultiphaseWellKernels.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/wells/CompositionalMultiphaseWellKernels.cpp @@ -26,6 +26,7 @@ namespace geos { +using namespace constitutive; namespace compositionalMultiphaseWellKernels { diff --git a/src/coreComponents/physicsSolvers/fluidFlow/wells/CompositionalMultiphaseWellKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/wells/CompositionalMultiphaseWellKernels.hpp index 9b00a436c37..48de11b7987 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/wells/CompositionalMultiphaseWellKernels.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/wells/CompositionalMultiphaseWellKernels.hpp @@ -43,8 +43,6 @@ namespace geos namespace compositionalMultiphaseWellKernels { -using namespace constitutive; - static constexpr real64 minDensForDivision = 1e-10; // tag to access well and reservoir elements in perforation rates computation @@ -242,7 +240,7 @@ struct PerforationKernel fields::flow::dGlobalCompFraction_dGlobalCompDensity >; using MultiFluidAccessors = - StencilMaterialAccessors< MultiFluidBase, + StencilMaterialAccessors< constitutive::MultiFluidBase, fields::multifluid::phaseDensity, fields::multifluid::dPhaseDensity, fields::multifluid::phaseViscosity, @@ -251,7 +249,7 @@ struct PerforationKernel fields::multifluid::dPhaseCompFraction >; using RelPermAccessors = - StencilMaterialAccessors< RelativePermeabilityBase, + StencilMaterialAccessors< constitutive::RelativePermeabilityBase, fields::relperm::phaseRelPerm, fields::relperm::dPhaseRelPerm_dPhaseVolFraction >; @@ -276,14 +274,14 @@ struct PerforationKernel arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & resPhaseVolFrac, arraySlice2d< real64 const, compflow::USD_PHASE_DC - 1 > const & dResPhaseVolFrac, arraySlice2d< real64 const, compflow::USD_COMP_DC - 1 > const & dResCompFrac_dCompDens, - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const & resPhaseDens, - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const & dResPhaseDens, - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const & resPhaseVisc, - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const & dResPhaseVisc, - arraySlice2d< real64 const, multifluid::USD_PHASE_COMP - 2 > const & resPhaseCompFrac, - arraySlice3d< real64 const, multifluid::USD_PHASE_COMP_DC - 2 > const & dResPhaseCompFrac, - arraySlice1d< real64 const, relperm::USD_RELPERM - 2 > const & resPhaseRelPerm, - arraySlice2d< real64 const, relperm::USD_RELPERM_DS - 2 > const & dResPhaseRelPerm_dPhaseVolFrac, + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const & resPhaseDens, + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const & dResPhaseDens, + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const & resPhaseVisc, + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const & dResPhaseVisc, + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_COMP - 2 > const & resPhaseCompFrac, + arraySlice3d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC - 2 > const & dResPhaseCompFrac, + arraySlice1d< real64 const, constitutive::relperm::USD_RELPERM - 2 > const & resPhaseRelPerm, + arraySlice2d< real64 const, constitutive::relperm::USD_RELPERM_DS - 2 > const & dResPhaseRelPerm_dPhaseVolFrac, real64 const & wellElemGravCoef, real64 const & wellElemPres, arraySlice1d< real64 const, compflow::USD_COMP - 1 > const & wellElemCompDens, @@ -306,14 +304,14 @@ struct PerforationKernel ElementViewConst< arrayView2d< real64 const, compflow::USD_PHASE > > const & resPhaseVolFrac, ElementViewConst< arrayView3d< real64 const, compflow::USD_PHASE_DC > > const & dResPhaseVolFrac_dComp, ElementViewConst< arrayView3d< real64 const, compflow::USD_COMP_DC > > const & dResCompFrac_dCompDens, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & resPhaseDens, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dResPhaseDens, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & resPhaseVisc, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_DC > > const & dResPhaseVisc, - ElementViewConst< arrayView4d< real64 const, multifluid::USD_PHASE_COMP > > const & resPhaseCompFrac, - ElementViewConst< arrayView5d< real64 const, multifluid::USD_PHASE_COMP_DC > > const & dResPhaseCompFrac, - ElementViewConst< arrayView3d< real64 const, relperm::USD_RELPERM > > const & resPhaseRelPerm, - ElementViewConst< arrayView4d< real64 const, relperm::USD_RELPERM_DS > > const & dResPhaseRelPerm_dPhaseVolFrac, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & resPhaseDens, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dResPhaseDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & resPhaseVisc, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > > const & dResPhaseVisc, + ElementViewConst< arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > > const & resPhaseCompFrac, + ElementViewConst< arrayView5d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC > > const & dResPhaseCompFrac, + ElementViewConst< arrayView3d< real64 const, constitutive::relperm::USD_RELPERM > > const & resPhaseRelPerm, + ElementViewConst< arrayView4d< real64 const, constitutive::relperm::USD_RELPERM_DS > > const & dResPhaseRelPerm_dPhaseVolFrac, arrayView1d< real64 const > const & wellElemGravCoef, arrayView1d< real64 const > const & wellElemPres, arrayView2d< real64 const, compflow::USD_COMP > const & wellElemCompDens, @@ -351,13 +349,13 @@ struct AccumulationKernel arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFrac, arraySlice2d< real64 const, compflow::USD_PHASE_DC - 1 > const & dPhaseVolFrac, arraySlice2d< real64 const, compflow::USD_COMP_DC - 1 > const & dCompFrac_dCompDens, - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const & phaseDens, - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > const & dPhaseDens, - arraySlice2d< real64 const, multifluid::USD_PHASE_COMP - 2 > const & phaseCompFrac, - arraySlice3d< real64 const, multifluid::USD_PHASE_COMP_DC - 2 > const & dPhaseCompFrac, + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const & phaseDens, + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > const & dPhaseDens, + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_COMP - 2 > const & phaseCompFrac, + arraySlice3d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC - 2 > const & dPhaseCompFrac, arraySlice1d< real64 const, compflow::USD_PHASE - 1 > const & phaseVolFrac_n, - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > const & phaseDens_n, - arraySlice2d< real64 const, multifluid::USD_PHASE_COMP - 2 > const & phaseCompFrac_n, + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > const & phaseDens_n, + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_COMP - 2 > const & phaseCompFrac_n, real64 ( &localAccum )[NC], real64 ( &localAccumJacobian )[NC][NC + 1] ); @@ -373,13 +371,13 @@ struct AccumulationKernel arrayView2d< real64 const, compflow::USD_PHASE > const & wellElemPhaseVolFrac, arrayView3d< real64 const, compflow::USD_PHASE_DC > const & dWellElemPhaseVolFrac, arrayView3d< real64 const, compflow::USD_COMP_DC > const & dWellElemCompFrac_dCompDens, - arrayView3d< real64 const, multifluid::USD_PHASE > const & wellElemPhaseDens, - arrayView4d< real64 const, multifluid::USD_PHASE_DC > const & dWellElemPhaseDens, - arrayView4d< real64 const, multifluid::USD_PHASE_COMP > const & wellElemPhaseCompFrac, - arrayView5d< real64 const, multifluid::USD_PHASE_COMP_DC > const & dWellElemPhaseCompFrac, + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > const & wellElemPhaseDens, + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > const & dWellElemPhaseDens, + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > const & wellElemPhaseCompFrac, + arrayView5d< real64 const, constitutive::multifluid::USD_PHASE_COMP_DC > const & dWellElemPhaseCompFrac, arrayView2d< real64 const, compflow::USD_PHASE > const & wellElemPhaseVolFrac_n, - arrayView3d< real64 const, multifluid::USD_PHASE > const & wellElemPhaseDens_n, - arrayView4d< real64 const, multifluid::USD_PHASE_COMP > const & wellElemPhaseCompFrac_n, + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > const & wellElemPhaseDens_n, + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_COMP > const & wellElemPhaseCompFrac_n, CRSMatrixView< real64, globalIndex const > const & localMatrix, arrayView1d< real64 > const & localRhs ); @@ -431,7 +429,7 @@ struct PresTempCompFracInitializationKernel fields::flow::phaseVolumeFraction >; using MultiFluidAccessors = - StencilMaterialAccessors< MultiFluidBase, + StencilMaterialAccessors< constitutive::MultiFluidBase, fields::multifluid::phaseMassDensity >; @@ -457,7 +455,7 @@ struct PresTempCompFracInitializationKernel ElementViewConst< arrayView1d< real64 const > > const & resTemp, ElementViewConst< arrayView2d< real64 const, compflow::USD_COMP > > const & resCompDens, ElementViewConst< arrayView2d< real64 const, compflow::USD_PHASE > > const & resPhaseVolFrac, - ElementViewConst< arrayView3d< real64 const, multifluid::USD_PHASE > > const & resPhaseMassDens, + ElementViewConst< arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > > const & resPhaseMassDens, arrayView1d< localIndex const > const & resElementRegion, arrayView1d< localIndex const > const & resElementSubRegion, arrayView1d< localIndex const > const & resElementIndex, @@ -478,7 +476,7 @@ struct CompDensInitializationKernel launch( localIndex const subRegionSize, integer const numComponents, arrayView2d< real64 const, compflow::USD_COMP > const & wellElemCompFrac, - arrayView2d< real64 const, multifluid::USD_FLUID > const & wellElemTotalDens, + arrayView2d< real64 const, constitutive::multifluid::USD_FLUID > const & wellElemTotalDens, arrayView2d< real64, compflow::USD_COMP > const & wellElemCompDens ); }; @@ -493,8 +491,8 @@ struct RateInitializationKernel integer const targetPhaseIndex, WellControls const & wellControls, real64 const & currentTime, - arrayView3d< real64 const, multifluid::USD_PHASE > const & phaseDens, - arrayView2d< real64 const, multifluid::USD_FLUID > const & totalDens, + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > const & phaseDens, + arrayView2d< real64 const, constitutive::multifluid::USD_FLUID > const & totalDens, arrayView1d< real64 > const & connRate ); }; @@ -525,7 +523,7 @@ class TotalMassDensityKernel : public isothermalCompositionalMultiphaseBaseKerne * @param[in] fluid the fluid model */ TotalMassDensityKernel( ObjectManagerBase & subRegion, - MultiFluidBase const & fluid ) + constitutive::MultiFluidBase const & fluid ) : Base(), m_phaseVolFrac( subRegion.getField< fields::well::phaseVolumeFraction >() ), m_dPhaseVolFrac( subRegion.getField< fields::well::dPhaseVolumeFraction >() ), @@ -549,13 +547,13 @@ class TotalMassDensityKernel : public isothermalCompositionalMultiphaseBaseKerne void compute( localIndex const ei, FUNC && totalMassDensityKernelOp = NoOpFunc{} ) const { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; arraySlice1d< real64 const, compflow::USD_PHASE - 1 > phaseVolFrac = m_phaseVolFrac[ei]; arraySlice2d< real64 const, compflow::USD_PHASE_DC - 1 > dPhaseVolFrac = m_dPhaseVolFrac[ei]; arraySlice2d< real64 const, compflow::USD_COMP_DC - 1 > dCompFrac_dCompDens = m_dCompFrac_dCompDens[ei]; - arraySlice1d< real64 const, multifluid::USD_PHASE - 2 > phaseMassDens = m_phaseMassDens[ei][0]; - arraySlice2d< real64 const, multifluid::USD_PHASE_DC - 2 > dPhaseMassDens = m_dPhaseMassDens[ei][0]; + arraySlice1d< real64 const, constitutive::multifluid::USD_PHASE - 2 > phaseMassDens = m_phaseMassDens[ei][0]; + arraySlice2d< real64 const, constitutive::multifluid::USD_PHASE_DC - 2 > dPhaseMassDens = m_dPhaseMassDens[ei][0]; real64 & totalMassDens = m_totalMassDens[ei]; real64 & dTotalMassDens_dPres = m_dTotalMassDens_dPres[ei]; arraySlice1d< real64, compflow::USD_FLUID_DC - 1 > dTotalMassDens_dCompDens = m_dTotalMassDens_dCompDens[ei]; @@ -596,8 +594,8 @@ class TotalMassDensityKernel : public isothermalCompositionalMultiphaseBaseKerne arrayView3d< real64 const, compflow::USD_COMP_DC > m_dCompFrac_dCompDens; /// Views on phase mass densities - arrayView3d< real64 const, multifluid::USD_PHASE > m_phaseMassDens; - arrayView4d< real64 const, multifluid::USD_PHASE_DC > m_dPhaseMassDens; + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > m_phaseMassDens; + arrayView4d< real64 const, constitutive::multifluid::USD_PHASE_DC > m_dPhaseMassDens; // outputs @@ -628,7 +626,7 @@ class TotalMassDensityKernelFactory createAndLaunch( integer const numComp, integer const numPhase, ObjectManagerBase & subRegion, - MultiFluidBase const & fluid ) + constitutive::MultiFluidBase const & fluid ) { if( numPhase == 2 ) { @@ -675,7 +673,7 @@ class ResidualNormKernel : public solverBaseKernels::ResidualNormKernelBase< 1 > integer const numDof, integer const targetPhaseIndex, WellElementSubRegion const & subRegion, - MultiFluidBase const & fluid, + constitutive::MultiFluidBase const & fluid, WellControls const & wellControls, real64 const timeAtEndOfStep, real64 const dt, @@ -851,8 +849,8 @@ class ResidualNormKernel : public solverBaseKernels::ResidualNormKernelBase< 1 > arrayView1d< real64 const > const m_volume; /// View on phase/total density at the previous converged time step - arrayView3d< real64 const, multifluid::USD_PHASE > const m_phaseDens_n; - arrayView2d< real64 const, multifluid::USD_FLUID > const m_totalDens_n; + arrayView3d< real64 const, constitutive::multifluid::USD_PHASE > const m_phaseDens_n; + arrayView2d< real64 const, constitutive::multifluid::USD_FLUID > const m_totalDens_n; }; @@ -888,7 +886,7 @@ class ResidualNormKernelFactory string const & dofKey, arrayView1d< real64 const > const & localResidual, WellElementSubRegion const & subRegion, - MultiFluidBase const & fluid, + constitutive::MultiFluidBase const & fluid, WellControls const & wellControls, real64 const timeAtEndOfStep, real64 const dt, diff --git a/src/coreComponents/physicsSolvers/multiphysics/PoromechanicsSolver.hpp b/src/coreComponents/physicsSolvers/multiphysics/PoromechanicsSolver.hpp index bf6446aa0a6..0197591a1c8 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/PoromechanicsSolver.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/PoromechanicsSolver.hpp @@ -50,10 +50,6 @@ ENUM_STRINGS( StabilizationType, "Local" ); } -using namespace stabilization; -using namespace fields; -using namespace constitutive; -using namespace dataRepository; template< typename FLOW_SOLVER, typename MECHANICS_SOLVER = SolidMechanicsLagrangianFEM > class PoromechanicsSolver : public CoupledSolver< FLOW_SOLVER, MECHANICS_SOLVER > @@ -99,9 +95,9 @@ class PoromechanicsSolver : public CoupledSolver< FLOW_SOLVER, MECHANICS_SOLVER this->registerWrapper( viewKeyStruct::stabilizationTypeString(), &m_stabilizationType ). setInputFlag( dataRepository::InputFlags::OPTIONAL ). setDescription( "StabilizationType. Options are:\n" + - toString( StabilizationType::None ) + "- Add no stabilization to mass equation \n" + - toString( StabilizationType::Global ) + "- Add jump stabilization to all faces \n" + - toString( StabilizationType::Local ) + "- Add jump stabilization on interior of macro elements" ); + toString( stabilization::StabilizationType::None ) + "- Add no stabilization to mass equation \n" + + toString( stabilization::StabilizationType::Global ) + "- Add jump stabilization to all faces \n" + + toString( stabilization::StabilizationType::Local ) + "- Add jump stabilization on interior of macro elements" ); this->registerWrapper( viewKeyStruct::stabilizationRegionNamesString(), &m_stabilizationRegionNames ). setRTTypeName( rtTypes::CustomTypes::groupNameRefArray ). @@ -129,12 +125,12 @@ class PoromechanicsSolver : public CoupledSolver< FLOW_SOLVER, MECHANICS_SOLVER if( dynamic_cast< SurfaceElementSubRegion * >( &subRegion ) ) { subRegion.registerWrapper< string >( viewKeyStruct::hydraulicApertureRelationNameString() ). - setPlotLevel( PlotLevel::NOPLOT ). - setRestartFlags( RestartFlags::NO_WRITE ). + setPlotLevel( dataRepository::PlotLevel::NOPLOT ). + setRestartFlags( dataRepository::RestartFlags::NO_WRITE ). setSizedFromParent( 0 ); string & hydraulicApertureModelName = subRegion.getReference< string >( viewKeyStruct::hydraulicApertureRelationNameString() ); - hydraulicApertureModelName = SolverBase::getConstitutiveName< HydraulicApertureBase >( subRegion ); + hydraulicApertureModelName = SolverBase::getConstitutiveName< constitutive::HydraulicApertureBase >( subRegion ); GEOS_ERROR_IF( hydraulicApertureModelName.empty(), GEOS_FMT( "{}: HydraulicApertureBase model not found on subregion {}", this->getDataContext(), subRegion.getDataContext() ) ); } @@ -145,7 +141,7 @@ class PoromechanicsSolver : public CoupledSolver< FLOW_SOLVER, MECHANICS_SOLVER { Base::initializePreSubGroups(); - GEOS_THROW_IF( m_stabilizationType == StabilizationType::Local, + GEOS_THROW_IF( m_stabilizationType == stabilization::StabilizationType::Local, this->getWrapperDataContext( viewKeyStruct::stabilizationTypeString() ) << ": Local stabilization has been temporarily disabled", InputError ); @@ -197,7 +193,7 @@ class PoromechanicsSolver : public CoupledSolver< FLOW_SOLVER, MECHANICS_SOLVER flowSolver()->enableFixedStressPoromechanicsUpdate(); } - if( m_stabilizationType == StabilizationType::Global || m_stabilizationType == StabilizationType::Local ) + if( m_stabilizationType == stabilization::StabilizationType::Global || m_stabilizationType == stabilization::StabilizationType::Local ) { flowSolver()->enableJumpStabilization(); } @@ -230,7 +226,7 @@ class PoromechanicsSolver : public CoupledSolver< FLOW_SOLVER, MECHANICS_SOLVER subRegion.registerField< fields::poromechanics::bulkDensity >( this->getName() ); } - if( m_stabilizationType == StabilizationType::Global || m_stabilizationType == StabilizationType::Local ) + if( m_stabilizationType == stabilization::StabilizationType::Global || m_stabilizationType == stabilization::StabilizationType::Local ) { subRegion.registerField< fields::flow::macroElementIndex >( this->getName()); subRegion.registerField< fields::flow::elementStabConstant >( this->getName()); @@ -245,7 +241,7 @@ class PoromechanicsSolver : public CoupledSolver< FLOW_SOLVER, MECHANICS_SOLVER { flowSolver()->setKeepFlowVariablesConstantDuringInitStep( m_performStressInitialization ); - if( this->m_stabilizationType == StabilizationType::Global || this->m_stabilizationType == StabilizationType::Local ) + if( this->m_stabilizationType == stabilization::StabilizationType::Global || this->m_stabilizationType == stabilization::StabilizationType::Local ) { this->updateStabilizationParameters( domain ); } diff --git a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanics.cpp b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanics.cpp index c11d8bab189..d2c9d984348 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanics.cpp +++ b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanics.cpp @@ -39,6 +39,7 @@ namespace geos using namespace constitutive; using namespace dataRepository; using namespace fields; +using namespace stabilization; template< typename FLOW_SOLVER, typename MECHANICS_SOLVER > SinglePhasePoromechanics< FLOW_SOLVER, MECHANICS_SOLVER >::SinglePhasePoromechanics( const string & name, diff --git a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsConformingFractures.hpp b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsConformingFractures.hpp index 11cc0032051..5b1ecfc36f4 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsConformingFractures.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsConformingFractures.hpp @@ -29,9 +29,6 @@ namespace geos namespace singlePhasePoromechanicsConformingFracturesKernels { -using namespace fluxKernelsHelper; -using namespace constitutive; - template< integer NUM_EQN, integer NUM_DOF > class ConnectorBasedAssemblyKernel : public singlePhaseFVMKernels::FaceBasedAssemblyKernel< NUM_EQN, NUM_DOF, SurfaceElementStencilWrapper > { @@ -51,7 +48,7 @@ class ConnectorBasedAssemblyKernel : public singlePhaseFVMKernels::FaceBasedAsse using SinglePhaseFlowAccessors = AbstractBase::SinglePhaseFlowAccessors; using SinglePhaseFluidAccessors = AbstractBase::SinglePhaseFluidAccessors; using PermeabilityAccessors = AbstractBase::PermeabilityAccessors; - using FracturePermeabilityAccessors = StencilMaterialAccessors< PermeabilityBase, + using FracturePermeabilityAccessors = StencilMaterialAccessors< constitutive::PermeabilityBase, fields::permeability::dPerm_dDispJump >; using AbstractBase::m_dt; @@ -193,21 +190,21 @@ class ConnectorBasedAssemblyKernel : public singlePhaseFVMKernels::FaceBasedAsse localIndex const subRegionIndex[2] = {m_sesri[iconn][k[0]], m_sesri[iconn][k[1]]}; localIndex const elementIndex[2] = {m_sei[iconn][k[0]], m_sei[iconn][k[1]]}; - computeSinglePhaseFlux( regionIndex, subRegionIndex, elementIndex, - trans, - dTrans, - m_pres, - m_gravCoef, - m_dens, - m_dDens_dPres, - m_mob, - m_dMob_dPres, - alpha, - mobility, - potGrad, - fluxVal, - dFlux_dP, - dFlux_dTrans ); + fluxKernelsHelper::computeSinglePhaseFlux( regionIndex, subRegionIndex, elementIndex, + trans, + dTrans, + m_pres, + m_gravCoef, + m_dens, + m_dDens_dPres, + m_mob, + m_dMob_dPres, + alpha, + mobility, + potGrad, + fluxVal, + dFlux_dP, + dFlux_dTrans ); // populate local flux vector and derivatives stack.localFlux[k[0]* numDof] += m_dt * fluxVal; diff --git a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEmbeddedFractures.hpp b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEmbeddedFractures.hpp index 421fbb99ea9..40067909e6b 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEmbeddedFractures.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/SinglePhasePoromechanicsEmbeddedFractures.hpp @@ -29,9 +29,6 @@ namespace geos namespace singlePhasePoromechanicsEmbeddedFracturesKernels { -using namespace fluxKernelsHelper; -using namespace constitutive; - template< integer NUM_EQN, integer NUM_DOF > class ConnectorBasedAssemblyKernel : public singlePhaseFVMKernels::FaceBasedAssemblyKernel< NUM_EQN, NUM_DOF, SurfaceElementStencilWrapper > { @@ -51,7 +48,7 @@ class ConnectorBasedAssemblyKernel : public singlePhaseFVMKernels::FaceBasedAsse using SinglePhaseFlowAccessors = AbstractBase::SinglePhaseFlowAccessors; using SinglePhaseFluidAccessors = AbstractBase::SinglePhaseFluidAccessors; using PermeabilityAccessors = AbstractBase::PermeabilityAccessors; - using FracturePermeabilityAccessors = StencilMaterialAccessors< PermeabilityBase, + using FracturePermeabilityAccessors = StencilMaterialAccessors< constitutive::PermeabilityBase, fields::permeability::dPerm_dDispJump >; using AbstractBase::m_dt; using AbstractBase::m_rankOffset; @@ -183,21 +180,21 @@ class ConnectorBasedAssemblyKernel : public singlePhaseFVMKernels::FaceBasedAsse real64 mobility = 0.0; real64 potGrad = 0.0; - computeSinglePhaseFlux( regionIndex, subRegionIndex, elementIndex, - trans, - dTrans, - m_pres, - m_gravCoef, - m_dens, - m_dDens_dPres, - m_mob, - m_dMob_dPres, - alpha, - mobility, - potGrad, - fluxVal, - dFlux_dP, - dFlux_dTrans ); + fluxKernelsHelper::computeSinglePhaseFlux( regionIndex, subRegionIndex, elementIndex, + trans, + dTrans, + m_pres, + m_gravCoef, + m_dens, + m_dDens_dPres, + m_mob, + m_dMob_dPres, + alpha, + mobility, + potGrad, + fluxVal, + dFlux_dP, + dFlux_dTrans ); diff --git a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/ThermalSinglePhasePoromechanicsConformingFractures.hpp b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/ThermalSinglePhasePoromechanicsConformingFractures.hpp index 99d5dca2107..3cf7cb0a08d 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/ThermalSinglePhasePoromechanicsConformingFractures.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/ThermalSinglePhasePoromechanicsConformingFractures.hpp @@ -28,9 +28,6 @@ namespace geos namespace thermalSinglePhasePoromechanicsConformingFracturesKernels { -using namespace fluxKernelsHelper; -using namespace constitutive; - template< integer NUM_EQN, integer NUM_DOF > class ConnectorBasedAssemblyKernel : public singlePhasePoromechanicsConformingFracturesKernels::ConnectorBasedAssemblyKernel< NUM_EQN, NUM_DOF > { @@ -50,7 +47,7 @@ class ConnectorBasedAssemblyKernel : public singlePhasePoromechanicsConformingFr using SinglePhaseFlowAccessors = SinglePhaseFVMAbstractBase::SinglePhaseFlowAccessors; using SinglePhaseFluidAccessors = SinglePhaseFVMAbstractBase::SinglePhaseFluidAccessors; using PermeabilityAccessors = SinglePhaseFVMAbstractBase::PermeabilityAccessors; - using FracturePermeabilityAccessors = StencilMaterialAccessors< PermeabilityBase, + using FracturePermeabilityAccessors = StencilMaterialAccessors< constitutive::PermeabilityBase, fields::permeability::dPerm_dDispJump >; using SinglePhaseFVMAbstractBase::m_dt; using SinglePhaseFVMAbstractBase::m_rankOffset; @@ -78,14 +75,14 @@ class ConnectorBasedAssemblyKernel : public singlePhasePoromechanicsConformingFr fields::flow::dMobility_dTemperature >; using ThermalSinglePhaseFluidAccessors = - StencilMaterialAccessors< SingleFluidBase, + StencilMaterialAccessors< constitutive::SingleFluidBase, fields::singlefluid::dDensity_dTemperature, fields::singlefluid::enthalpy, fields::singlefluid::dEnthalpy_dPressure, fields::singlefluid::dEnthalpy_dTemperature >; using ThermalConductivityAccessors = - StencilMaterialAccessors< SinglePhaseThermalConductivityBase, + StencilMaterialAccessors< constitutive::SinglePhaseThermalConductivityBase, fields::thermalconductivity::effectiveConductivity >; @@ -208,25 +205,25 @@ class ConnectorBasedAssemblyKernel : public singlePhasePoromechanicsConformingFr real64 trans[2] = {stack.transmissibility[0][0], stack.transmissibility[0][1]}; real64 dMassFlux_dT[2]{}; - computeEnthalpyFlux( seri, sesri, sei, - trans, - m_enthalpy, - m_dEnthalpy_dPres, - m_dEnthalpy_dTemp, - m_gravCoef, - m_dDens_dTemp, - m_dMob_dTemp, - alpha, - mobility, - potGrad, - massFlux, - dMassFlux_dTrans, - dMassFlux_dP, - dMassFlux_dT, - stack.energyFlux, - stack.dEnergyFlux_dTrans, - stack.dEnergyFlux_dP, - stack.dEnergyFlux_dT ); + fluxKernelsHelper::computeEnthalpyFlux( seri, sesri, sei, + trans, + m_enthalpy, + m_dEnthalpy_dPres, + m_dEnthalpy_dTemp, + m_gravCoef, + m_dDens_dTemp, + m_dMob_dTemp, + alpha, + mobility, + potGrad, + massFlux, + dMassFlux_dTrans, + dMassFlux_dP, + dMassFlux_dT, + stack.energyFlux, + stack.dEnergyFlux_dTrans, + stack.dEnergyFlux_dP, + stack.dEnergyFlux_dT ); // add dMassFlux_dT to localFluxJacobian for( integer ke = 0; ke < 2; ++ke ) @@ -263,7 +260,7 @@ class ConnectorBasedAssemblyKernel : public singlePhasePoromechanicsConformingFr localIndex const sei[2] = {m_sei( iconn, k[0] ), m_sei( iconn, k[1] )}; // Step 2: compute temperature difference at the interface - computeConductiveFlux( seri, sesri, sei, m_temp, thermalTrans, stack.energyFlux, stack.dEnergyFlux_dT ); + fluxKernelsHelper::computeConductiveFlux( seri, sesri, sei, m_temp, thermalTrans, stack.energyFlux, stack.dEnergyFlux_dT ); // add energyFlux and its derivatives to localFlux and localFluxJacobian stack.localFlux[k[0]*numEqn + numEqn - 1] += m_dt * stack.energyFlux; diff --git a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/ThermalSinglePhasePoromechanicsEmbeddedFractures.hpp b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/ThermalSinglePhasePoromechanicsEmbeddedFractures.hpp index 645e03b8088..1f099e4aac4 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/ThermalSinglePhasePoromechanicsEmbeddedFractures.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/poromechanicsKernels/ThermalSinglePhasePoromechanicsEmbeddedFractures.hpp @@ -28,9 +28,6 @@ namespace geos namespace thermalSinglePhasePoromechanicsEmbeddedFracturesKernels { -using namespace fluxKernelsHelper; -using namespace constitutive; - template< integer NUM_EQN, integer NUM_DOF > class ConnectorBasedAssemblyKernel : public singlePhasePoromechanicsEmbeddedFracturesKernels::ConnectorBasedAssemblyKernel< NUM_EQN, NUM_DOF > { @@ -50,7 +47,7 @@ class ConnectorBasedAssemblyKernel : public singlePhasePoromechanicsEmbeddedFrac using SinglePhaseFlowAccessors = SinglePhaseFVMAbstractBase::SinglePhaseFlowAccessors; using SinglePhaseFluidAccessors = SinglePhaseFVMAbstractBase::SinglePhaseFluidAccessors; using PermeabilityAccessors = SinglePhaseFVMAbstractBase::PermeabilityAccessors; - using FracturePermeabilityAccessors = StencilMaterialAccessors< PermeabilityBase, + using FracturePermeabilityAccessors = StencilMaterialAccessors< constitutive::PermeabilityBase, fields::permeability::dPerm_dDispJump >; using SinglePhaseFVMAbstractBase::m_dt; using SinglePhaseFVMAbstractBase::m_rankOffset; @@ -78,14 +75,14 @@ class ConnectorBasedAssemblyKernel : public singlePhasePoromechanicsEmbeddedFrac fields::flow::dMobility_dTemperature >; using ThermalSinglePhaseFluidAccessors = - StencilMaterialAccessors< SingleFluidBase, + StencilMaterialAccessors< constitutive::SingleFluidBase, fields::singlefluid::dDensity_dTemperature, fields::singlefluid::enthalpy, fields::singlefluid::dEnthalpy_dPressure, fields::singlefluid::dEnthalpy_dTemperature >; using ThermalConductivityAccessors = - StencilMaterialAccessors< SinglePhaseThermalConductivityBase, + StencilMaterialAccessors< constitutive::SinglePhaseThermalConductivityBase, fields::thermalconductivity::effectiveConductivity >; @@ -207,25 +204,25 @@ class ConnectorBasedAssemblyKernel : public singlePhasePoromechanicsEmbeddedFrac real64 trans[2] = {stack.transmissibility[0][0], stack.transmissibility[0][1]}; real64 dMassFlux_dT[2]{}; - computeEnthalpyFlux( seri, sesri, sei, - trans, - m_enthalpy, - m_dEnthalpy_dPres, - m_dEnthalpy_dTemp, - m_gravCoef, - m_dDens_dTemp, - m_dMob_dTemp, - alpha, - mobility, - potGrad, - massFlux, - dMassFlux_dTrans, - dMassFlux_dP, - dMassFlux_dT, - stack.energyFlux, - stack.dEnergyFlux_dTrans, - stack.dEnergyFlux_dP, - stack.dEnergyFlux_dT ); + fluxKernelsHelper::computeEnthalpyFlux( seri, sesri, sei, + trans, + m_enthalpy, + m_dEnthalpy_dPres, + m_dEnthalpy_dTemp, + m_gravCoef, + m_dDens_dTemp, + m_dMob_dTemp, + alpha, + mobility, + potGrad, + massFlux, + dMassFlux_dTrans, + dMassFlux_dP, + dMassFlux_dT, + stack.energyFlux, + stack.dEnergyFlux_dTrans, + stack.dEnergyFlux_dP, + stack.dEnergyFlux_dT ); for( localIndex i=0; i < 3; i++ ) { @@ -274,7 +271,7 @@ class ConnectorBasedAssemblyKernel : public singlePhasePoromechanicsEmbeddedFrac localIndex const sei[2] = {m_sei( iconn, k[0] ), m_sei( iconn, k[1] )}; // Step 2: compute temperature difference at the interface - computeConductiveFlux( seri, sesri, sei, m_temp, thermalTrans, stack.energyFlux, stack.dEnergyFlux_dT ); + fluxKernelsHelper::computeConductiveFlux( seri, sesri, sei, m_temp, thermalTrans, stack.energyFlux, stack.dEnergyFlux_dT ); // add energyFlux and its derivatives to localFlux and localFluxJacobian stack.localFlux[k[0]*numEqn + numEqn - 1] += m_dt * stack.energyFlux; diff --git a/src/coreComponents/physicsSolvers/surfaceGeneration/kernels/surfaceGenerationKernels.hpp b/src/coreComponents/physicsSolvers/surfaceGeneration/kernels/surfaceGenerationKernels.hpp index ce08a428544..161dec93ac1 100644 --- a/src/coreComponents/physicsSolvers/surfaceGeneration/kernels/surfaceGenerationKernels.hpp +++ b/src/coreComponents/physicsSolvers/surfaceGeneration/kernels/surfaceGenerationKernels.hpp @@ -32,8 +32,6 @@ namespace geos namespace surfaceGenerationKernels { -using namespace surfaceGenerationKernelsHelpers; - class NodalForceKernel { @@ -76,11 +74,11 @@ class NodalForceKernel { real64 const quadratureStress[6] = LVARRAY_TENSOROPS_INIT_LOCAL_6 ( m_stress[er][esr][m_solidMaterialFullIndex[er]][ei][q] ); real64 const dNdX[3] = LVARRAY_TENSOROPS_INIT_LOCAL_3 ( m_dNdX[er][esr][ei][q][targetNode] ); - computeNodalForce( quadratureStress, dNdX, m_detJ[er][esr][ei][q], force ); + surfaceGenerationKernelsHelpers::computeNodalForce( quadratureStress, dNdX, m_detJ[er][esr][ei][q], force ); } //wu40: the nodal force need to be weighted by Young's modulus and possion's ratio. - scaleNodalForce( m_bulkModulus[er][esr][m_solidMaterialFullIndex[er]][ei], m_shearModulus[er][esr][m_solidMaterialFullIndex[er]][ei], force ); + surfaceGenerationKernelsHelpers::scaleNodalForce( m_bulkModulus[er][esr][m_solidMaterialFullIndex[er]][ei], m_shearModulus[er][esr][m_solidMaterialFullIndex[er]][ei], force ); } protected: @@ -142,11 +140,11 @@ class PoroElasticNodalForceKernel : public NodalForceKernel /// TODO: make it work for the thermal case as well LvArray::tensorOps::symAddIdentity< 3 >( totalStress, -m_biotCoefficient[er][esr][m_porosityMaterialFullIndex[er]][ei] * m_pressure[er][esr][ei] ); - computeNodalForce( totalStress, dNdX, m_detJ[er][esr][ei][q], force ); + surfaceGenerationKernelsHelpers::computeNodalForce( totalStress, dNdX, m_detJ[er][esr][ei][q], force ); } //wu40: the nodal force need to be weighted by Young's modulus and possion's ratio. - scaleNodalForce( m_bulkModulus[er][esr][m_solidMaterialFullIndex[er]][ei], m_shearModulus[er][esr][m_solidMaterialFullIndex[er]][ei], force ); + surfaceGenerationKernelsHelpers::scaleNodalForce( m_bulkModulus[er][esr][m_solidMaterialFullIndex[er]][ei], m_shearModulus[er][esr][m_solidMaterialFullIndex[er]][ei], force ); } private: diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEMKernel.hpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEMKernel.hpp index e4de8b7d4ed..48f446f5fb9 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEMKernel.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/anisotropic/AcousticVTIWaveEquationSEMKernel.hpp @@ -27,7 +27,6 @@ namespace geos { -using namespace fields; /// Namespace to contain the acoustic wave kernels. namespace acousticVTIWaveEquationSEMKernels @@ -442,13 +441,13 @@ class ExplicitAcousticVTISEM : public finiteElement::KernelBase< SUBREGION_TYPE, finiteElementSpace, inputConstitutiveType ), m_nodeCoords( nodeManager.getField< fields::referencePosition32 >() ), - m_p_n( nodeManager.getField< acousticvtifields::Pressure_p_n >() ), - m_q_n( nodeManager.getField< acousticvtifields::Pressure_q_n >() ), - m_stiffnessVector_p( nodeManager.getField< acousticvtifields::StiffnessVector_p >() ), - m_stiffnessVector_q( nodeManager.getField< acousticvtifields::StiffnessVector_q >() ), - m_epsilon( elementSubRegion.template getField< acousticvtifields::Epsilon >() ), - m_delta( elementSubRegion.template getField< acousticvtifields::Delta >() ), - m_vti_f( elementSubRegion.template getField< acousticvtifields::F >() ), + m_p_n( nodeManager.getField< fields::acousticvtifields::Pressure_p_n >() ), + m_q_n( nodeManager.getField< fields::acousticvtifields::Pressure_q_n >() ), + m_stiffnessVector_p( nodeManager.getField< fields::acousticvtifields::StiffnessVector_p >() ), + m_stiffnessVector_q( nodeManager.getField< fields::acousticvtifields::StiffnessVector_q >() ), + m_epsilon( elementSubRegion.template getField< fields::acousticvtifields::Epsilon >() ), + m_delta( elementSubRegion.template getField< fields::acousticvtifields::Delta >() ), + m_vti_f( elementSubRegion.template getField< fields::acousticvtifields::F >() ), m_dt( dt ) { GEOS_UNUSED_VAR( edgeManager ); diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.cpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.cpp index 77e3c55098a..d9eab26fe72 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.cpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEM.cpp @@ -790,13 +790,13 @@ real64 AcousticWaveEquationSEM::explicitStepForward( real64 const & time_n, if( m_enableLifo ) { // Need to tell LvArray data is on GPU to avoir HtoD copy - p_dt2.move( MemorySpace::cuda, false ); + p_dt2.move( LvArray::MemorySpace::cuda, false ); m_lifo->pushAsync( p_dt2 ); } else { GEOS_MARK_SCOPE ( DirectWrite ); - p_dt2.move( MemorySpace::host, false ); + p_dt2.move( LvArray::MemorySpace::host, false ); int const rank = MpiWrapper::commRank( MPI_COMM_GEOS ); std::string fileName = GEOS_FMT( "lifo/rank_{:05}/pressuredt2_{:06}_{:08}.dat", rank, m_shotIndex, cycleNumber ); int lastDirSeparator = fileName.find_last_of( "/\\" ); @@ -873,7 +873,7 @@ real64 AcousticWaveEquationSEM::explicitStepBackward( real64 const & time_n, getDataContext() << ": Could not open file "<< fileName << " for reading", InputError ); - p_dt2.move( MemorySpace::host, true ); + p_dt2.move( LvArray::MemorySpace::host, true ); wf.read( (char *)&p_dt2[0], p_dt2.size()*sizeof( real32 ) ); wf.close( ); remove( fileName.c_str() ); diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEMKernel.hpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEMKernel.hpp index 2b877c499eb..773df753ca0 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEMKernel.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/acoustic/secondOrderEqn/isotropic/AcousticWaveEquationSEMKernel.hpp @@ -30,8 +30,6 @@ namespace geos { -using namespace fields; - /// Namespace to contain the acoustic wave kernels. namespace acousticWaveEquationSEMKernels { @@ -106,9 +104,9 @@ class ExplicitAcousticSEM : public finiteElement::KernelBase< SUBREGION_TYPE, finiteElementSpace, inputConstitutiveType ), m_nodeCoords( nodeManager.getField< fields::referencePosition32 >() ), - m_p_n( nodeManager.getField< acousticfields::Pressure_n >() ), - m_stiffnessVector( nodeManager.getField< acousticfields::StiffnessVector >() ), - m_density( elementSubRegion.template getField< acousticfields::AcousticDensity >() ), + m_p_n( nodeManager.getField< fields::acousticfields::Pressure_n >() ), + m_stiffnessVector( nodeManager.getField< fields::acousticfields::StiffnessVector >() ), + m_density( elementSubRegion.template getField< fields::acousticfields::AcousticDensity >() ), m_dt( dt ) { GEOS_UNUSED_VAR( edgeManager ); diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/anisotropic/ElasticVTIWaveEquationSEMKernel.hpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/anisotropic/ElasticVTIWaveEquationSEMKernel.hpp index 21faecddff0..106afa53d02 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/anisotropic/ElasticVTIWaveEquationSEMKernel.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/anisotropic/ElasticVTIWaveEquationSEMKernel.hpp @@ -27,7 +27,7 @@ namespace geos { -using namespace fields; + /// Namespace to contain the elastic wave kernels. namespace elasticVTIWaveEquationSEMKernels { @@ -100,18 +100,18 @@ class ExplicitElasticVTISEM : public finiteElement::KernelBase< SUBREGION_TYPE, finiteElementSpace, inputConstitutiveType ), m_nodeCoords( nodeManager.getField< fields::referencePosition32 >() ), - m_ux_n( nodeManager.getField< elasticfields::Displacementx_n >() ), - m_uy_n( nodeManager.getField< elasticfields::Displacementy_n >() ), - m_uz_n( nodeManager.getField< elasticfields::Displacementz_n >() ), - m_stiffnessVectorx( nodeManager.getField< elasticfields::StiffnessVectorx >() ), - m_stiffnessVectory( nodeManager.getField< elasticfields::StiffnessVectory >() ), - m_stiffnessVectorz( nodeManager.getField< elasticfields::StiffnessVectorz >() ), - m_density( elementSubRegion.template getField< elasticfields::ElasticDensity >() ), - m_velocityVp( elementSubRegion.template getField< elasticfields::ElasticVelocityVp >() ), - m_velocityVs( elementSubRegion.template getField< elasticfields::ElasticVelocityVs >() ), - m_gamma( elementSubRegion.template getField< elasticvtifields::Gamma >()), - m_epsilon( elementSubRegion.template getField< elasticvtifields::Epsilon >()), - m_delta( elementSubRegion.template getField< elasticvtifields::Delta >()), + m_ux_n( nodeManager.getField< fields::elasticfields::Displacementx_n >() ), + m_uy_n( nodeManager.getField< fields::elasticfields::Displacementy_n >() ), + m_uz_n( nodeManager.getField< fields::elasticfields::Displacementz_n >() ), + m_stiffnessVectorx( nodeManager.getField< fields::elasticfields::StiffnessVectorx >() ), + m_stiffnessVectory( nodeManager.getField< fields::elasticfields::StiffnessVectory >() ), + m_stiffnessVectorz( nodeManager.getField< fields::elasticfields::StiffnessVectorz >() ), + m_density( elementSubRegion.template getField< fields::elasticfields::ElasticDensity >() ), + m_velocityVp( elementSubRegion.template getField< fields::elasticfields::ElasticVelocityVp >() ), + m_velocityVs( elementSubRegion.template getField< fields::elasticfields::ElasticVelocityVs >() ), + m_gamma( elementSubRegion.template getField< fields::elasticvtifields::Gamma >()), + m_epsilon( elementSubRegion.template getField< fields::elasticvtifields::Epsilon >()), + m_delta( elementSubRegion.template getField< fields::elasticvtifields::Delta >()), m_dt( dt ) { GEOS_UNUSED_VAR( edgeManager ); diff --git a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEMKernel.hpp b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEMKernel.hpp index a919d84f8c6..bdfe2482575 100644 --- a/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEMKernel.hpp +++ b/src/coreComponents/physicsSolvers/wavePropagation/sem/elastic/secondOrderEqn/isotropic/ElasticWaveEquationSEMKernel.hpp @@ -26,7 +26,7 @@ namespace geos { -using namespace fields; + /// Namespace to contain the elastic wave kernels. namespace elasticWaveEquationSEMKernels { @@ -51,7 +51,7 @@ namespace elasticWaveEquationSEMKernels template< typename SUBREGION_TYPE, typename CONSTITUTIVE_TYPE, typename FE_TYPE, - typename SX = elasticfields::StiffnessVectorx, typename SY = elasticfields::StiffnessVectory, typename SZ = elasticfields::StiffnessVectorz > + typename SX = fields::elasticfields::StiffnessVectorx, typename SY = fields::elasticfields::StiffnessVectory, typename SZ = fields::elasticfields::StiffnessVectorz > class ExplicitElasticSEMBase : public finiteElement::KernelBase< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE, @@ -100,15 +100,15 @@ class ExplicitElasticSEMBase : public finiteElement::KernelBase< SUBREGION_TYPE, finiteElementSpace, inputConstitutiveType ), m_nodeCoords( nodeManager.getField< fields::referencePosition32 >() ), - m_ux_n( nodeManager.getField< elasticfields::Displacementx_n >() ), - m_uy_n( nodeManager.getField< elasticfields::Displacementy_n >() ), - m_uz_n( nodeManager.getField< elasticfields::Displacementz_n >() ), + m_ux_n( nodeManager.getField< fields::elasticfields::Displacementx_n >() ), + m_uy_n( nodeManager.getField< fields::elasticfields::Displacementy_n >() ), + m_uz_n( nodeManager.getField< fields::elasticfields::Displacementz_n >() ), m_stiffnessVectorx( nodeManager.getField< SX >() ), m_stiffnessVectory( nodeManager.getField< SY >() ), m_stiffnessVectorz( nodeManager.getField< SZ >() ), - m_density( elementSubRegion.template getField< elasticfields::ElasticDensity >() ), - m_velocityVp( elementSubRegion.template getField< elasticfields::ElasticVelocityVp >() ), - m_velocityVs( elementSubRegion.template getField< elasticfields::ElasticVelocityVs >() ), + m_density( elementSubRegion.template getField< fields::elasticfields::ElasticDensity >() ), + m_velocityVp( elementSubRegion.template getField< fields::elasticfields::ElasticVelocityVp >() ), + m_velocityVs( elementSubRegion.template getField< fields::elasticfields::ElasticVelocityVs >() ), m_dt( dt ) { GEOS_UNUSED_VAR( edgeManager ); @@ -273,9 +273,9 @@ template< typename SUBREGION_TYPE, class ExplicitElasticAttenuativeSEM : public ExplicitElasticSEMBase< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE, - elasticfields::StiffnessVectorAx, - elasticfields::StiffnessVectorAy, - elasticfields::StiffnessVectorAz > + fields::elasticfields::StiffnessVectorAx, + fields::elasticfields::StiffnessVectorAy, + fields::elasticfields::StiffnessVectorAz > { public: @@ -283,9 +283,9 @@ class ExplicitElasticAttenuativeSEM : public ExplicitElasticSEMBase< SUBREGION_T using Base = ExplicitElasticSEMBase< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE, - elasticfields::StiffnessVectorAx, - elasticfields::StiffnessVectorAy, - elasticfields::StiffnessVectorAz >; + fields::elasticfields::StiffnessVectorAx, + fields::elasticfields::StiffnessVectorAy, + fields::elasticfields::StiffnessVectorAz >; //***************************************************************************** /** @@ -313,8 +313,8 @@ class ExplicitElasticAttenuativeSEM : public ExplicitElasticSEMBase< SUBREGION_T finiteElementSpace, inputConstitutiveType, dt ), - m_qualityFactorP( elementSubRegion.template getField< elasticfields::ElasticQualityFactorP >() ), - m_qualityFactorS( elementSubRegion.template getField< elasticfields::ElasticQualityFactorS >() ) + m_qualityFactorP( elementSubRegion.template getField< fields::elasticfields::ElasticQualityFactorP >() ), + m_qualityFactorS( elementSubRegion.template getField< fields::elasticfields::ElasticQualityFactorS >() ) {} /** diff --git a/src/coreComponents/unitTests/constitutiveTests/MultiFluidTest.hpp b/src/coreComponents/unitTests/constitutiveTests/MultiFluidTest.hpp index 5817d6ea7be..943e5d5b985 100644 --- a/src/coreComponents/unitTests/constitutiveTests/MultiFluidTest.hpp +++ b/src/coreComponents/unitTests/constitutiveTests/MultiFluidTest.hpp @@ -25,9 +25,6 @@ #include "constitutive/fluid/multifluid/MultiFluidFields.hpp" #include "constitutive/fluid/multifluid/MultiFluidSelector.hpp" -using namespace geos::dataRepository; -using namespace geos::constitutive; -using namespace geos::constitutive::multifluid; namespace geos { @@ -105,7 +102,7 @@ struct MultiFluidTestData }; template< typename FLUID_TYPE, integer NUM_PHASE, integer NUM_COMP > -class MultiFluidTest : public ConstitutiveTestBase< MultiFluidBase > +class MultiFluidTest : public ConstitutiveTestBase< constitutive::MultiFluidBase > { public: static constexpr integer numPhase = NUM_PHASE; @@ -116,16 +113,16 @@ class MultiFluidTest : public ConstitutiveTestBase< MultiFluidBase > MultiFluidTest() = default; ~MultiFluidTest() override = default; - MultiFluidBase & getFluid() const { return *m_model; } + constitutive::MultiFluidBase & getFluid() const { return *m_model; } - Group & getParent() { return m_parent; } + dataRepository::Group & getParent() { return m_parent; } void testValuesAgainstPreviousImplementation( typename FLUID_TYPE::KernelWrapper const & wrapper, MultiFluidTestData< NUM_PHASE, NUM_COMP > const & testData, real64 const relTol ) const; - void testNumericalDerivatives( MultiFluidBase & fluid, - Group * parent, + void testNumericalDerivatives( constitutive::MultiFluidBase & fluid, + dataRepository::Group * parent, MultiFluidTestData< NUM_PHASE, NUM_COMP > const & testData, real64 const perturbParameter, real64 const relTol, @@ -133,7 +130,7 @@ class MultiFluidTest : public ConstitutiveTestBase< MultiFluidBase > protected: - virtual void resetFluid( MultiFluidBase & fluid ) const + virtual void resetFluid( constitutive::MultiFluidBase & fluid ) const { GEOS_UNUSED_VAR( fluid ); } @@ -155,14 +152,14 @@ class MultiFluidTest : public ConstitutiveTestBase< MultiFluidBase > template< typename FLUID_TYPE, integer NUM_PHASE, integer NUM_COMP > void MultiFluidTest< FLUID_TYPE, NUM_PHASE, NUM_COMP >:: -testNumericalDerivatives( MultiFluidBase & fluid, - Group * parent, +testNumericalDerivatives( constitutive::MultiFluidBase & fluid, + dataRepository::Group * parent, MultiFluidTestData< NUM_PHASE, NUM_COMP > const & testData, real64 const perturbParameter, real64 const relTol, real64 const absTol ) { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; integer const NC = fluid.numFluidComponents(); integer const NP = fluid.numFluidPhases(); @@ -178,13 +175,13 @@ testNumericalDerivatives( MultiFluidBase & fluid, } arraySlice1d< real64 const, compflow::USD_COMP - 1 > const composition = compositionValues[0]; - auto const & components = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::componentNamesString() ); - auto const & phases = fluid.getReference< string_array >( MultiFluidBase::viewKeyStruct::phaseNamesString() ); + auto const & components = fluid.getReference< string_array >( constitutive::MultiFluidBase::viewKeyStruct::componentNamesString() ); + auto const & phases = fluid.getReference< string_array >( constitutive::MultiFluidBase::viewKeyStruct::phaseNamesString() ); // create a clone of the fluid to run updates on string const fluidCopyName = fluid.getName() + "Copy"; - std::unique_ptr< ConstitutiveBase > fluidCopyPtr = fluid.deliverClone( fluidCopyName, parent ); - MultiFluidBase & fluidCopy = dynamicCast< MultiFluidBase & >( *fluidCopyPtr ); + std::unique_ptr< constitutive::ConstitutiveBase > fluidCopyPtr = fluid.deliverClone( fluidCopyName, parent ); + constitutive::MultiFluidBase & fluidCopy = dynamicCast< constitutive::MultiFluidBase & >( *fluidCopyPtr ); fluid.allocateConstitutiveData( fluid.getParent(), 1 ); fluidCopy.allocateConstitutiveData( fluid.getParent(), 1 ); @@ -193,37 +190,37 @@ testNumericalDerivatives( MultiFluidBase & fluid, #define GET_FLUID_DATA( FLUID, TRAIT ) \ FLUID.getReference< TRAIT::type >( TRAIT::key() )[0][0] - MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 > phaseFrac { + constitutive::MultiFluidVarSlice< real64, 1, constitutive::multifluid::USD_PHASE - 2, constitutive::multifluid::USD_PHASE_DC - 2 > phaseFrac { GET_FLUID_DATA( fluid, fields::multifluid::phaseFraction ), GET_FLUID_DATA( fluid, fields::multifluid::dPhaseFraction ) }; - MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 > phaseDens { + constitutive::MultiFluidVarSlice< real64, 1, constitutive::multifluid::USD_PHASE - 2, constitutive::multifluid::USD_PHASE_DC - 2 > phaseDens { GET_FLUID_DATA( fluid, fields::multifluid::phaseDensity ), GET_FLUID_DATA( fluid, fields::multifluid::dPhaseDensity ) }; - MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 > phaseVisc { + constitutive::MultiFluidVarSlice< real64, 1, constitutive::multifluid::USD_PHASE - 2, constitutive::multifluid::USD_PHASE_DC - 2 > phaseVisc { GET_FLUID_DATA( fluid, fields::multifluid::phaseViscosity ), GET_FLUID_DATA( fluid, fields::multifluid::dPhaseViscosity ) }; - MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 > phaseEnthalpy { + constitutive::MultiFluidVarSlice< real64, 1, constitutive::multifluid::USD_PHASE - 2, constitutive::multifluid::USD_PHASE_DC - 2 > phaseEnthalpy { GET_FLUID_DATA( fluid, fields::multifluid::phaseEnthalpy ), GET_FLUID_DATA( fluid, fields::multifluid::dPhaseEnthalpy ) }; - MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 > phaseInternalEnergy { + constitutive::MultiFluidVarSlice< real64, 1, constitutive::multifluid::USD_PHASE - 2, constitutive::multifluid::USD_PHASE_DC - 2 > phaseInternalEnergy { GET_FLUID_DATA( fluid, fields::multifluid::phaseInternalEnergy ), GET_FLUID_DATA( fluid, fields::multifluid::dPhaseInternalEnergy ) }; - MultiFluidVarSlice< real64, 2, USD_PHASE_COMP - 2, USD_PHASE_COMP_DC - 2 > phaseCompFrac { + constitutive::MultiFluidVarSlice< real64, 2, constitutive::multifluid::USD_PHASE_COMP - 2, constitutive::multifluid::USD_PHASE_COMP_DC - 2 > phaseCompFrac { GET_FLUID_DATA( fluid, fields::multifluid::phaseCompFraction ), GET_FLUID_DATA( fluid, fields::multifluid::dPhaseCompFraction ) }; - MultiFluidVarSlice< real64, 0, USD_FLUID - 2, USD_FLUID_DC - 2 > totalDens { + constitutive::MultiFluidVarSlice< real64, 0, constitutive::multifluid::USD_FLUID - 2, constitutive::multifluid::USD_FLUID_DC - 2 > totalDens { GET_FLUID_DATA( fluid, fields::multifluid::totalDensity ), GET_FLUID_DATA( fluid, fields::multifluid::dTotalDensity ) }; @@ -409,22 +406,22 @@ void MultiFluidTest< FLUID_TYPE, NUM_PHASE, NUM_COMP >::testValuesAgainstPreviou } arraySlice1d< real64 const, compflow::USD_COMP - 1 > const composition = compositionValues[0]; - StackArray< real64, 3, numPhase, LAYOUT_PHASE > phaseFraction( 1, 1, numPhase ); - StackArray< real64, 4, numDof *numPhase, LAYOUT_PHASE_DC > dPhaseFraction( 1, 1, numPhase, numDof ); - StackArray< real64, 3, numPhase, LAYOUT_PHASE > phaseDensity( 1, 1, numPhase ); - StackArray< real64, 4, numDof *numPhase, LAYOUT_PHASE_DC > dPhaseDensity( 1, 1, numPhase, numDof ); - StackArray< real64, 3, numPhase, LAYOUT_PHASE > phaseMassDensity( 1, 1, numPhase ); - StackArray< real64, 4, numDof *numPhase, LAYOUT_PHASE_DC > dPhaseMassDensity( 1, 1, numPhase, numDof ); - StackArray< real64, 3, numPhase, LAYOUT_PHASE > phaseViscosity( 1, 1, numPhase ); - StackArray< real64, 4, numDof *numPhase, LAYOUT_PHASE_DC > dPhaseViscosity( 1, 1, numPhase, numDof ); - StackArray< real64, 3, numPhase, LAYOUT_PHASE > phaseEnthalpy( 1, 1, numPhase ); - StackArray< real64, 4, numDof *numPhase, LAYOUT_PHASE_DC > dPhaseEnthalpy( 1, 1, numPhase, numDof ); - StackArray< real64, 3, numPhase, LAYOUT_PHASE > phaseInternalEnergy( 1, 1, numPhase ); - StackArray< real64, 4, numDof *numPhase, LAYOUT_PHASE_DC > dPhaseInternalEnergy( 1, 1, numPhase, numDof ); - StackArray< real64, 4, numComp *numPhase, LAYOUT_PHASE_COMP > phaseCompFraction( 1, 1, numPhase, numComp ); - StackArray< real64, 5, numDof *numComp *numPhase, LAYOUT_PHASE_COMP_DC > dPhaseCompFraction( 1, 1, numPhase, numComp, numDof ); - StackArray< real64, 2, 1, LAYOUT_FLUID > totalDensity( 1, 1 ); - StackArray< real64, 3, numDof, LAYOUT_FLUID_DC > dTotalDensity( 1, 1, numDof ); + StackArray< real64, 3, numPhase, constitutive::multifluid::LAYOUT_PHASE > phaseFraction( 1, 1, numPhase ); + StackArray< real64, 4, numDof *numPhase, constitutive::multifluid::LAYOUT_PHASE_DC > dPhaseFraction( 1, 1, numPhase, numDof ); + StackArray< real64, 3, numPhase, constitutive::multifluid::LAYOUT_PHASE > phaseDensity( 1, 1, numPhase ); + StackArray< real64, 4, numDof *numPhase, constitutive::multifluid::LAYOUT_PHASE_DC > dPhaseDensity( 1, 1, numPhase, numDof ); + StackArray< real64, 3, numPhase, constitutive::multifluid::LAYOUT_PHASE > phaseMassDensity( 1, 1, numPhase ); + StackArray< real64, 4, numDof *numPhase, constitutive::multifluid::LAYOUT_PHASE_DC > dPhaseMassDensity( 1, 1, numPhase, numDof ); + StackArray< real64, 3, numPhase, constitutive::multifluid::LAYOUT_PHASE > phaseViscosity( 1, 1, numPhase ); + StackArray< real64, 4, numDof *numPhase, constitutive::multifluid::LAYOUT_PHASE_DC > dPhaseViscosity( 1, 1, numPhase, numDof ); + StackArray< real64, 3, numPhase, constitutive::multifluid::LAYOUT_PHASE > phaseEnthalpy( 1, 1, numPhase ); + StackArray< real64, 4, numDof *numPhase, constitutive::multifluid::LAYOUT_PHASE_DC > dPhaseEnthalpy( 1, 1, numPhase, numDof ); + StackArray< real64, 3, numPhase, constitutive::multifluid::LAYOUT_PHASE > phaseInternalEnergy( 1, 1, numPhase ); + StackArray< real64, 4, numDof *numPhase, constitutive::multifluid::LAYOUT_PHASE_DC > dPhaseInternalEnergy( 1, 1, numPhase, numDof ); + StackArray< real64, 4, numComp *numPhase, constitutive::multifluid::LAYOUT_PHASE_COMP > phaseCompFraction( 1, 1, numPhase, numComp ); + StackArray< real64, 5, numDof *numComp *numPhase, constitutive::multifluid::LAYOUT_PHASE_COMP_DC > dPhaseCompFraction( 1, 1, numPhase, numComp, numDof ); + StackArray< real64, 2, 1, constitutive::multifluid::LAYOUT_FLUID > totalDensity( 1, 1 ); + StackArray< real64, 3, numDof, constitutive::multifluid::LAYOUT_FLUID_DC > dTotalDensity( 1, 1, numDof ); wrapper.compute( testData.pressure, testData.temperature, diff --git a/src/coreComponents/unitTests/constitutiveTests/testMultiFluidCO2Brine.cpp b/src/coreComponents/unitTests/constitutiveTests/testMultiFluidCO2Brine.cpp index 5df07a14155..bc017852419 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testMultiFluidCO2Brine.cpp +++ b/src/coreComponents/unitTests/constitutiveTests/testMultiFluidCO2Brine.cpp @@ -24,6 +24,7 @@ using namespace geos; using namespace geos::testing; +using namespace geos::dataRepository; using namespace geos::constitutive; enum class BrineModelType : int {Phillips, Ezrokhi}; diff --git a/src/coreComponents/unitTests/constitutiveTests/testMultiFluidCompositionalMultiphasePVTPackage.cpp b/src/coreComponents/unitTests/constitutiveTests/testMultiFluidCompositionalMultiphasePVTPackage.cpp index fe6c9453352..76c0ebd5b1e 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testMultiFluidCompositionalMultiphasePVTPackage.cpp +++ b/src/coreComponents/unitTests/constitutiveTests/testMultiFluidCompositionalMultiphasePVTPackage.cpp @@ -23,6 +23,7 @@ using namespace geos; using namespace geos::testing; +using namespace geos::dataRepository; using namespace geos::constitutive; namespace geos diff --git a/src/coreComponents/unitTests/constitutiveTests/testMultiFluidDeadOil.cpp b/src/coreComponents/unitTests/constitutiveTests/testMultiFluidDeadOil.cpp index 7921e3ec313..3b1059e79cd 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testMultiFluidDeadOil.cpp +++ b/src/coreComponents/unitTests/constitutiveTests/testMultiFluidDeadOil.cpp @@ -23,6 +23,7 @@ using namespace geos; using namespace geos::testing; +using namespace geos::dataRepository; using namespace geos::constitutive; static constexpr char const * pvdgTableContent = "# Pg(Pa) Bg(m3/sm3) Visc(Pa.s)\n" diff --git a/src/coreComponents/unitTests/constitutiveTests/testMultiFluidLiveOil.cpp b/src/coreComponents/unitTests/constitutiveTests/testMultiFluidLiveOil.cpp index f62078f4d39..c8896524a14 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testMultiFluidLiveOil.cpp +++ b/src/coreComponents/unitTests/constitutiveTests/testMultiFluidLiveOil.cpp @@ -23,6 +23,7 @@ using namespace geos; using namespace geos::testing; +using namespace geos::dataRepository; using namespace geos::constitutive; static constexpr char const * pvdgTableContent = "# Pg(Pa) Bg(m3/sm3) Visc(Pa.s)\n" diff --git a/src/coreComponents/unitTests/fluidFlowTests/testCompFlowUtils.hpp b/src/coreComponents/unitTests/fluidFlowTests/testCompFlowUtils.hpp index 595420857a2..4759403391b 100644 --- a/src/coreComponents/unitTests/fluidFlowTests/testCompFlowUtils.hpp +++ b/src/coreComponents/unitTests/fluidFlowTests/testCompFlowUtils.hpp @@ -33,9 +33,6 @@ namespace geos namespace testing { -using namespace geos::constitutive; -using namespace geos::constitutive::multifluid; - inline void fillNumericalJacobian( arrayView1d< real64 const > const & residual, arrayView1d< real64 const > const & residualOrig, @@ -114,7 +111,7 @@ void testCompositionNumericalDerivatives( CompositionalMultiphaseFVM & solver, SCOPED_TRACE( subRegion.getParent().getParent().getName() + "/" + subRegion.getName() ); string const & fluidName = subRegion.getReference< string >( CompositionalMultiphaseBase::viewKeyStruct::fluidNamesString() ); - MultiFluidBase const & fluid = subRegion.getConstitutiveModel< MultiFluidBase >( fluidName ); + constitutive::MultiFluidBase const & fluid = subRegion.getConstitutiveModel< constitutive::MultiFluidBase >( fluidName ); arrayView1d< string const > const & components = fluid.componentNames(); arrayView2d< real64, compflow::USD_COMP > const compDens = @@ -181,7 +178,7 @@ void testPhaseVolumeFractionNumericalDerivatives( CompositionalMultiphaseFVM & s real64 const perturbParameter, real64 const relTol ) { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; integer const numComp = solver.numFluidComponents(); integer const numPhase = solver.numFluidPhases(); @@ -199,7 +196,7 @@ void testPhaseVolumeFractionNumericalDerivatives( CompositionalMultiphaseFVM & s SCOPED_TRACE( subRegion.getParent().getParent().getName() + "/" + subRegion.getName() ); string const & fluidName = subRegion.getReference< string >( CompositionalMultiphaseFVM::viewKeyStruct::fluidNamesString() ); - MultiFluidBase const & fluid = subRegion.getConstitutiveModel< MultiFluidBase >( fluidName ); + constitutive::MultiFluidBase const & fluid = subRegion.getConstitutiveModel< constitutive::MultiFluidBase >( fluidName ); arrayView1d< string const > const & components = fluid.componentNames(); arrayView1d< string const > const & phases = fluid.phaseNames(); @@ -346,7 +343,7 @@ void testPhaseMobilityNumericalDerivatives( CompositionalMultiphaseFVM & solver, real64 const perturbParameter, real64 const relTol ) { - using Deriv = multifluid::DerivativeOffset; + using Deriv = constitutive::multifluid::DerivativeOffset; integer const numComp = solver.numFluidComponents(); integer const numPhase = solver.numFluidPhases(); @@ -364,7 +361,7 @@ void testPhaseMobilityNumericalDerivatives( CompositionalMultiphaseFVM & solver, SCOPED_TRACE( subRegion.getParent().getParent().getName() + "/" + subRegion.getName() ); string const & fluidName = subRegion.getReference< string >( CompositionalMultiphaseFVM::viewKeyStruct::fluidNamesString() ); - MultiFluidBase const & fluid = subRegion.getConstitutiveModel< MultiFluidBase >( fluidName ); + constitutive::MultiFluidBase const & fluid = subRegion.getConstitutiveModel< constitutive::MultiFluidBase >( fluidName ); arrayView1d< string const > const & components = fluid.componentNames(); arrayView1d< string const > const & phases = fluid.phaseNames(); diff --git a/src/coreComponents/unitTests/fluidFlowTests/testSingleFlowUtils.hpp b/src/coreComponents/unitTests/fluidFlowTests/testSingleFlowUtils.hpp index 115e6ef2d2a..fc0c28d223e 100644 --- a/src/coreComponents/unitTests/fluidFlowTests/testSingleFlowUtils.hpp +++ b/src/coreComponents/unitTests/fluidFlowTests/testSingleFlowUtils.hpp @@ -33,8 +33,6 @@ namespace geos namespace testing { -using namespace geos::constitutive; - void fillNumericalJacobian( arrayView1d< real64 const > const & residual, arrayView1d< real64 const > const & residualOrig, globalIndex const dofIndex, From ae4dde72e9900a377f41a28284fd1e9d1327f331 Mon Sep 17 00:00:00 2001 From: Randolph Settgast Date: Tue, 13 Aug 2024 06:57:03 -1000 Subject: [PATCH 13/42] docs: change GEOSX to GEOS in documentation (#3275) * replace GEOSX with GEOS in conf.py file * update http address for opening new issues --------- Co-authored-by: Matteo Cusini --- .github/ISSUE_TEMPLATE/bug-report.md | 2 +- src/conf.py | 16 ++++++++-------- src/coreComponents/LvArray | 2 +- .../viscoplasticity/DruckerPrager/Example.rst | 2 +- .../ExtendedDruckerPrager/Example.rst | 2 +- .../viscoplasticity/ModifiedCamClay/Example.rst | 2 +- .../ViscoDruckerPrager/Example.rst | 2 +- .../ViscoExtendedDruckerPrager/Example.rst | 2 +- .../ViscoModifiedCamClay/Example.rst | 2 +- .../casedContactElasticWellbore/Example.rst | 2 +- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index ab76d9288e3..b34012e1d8d 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -27,7 +27,7 @@ If applicable, add screenshots to help explain your problem. **Platform (please complete the following information):** - Machine [e.g. LLNL/Quartz] - Compiler: [e.g. gcc 8.1.0] -- GEOSX Version [e.g. 0.2] +- GEOS Version [e.g. 0.2] **Additional context** Add any other context about the problem here. diff --git a/src/conf.py b/src/conf.py index e54573753a0..bcc5a918a58 100644 --- a/src/conf.py +++ b/src/conf.py @@ -79,9 +79,9 @@ # -- Project information ----------------------------------------------------- -project = u'GEOSX' -copyright = u'2018-2021 Lawrence Livermore National Security, The Board of Trustees of the Leland Stanford Junior University, TotalEnergies, and GEOSX Contributors.' -author = u'GEOSX Contributors' +project = u'GEOS' +copyright = u'2016-2024 Lawrence Livermore National Security LLC, 2018-2024 Total, S.A, The Board of Trustees of the Leland Stanford Junior University, 2023-2024 Chevron, 2019- GEOS/GEOSX Contributors' +author = u'GEOS/GEOSX Contributors' # The short X.Y version version = u'' @@ -220,8 +220,8 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'GEOSX.tex', u'GEOSX Documentation', - u'Randolph Settgast', 'manual'), + (master_doc, 'GEOS.tex', u'GEOS Documentation', + u'GEOS/GEOSX Developers', 'manual'), ] @@ -230,7 +230,7 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'geosx', u'GEOSX Documentation', + (master_doc, 'geos', u'GEOS Documentation', [author], 1) ] @@ -241,8 +241,8 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'GEOSX', u'GEOSX Documentation', - author, 'GEOSX', 'One line description of project.', + (master_doc, 'GEOS', u'GEOS Documentation', + author, 'GEOS', 'GEOS simulation framework.', 'Miscellaneous'), ] diff --git a/src/coreComponents/LvArray b/src/coreComponents/LvArray index 02ce362c009..69948929ca4 160000 --- a/src/coreComponents/LvArray +++ b/src/coreComponents/LvArray @@ -1 +1 @@ -Subproject commit 02ce362c009f11ddb2ade0286df23408d7334c4f +Subproject commit 69948929ca40acf490143fc020f72cd12d331f37 diff --git a/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/Example.rst b/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/Example.rst index 7eec2c3f25c..e02f57bc2b7 100644 --- a/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/Example.rst +++ b/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/Example.rst @@ -121,4 +121,4 @@ To go further **Feedback on this example** -For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. +For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. diff --git a/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/Example.rst b/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/Example.rst index ceaf5963b8d..4c51b85d703 100644 --- a/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/Example.rst +++ b/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/Example.rst @@ -126,4 +126,4 @@ To go further **Feedback on this example** -For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. +For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. diff --git a/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/Example.rst b/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/Example.rst index b9c3d9a3a09..48760a4f70d 100644 --- a/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/Example.rst +++ b/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/Example.rst @@ -97,4 +97,4 @@ To go further **Feedback on this example** -For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. +For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. diff --git a/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/Example.rst b/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/Example.rst index ed576585670..323cef2e2fd 100644 --- a/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/Example.rst +++ b/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/Example.rst @@ -112,4 +112,4 @@ To go further **Feedback on this example** -For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. +For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. diff --git a/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/Example.rst b/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/Example.rst index 35c9cef1313..88fba339887 100644 --- a/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/Example.rst +++ b/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/Example.rst @@ -112,4 +112,4 @@ To go further **Feedback on this example** -For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. +For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. diff --git a/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/Example.rst b/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/Example.rst index 8972eed2f22..964ffbcbb2c 100644 --- a/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/Example.rst +++ b/src/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/Example.rst @@ -103,4 +103,4 @@ To go further **Feedback on this example** -For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. +For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. diff --git a/src/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/Example.rst b/src/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/Example.rst index 0fa899e49b3..7db478cad33 100644 --- a/src/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/Example.rst +++ b/src/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/Example.rst @@ -149,4 +149,4 @@ To go further **Feedback on this example** This concludes the cased wellbore example. -For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. +For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. From f3eb4dccc4f27988adaffb6025460e9fc4ae883e Mon Sep 17 00:00:00 2001 From: Ryan Aronson Date: Tue, 13 Aug 2024 09:57:44 -0700 Subject: [PATCH 14/42] chore: Changing GEOSX to GEOS in external mesh import (#3278) * Changing GEOSX to GEOS in external mesh import * Update .integrated_tests.yaml * Update BASELINE_NOTES.md --- .integrated_tests.yaml | 2 +- BASELINE_NOTES.md | 6 ++++-- .../Class09Pb3/class09_pb3_benchmark.xml | 2 +- .../Class09Pb3/class09_pb3_benchmark_mc.xml | 2 +- .../Class09Pb3/class09_pb3_benchmark_mct.xml | 2 +- .../Egg/deadOilEggVTK_benchmark.xml | 2 +- .../benchmarks/Egg/deadOilEgg_benchmark.xml | 2 +- .../staircase_co2_wells_hybrid_3d.xml | 2 +- .../PoroElastic_hybridHexPrism_co2_base.xml | 2 +- .../smallEggModel/smallEggModel.xml | 2 +- .../PoroElastic_efem-edfm_eggModel_large.xml | 2 +- .../PoroElastic_efem-edfm_eggModel_small.xml | 2 +- .../verticalFault_ExternalMesh.vtm | 2 +- .../singlePhaseFlow/incompressible_pebi3d.xml | 2 +- ...moPoroElastic_efem-edfm_eggModel_small.xml | 2 +- .../generators/ExternalMeshGeneratorBase.cpp | 20 +++++++++---------- .../generators/ExternalMeshGeneratorBase.hpp | 16 +++++++-------- .../mesh/generators/MeshGeneratorBase.hpp | 8 ++++---- src/coreComponents/schema/docs/VTKMesh.rst | 4 ++-- 19 files changed, 42 insertions(+), 40 deletions(-) diff --git a/.integrated_tests.yaml b/.integrated_tests.yaml index 14a5dd73076..9b8f7b83af5 100644 --- a/.integrated_tests.yaml +++ b/.integrated_tests.yaml @@ -1,6 +1,6 @@ baselines: bucket: geosx - baseline: integratedTests/baseline_integratedTests-pr3197-6679-a003f43 + baseline: integratedTests/baseline_integratedTests-pr3278-6753-f7f9add allow_fail: all: '' diff --git a/BASELINE_NOTES.md b/BASELINE_NOTES.md index be5e9d7d934..4eea0a9bfc9 100644 --- a/BASELINE_NOTES.md +++ b/BASELINE_NOTES.md @@ -6,9 +6,11 @@ This file is designed to track changes to the integrated test baselines. Any developer who updates the baseline ID in the .integrated_tests.yaml file is expected to create an entry in this file with the pull request number, date, and their justification for rebaselining. These notes should be in reverse-chronological order, and use the following time format: (YYYY-MM-DD). -PR 3197 (2024-08-07) + + +PR 3278 (2024-08-12) ==================== -Separation of contact and friction laws. +Renamed GEOSX to GEOS in enternal mesh import, so rebaseline to change these names is the baselines. PR #3202 (2024-08-03) ====================== diff --git a/inputFiles/compositionalMultiphaseWell/benchmarks/Class09Pb3/class09_pb3_benchmark.xml b/inputFiles/compositionalMultiphaseWell/benchmarks/Class09Pb3/class09_pb3_benchmark.xml index d0c07591e87..dbc28b749b6 100644 --- a/inputFiles/compositionalMultiphaseWell/benchmarks/Class09Pb3/class09_pb3_benchmark.xml +++ b/inputFiles/compositionalMultiphaseWell/benchmarks/Class09Pb3/class09_pb3_benchmark.xml @@ -16,7 +16,7 @@ logLevel="5" file="../../../../../GEOSDATA/DataSets/Class09_p3/Johansen_faces.vtu" fieldsToImport="{ perm, poro }" - fieldNamesInGEOSX="{ rockPerm_permeability, rockPorosity_referencePorosity }" > + fieldNamesInGEOS="{ rockPerm_permeability, rockPorosity_referencePorosity }" > + fieldNamesInGEOS="{ rockPerm_permeability, rockPorosity_referencePorosity }" > + fieldNamesInGEOS="{ rockPerm_permeability, rockPorosity_referencePorosity }" > + fieldNamesInGEOS="{ rockPerm_permeability }"> + fieldNamesInGEOS="{ rockPerm_permeability }"> diff --git a/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_base.xml b/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_base.xml index 865a4850f1a..26c4b973932 100644 --- a/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_base.xml +++ b/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_base.xml @@ -10,7 +10,7 @@ partitionMethod="ptscotch" scale="{ 50, 50, 50 }" fieldsToImport="{ PORO, NTG, DENSITY, BULKMOD }" - fieldNamesInGEOSX="{ rockPorosity_referencePorosity, netToGross, skeleton_density, skeleton_bulkModulus }" + fieldNamesInGEOS="{ rockPorosity_referencePorosity, netToGross, skeleton_density, skeleton_bulkModulus }" file="../singlePhaseFlow/pebi3d_with_properties.vtu"/> diff --git a/inputFiles/poromechanics/nonlinearAcceleration/smallEggModel/smallEggModel.xml b/inputFiles/poromechanics/nonlinearAcceleration/smallEggModel/smallEggModel.xml index caf219bb716..0ab2e1e9527 100755 --- a/inputFiles/poromechanics/nonlinearAcceleration/smallEggModel/smallEggModel.xml +++ b/inputFiles/poromechanics/nonlinearAcceleration/smallEggModel/smallEggModel.xml @@ -69,7 +69,7 @@ file="../../../GEOSDATA/DataSets/Egg/egg_withBurdens_small.vts" regionAttribute="elementRegionMarker" fieldsToImport="{ PERM }" - fieldNamesInGEOSX="{ rockPermeability_permeability }"/> + fieldNamesInGEOS="{ rockPermeability_permeability }"/> diff --git a/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_eggModel_large.xml b/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_eggModel_large.xml index 20566c84bac..506201fab18 100644 --- a/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_eggModel_large.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_eggModel_large.xml @@ -63,7 +63,7 @@ file="../../../GEOSDATA/DataSets/Egg/egg_withBurdens_large.vts" regionAttribute="regionAttribute" fieldsToImport="{ PERM }" - fieldNamesInGEOSX="{ rockPermeability_permeability }"/> + fieldNamesInGEOS="{ rockPermeability_permeability }"/> diff --git a/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_eggModel_small.xml b/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_eggModel_small.xml index 074d11adb4e..3a8e2c869ad 100644 --- a/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_eggModel_small.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_efem-edfm_eggModel_small.xml @@ -63,7 +63,7 @@ file="../../../GEOSDATA/DataSets/Egg/egg_withBurdens_small.vts" regionAttribute="elementRegionMarker" fieldsToImport="{ PERM }" - fieldNamesInGEOSX="{ rockPermeability_permeability }"/> + fieldNamesInGEOS="{ rockPermeability_permeability }"/> diff --git a/inputFiles/poromechanicsFractures/verticalFault_ExternalMesh.vtm b/inputFiles/poromechanicsFractures/verticalFault_ExternalMesh.vtm index 14785b5f2ab..abb0265a6ca 100644 --- a/inputFiles/poromechanicsFractures/verticalFault_ExternalMesh.vtm +++ b/inputFiles/poromechanicsFractures/verticalFault_ExternalMesh.vtm @@ -5,7 +5,7 @@ name="main" file="Domain_Mesh_FaultModel.vtu" fieldsToImport="{ YoungModulus, PoissonRatio }" - fieldNamesInGEOSX="{ rock_youngModulus, rock_poissonRatio }" + fieldNamesInGEOS="{ rock_youngModulus, rock_poissonRatio }" /> diff --git a/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_efem-edfm_eggModel_small.xml b/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_efem-edfm_eggModel_small.xml index d2b84ef7de2..7b3d9723f66 100644 --- a/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_efem-edfm_eggModel_small.xml +++ b/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_efem-edfm_eggModel_small.xml @@ -66,7 +66,7 @@ file="../../../GEOSDATA/DataSets/Egg/egg_withBurdens_small.vts" regionAttribute="elementRegionMarker" fieldsToImport="{ PERM }" - fieldNamesInGEOSX="{ rockPermeability_permeability }"/> + fieldNamesInGEOS="{ rockPermeability_permeability }"/> diff --git a/src/coreComponents/mesh/generators/ExternalMeshGeneratorBase.cpp b/src/coreComponents/mesh/generators/ExternalMeshGeneratorBase.cpp index b28cbdd405b..2392a89874b 100644 --- a/src/coreComponents/mesh/generators/ExternalMeshGeneratorBase.cpp +++ b/src/coreComponents/mesh/generators/ExternalMeshGeneratorBase.cpp @@ -46,20 +46,20 @@ ExternalMeshGeneratorBase::ExternalMeshGeneratorBase( string const & name, setInputFlag( InputFlags::OPTIONAL ). setDescription( "Volumic fields to be imported from the external mesh file" ); - registerWrapper( viewKeyStruct::volumicFieldsInGEOSXString(), &m_volumicFieldsInGEOSX ). + registerWrapper( viewKeyStruct::volumicFieldsInGEOSString(), &m_volumicFieldsInGEOS ). setRTTypeName( rtTypes::CustomTypes::groupNameRefArray ). setInputFlag( InputFlags::OPTIONAL ). - setDescription( "Names of the volumic fields in GEOSX to import into" ); + setDescription( "Names of the volumic fields in GEOS to import into" ); registerWrapper( viewKeyStruct::surfacicFieldsToImportString(), &m_surfacicFieldsToImport ). setRTTypeName( rtTypes::CustomTypes::groupNameRefArray ). setInputFlag( InputFlags::OPTIONAL ). setDescription( "Surfacic fields to be imported from the external mesh file" ); - registerWrapper( viewKeyStruct::surfacicFieldsInGEOSXString(), &m_surfacicFieldsInGEOSX ). + registerWrapper( viewKeyStruct::surfacicFieldsInGEOSString(), &m_surfacicFieldsInGEOS ). setRTTypeName( rtTypes::CustomTypes::groupNameRefArray ). setInputFlag( InputFlags::OPTIONAL ). - setDescription( "Names of the surfacic fields in GEOSX to import into" ); + setDescription( "Names of the surfacic fields in GEOS to import into" ); } void ExternalMeshGeneratorBase::postInputInitialization() @@ -73,8 +73,8 @@ void ExternalMeshGeneratorBase::postInputInitialization() " must contain the same number of values.", InputError ); }; - checkSizes( m_volumicFieldsToImport, m_volumicFieldsInGEOSX, viewKeyStruct::volumicFieldsToImportString(), viewKeyStruct::volumicFieldsInGEOSXString() ); - checkSizes( m_surfacicFieldsToImport, m_surfacicFieldsInGEOSX, viewKeyStruct::surfacicFieldsToImportString(), viewKeyStruct::surfacicFieldsInGEOSXString() ); + checkSizes( m_volumicFieldsToImport, m_volumicFieldsInGEOS, viewKeyStruct::volumicFieldsToImportString(), viewKeyStruct::volumicFieldsInGEOSString() ); + checkSizes( m_surfacicFieldsToImport, m_surfacicFieldsInGEOS, viewKeyStruct::surfacicFieldsToImportString(), viewKeyStruct::surfacicFieldsInGEOSString() ); auto const checkDuplicates = [this]( arrayView1d< string const > v, string const & key ) { @@ -86,8 +86,8 @@ void ExternalMeshGeneratorBase::postInputInitialization() "' already present in list of fields to import.", InputError ); }; - checkDuplicates( m_volumicFieldsInGEOSX, viewKeyStruct::volumicFieldsInGEOSXString() ); - checkDuplicates( m_surfacicFieldsInGEOSX, viewKeyStruct::surfacicFieldsInGEOSXString() ); + checkDuplicates( m_volumicFieldsInGEOS, viewKeyStruct::volumicFieldsInGEOSString() ); + checkDuplicates( m_surfacicFieldsInGEOS, viewKeyStruct::surfacicFieldsInGEOSString() ); // Building the fields mapping from the two separated input/output vectors. auto const buildMapping = [&]( arrayView1d< string const > from, @@ -101,8 +101,8 @@ void ExternalMeshGeneratorBase::postInputInitialization() return mapping; }; - MeshGeneratorBase::m_volumicFields = buildMapping( m_volumicFieldsToImport.toViewConst(), m_volumicFieldsInGEOSX.toViewConst() ); - MeshGeneratorBase::m_surfacicFields = buildMapping( m_surfacicFieldsToImport.toViewConst(), m_surfacicFieldsInGEOSX.toViewConst() ); + MeshGeneratorBase::m_volumicFields = buildMapping( m_volumicFieldsToImport.toViewConst(), m_volumicFieldsInGEOS.toViewConst() ); + MeshGeneratorBase::m_surfacicFields = buildMapping( m_surfacicFieldsToImport.toViewConst(), m_surfacicFieldsInGEOS.toViewConst() ); } } // namespace geos diff --git a/src/coreComponents/mesh/generators/ExternalMeshGeneratorBase.hpp b/src/coreComponents/mesh/generators/ExternalMeshGeneratorBase.hpp index fe918574461..84ccc63eb69 100644 --- a/src/coreComponents/mesh/generators/ExternalMeshGeneratorBase.hpp +++ b/src/coreComponents/mesh/generators/ExternalMeshGeneratorBase.hpp @@ -49,9 +49,9 @@ class ExternalMeshGeneratorBase : public MeshGeneratorBase constexpr static char const * scaleString() { return "scale"; } constexpr static char const * translateString() { return "translate"; } constexpr static char const * volumicFieldsToImportString() { return "fieldsToImport"; } - constexpr static char const * volumicFieldsInGEOSXString() { return "fieldNamesInGEOSX"; } + constexpr static char const * volumicFieldsInGEOSString() { return "fieldNamesInGEOS"; } constexpr static char const * surfacicFieldsToImportString() { return "surfacicFieldsToImport"; } - constexpr static char const * surfacicFieldsInGEOSXString() { return "surfacicFieldsInGEOSX"; } + constexpr static char const * surfacicFieldsInGEOSString() { return "surfacicFieldsInGEOS"; } }; /// @endcond @@ -66,17 +66,17 @@ class ExternalMeshGeneratorBase : public MeshGeneratorBase /// Scale factor that will be applied to the point coordinates (after translation) R1Tensor m_scale; - /// Names of the fields to be copied from an external reader into GEOSX data structure + /// Names of the fields to be copied from an external reader into GEOS data structure array1d< string > m_volumicFieldsToImport; - /// String array of the GEOSX user declared volumic fields - array1d< string > m_volumicFieldsInGEOSX; + /// String array of the GEOS user declared volumic fields + array1d< string > m_volumicFieldsInGEOS; - /// Names of the surfacic fields to be copied from an external reader into GEOSX data structure + /// Names of the surfacic fields to be copied from an external reader into GEOS data structure array1d< string > m_surfacicFieldsToImport; - /// String array of the GEOSX user declared surfacic fields - array1d< string > m_surfacicFieldsInGEOSX; + /// String array of the GEOS user declared surfacic fields + array1d< string > m_surfacicFieldsInGEOS; }; } // namespace geos diff --git a/src/coreComponents/mesh/generators/MeshGeneratorBase.hpp b/src/coreComponents/mesh/generators/MeshGeneratorBase.hpp index b7f8fbf2e2b..2c802fb332d 100644 --- a/src/coreComponents/mesh/generators/MeshGeneratorBase.hpp +++ b/src/coreComponents/mesh/generators/MeshGeneratorBase.hpp @@ -114,22 +114,22 @@ class MeshGeneratorBase : public dataRepository::Group virtual void freeResources() {} /** - * @brief Get the name mapping between mesh volumic field names and internal GEOSX volumic field names. + * @brief Get the name mapping between mesh volumic field names and internal GEOS volumic field names. * @return The string to string mapping of field names. */ std::map< string, string > const & getVolumicFieldsMapping() const { return m_volumicFields; } /** - * @brief Get the name mapping between mesh surfacic field names and internal GEOSX surfacic field names. + * @brief Get the name mapping between mesh surfacic field names and internal GEOS surfacic field names. * @return The string to string mapping of field names. */ std::map< string, string > const & getSurfacicFieldsMapping() const { return m_surfacicFields; } protected: - /// Mapping from volumic field source to GEOSX field. + /// Mapping from volumic field source to GEOS field. std::map< string, string > m_volumicFields; - /// Mapping from surfacic field source to GEOSX field. + /// Mapping from surfacic field source to GEOS field. std::map< string, string > m_surfacicFields; private: diff --git a/src/coreComponents/schema/docs/VTKMesh.rst b/src/coreComponents/schema/docs/VTKMesh.rst index 688b0d98319..3c6616c3087 100644 --- a/src/coreComponents/schema/docs/VTKMesh.rst +++ b/src/coreComponents/schema/docs/VTKMesh.rst @@ -4,7 +4,7 @@ Name Type Default Description ====================== ======================== ========= ============================================================================================================================================================================================================================================================================================================================================================================================================================================================================ faceBlocks groupNameRef_array {} For multi-block files, names of the face mesh block. -fieldNamesInGEOSX groupNameRef_array {} Names of the volumic fields in GEOSX to import into +fieldNamesInGEOS groupNameRef_array {} Names of the volumic fields in GEOS to import into fieldsToImport groupNameRef_array {} Volumic fields to be imported from the external mesh file file path required Path to the mesh file logLevel integer 0 Log level @@ -15,7 +15,7 @@ partitionMethod geos_vtk_PartitionMethod parmetis Method (library) used partitionRefinement integer 1 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. regionAttribute groupNameRef attribute Name of the VTK cell attribute to use as region marker scale R1Tensor {1,1,1} Scale the coordinates of the vertices by given scale factors (after translation) -surfacicFieldsInGEOSX groupNameRef_array {} Names of the surfacic fields in GEOSX to import into +surfacicFieldsInGEOS groupNameRef_array {} Names of the surfacic fields in GEOS to import into surfacicFieldsToImport groupNameRef_array {} Surfacic fields to be imported from the external mesh file translate R1Tensor {0,0,0} Translate the coordinates of the vertices by a given vector (prior to scaling) useGlobalIds integer 0 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 From c29c4ec474bc557282f69372f2518e833325f7d0 Mon Sep 17 00:00:00 2001 From: Oluwatobi-PM <72420996+Oluwatobi-PM@users.noreply.github.com> Date: Wed, 14 Aug 2024 10:12:47 -0700 Subject: [PATCH 15/42] docs: stress_and_pressure_initialization (#3249) * Updates to Gravity-Only Case * User-defined Initialization Case * Restructure examples into 2 folders * update python scripts * fix sphinx links * update xml files and add smoke tests * update rst file for gravity based model * Clean Up Figures --------- Co-authored-by: Oluwatobi Quadri Raji Co-authored-by: Jian HUANG Co-authored-by: Herve Gross <40979822+herve-gross@users.noreply.github.com> Co-authored-by: Oluwatobi Quadri Raji Co-authored-by: Randolph Settgast --- .integrated_tests.yaml | 2 +- BASELINE_NOTES.md | 11 +- ...avityInducedStress_initialization_base.xml | 155 +++ ...InducedStress_initialization_benchmark.xml | 47 + ...vityInducedStress_initialization_smoke.xml | 53 + inputFiles/initialization/initialization.ats | 27 + .../userTables/effectiveSigma_xx.csv | 2 + .../userTables/effectiveSigma_yy.csv | 2 + .../userTables/effectiveSigma_zz.csv | 2 + .../userTables/porePressure.csv | 2 + inputFiles/initialization/userTables/x.csv | 1 + inputFiles/initialization/userTables/y.csv | 1 + inputFiles/initialization/userTables/z.csv | 2 + .../userdefinedStress_initialization_base.xml | 228 ++++ ...definedStress_initialization_benchmark.xml | 47 + ...userdefinedStress_initialization_smoke.xml | 53 + .../multiphysics/docs/Initialization.rst | 14 + .../Example.rst | 232 ++++ .../effective_SZZ.png | Bin 0 -> 124426 bytes .../gravityInitializationFigure.py | 146 +++ .../mesh.png | Bin 0 -> 243009 bytes .../pressure_field.png | Bin 0 -> 453500 bytes .../simulation_result_0.csv | 1002 +++++++++++++++++ .../sketch_of_problem.png | Bin 0 -> 103181 bytes .../userTableStressInitialization/Example.rst | 116 ++ .../generateTable.py | 49 + .../pressure_field.png | Bin 0 -> 429924 bytes .../simulation_result_0.csv | 1002 +++++++++++++++++ .../stressZZ_field.png | Bin 0 -> 406723 bytes .../tableInitializationFigure.py | 153 +++ src/docs/sphinx/basicExamples/Index.rst | 1 + src/docs/sphinx/userGuide/Index.rst | 2 + 32 files changed, 3349 insertions(+), 3 deletions(-) create mode 100644 inputFiles/initialization/gravityInducedStress_initialization_base.xml create mode 100644 inputFiles/initialization/gravityInducedStress_initialization_benchmark.xml create mode 100644 inputFiles/initialization/gravityInducedStress_initialization_smoke.xml create mode 100644 inputFiles/initialization/initialization.ats create mode 100644 inputFiles/initialization/userTables/effectiveSigma_xx.csv create mode 100644 inputFiles/initialization/userTables/effectiveSigma_yy.csv create mode 100644 inputFiles/initialization/userTables/effectiveSigma_zz.csv create mode 100644 inputFiles/initialization/userTables/porePressure.csv create mode 100644 inputFiles/initialization/userTables/x.csv create mode 100644 inputFiles/initialization/userTables/y.csv create mode 100644 inputFiles/initialization/userTables/z.csv create mode 100644 inputFiles/initialization/userdefinedStress_initialization_base.xml create mode 100644 inputFiles/initialization/userdefinedStress_initialization_benchmark.xml create mode 100644 inputFiles/initialization/userdefinedStress_initialization_smoke.xml create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/Initialization.rst create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/Example.rst create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/effective_SZZ.png create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.py create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/mesh.png create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/pressure_field.png create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/simulation_result_0.csv create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/sketch_of_problem.png create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/Example.rst create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/generateTable.py create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/pressure_field.png create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/simulation_result_0.csv create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/stressZZ_field.png create mode 100644 src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.py diff --git a/.integrated_tests.yaml b/.integrated_tests.yaml index 9b8f7b83af5..aa92ea9845d 100644 --- a/.integrated_tests.yaml +++ b/.integrated_tests.yaml @@ -1,6 +1,6 @@ baselines: bucket: geosx - baseline: integratedTests/baseline_integratedTests-pr3278-6753-f7f9add + baseline: integratedTests/baseline_integratedTests-pr3249-6781-4998bc8 allow_fail: all: '' diff --git a/BASELINE_NOTES.md b/BASELINE_NOTES.md index 4eea0a9bfc9..ec3a090f405 100644 --- a/BASELINE_NOTES.md +++ b/BASELINE_NOTES.md @@ -8,14 +8,21 @@ These notes should be in reverse-chronological order, and use the following time -PR 3278 (2024-08-12) -==================== +PR #3249 (2024-08-14) +====================== +Two initialization options for poromechanical models. Rebaseline the corresponding cases. + + +PR #3278 (2024-08-12) +====================== Renamed GEOSX to GEOS in enternal mesh import, so rebaseline to change these names is the baselines. + PR #3202 (2024-08-03) ====================== Acoustic VTI tests needed rebaselining after update in source and receiver location algorithm. + PR #3215 (2024-07-23) ====================== Changed the default value for massCreation and name of the wrapper. diff --git a/inputFiles/initialization/gravityInducedStress_initialization_base.xml b/inputFiles/initialization/gravityInducedStress_initialization_base.xml new file mode 100644 index 00000000000..7a9ce532b27 --- /dev/null +++ b/inputFiles/initialization/gravityInducedStress_initialization_base.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/initialization/gravityInducedStress_initialization_benchmark.xml b/inputFiles/initialization/gravityInducedStress_initialization_benchmark.xml new file mode 100644 index 00000000000..921334e6944 --- /dev/null +++ b/inputFiles/initialization/gravityInducedStress_initialization_benchmark.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/initialization/gravityInducedStress_initialization_smoke.xml b/inputFiles/initialization/gravityInducedStress_initialization_smoke.xml new file mode 100644 index 00000000000..53dfbba70e7 --- /dev/null +++ b/inputFiles/initialization/gravityInducedStress_initialization_smoke.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/initialization/initialization.ats b/inputFiles/initialization/initialization.ats new file mode 100644 index 00000000000..3bb7cf04cab --- /dev/null +++ b/inputFiles/initialization/initialization.ats @@ -0,0 +1,27 @@ +import os +from geos.ats.test_builder import TestDeck, RestartcheckParameters, generate_geos_tests + +restartcheck_params = {} +restartcheck_params["atol"] = 2.0E-4 +restartcheck_params["rtol"] = 1.0E-7 + +decks = [ + TestDeck( + name="gravityInducedStress_initialization_smoke", + description= + "model intialization with gravity induced stress", + partitions=((1, 1, 1), (2, 2, 1)), + restart_step=1, + check_step=2, + restartcheck_params=RestartcheckParameters(**restartcheck_params)), + TestDeck( + name="userdefinedStress_initialization_smoke", + description= + "model intialization with user defined tables", + partitions=((1, 1, 1), (2, 2, 1)), + restart_step=1, + check_step=2, + restartcheck_params=RestartcheckParameters(**restartcheck_params)) +] + +generate_geos_tests(decks) diff --git a/inputFiles/initialization/userTables/effectiveSigma_xx.csv b/inputFiles/initialization/userTables/effectiveSigma_xx.csv new file mode 100644 index 00000000000..a1dca328d57 --- /dev/null +++ b/inputFiles/initialization/userTables/effectiveSigma_xx.csv @@ -0,0 +1,2 @@ +-7000000.00 +0.00 diff --git a/inputFiles/initialization/userTables/effectiveSigma_yy.csv b/inputFiles/initialization/userTables/effectiveSigma_yy.csv new file mode 100644 index 00000000000..d1f4f182344 --- /dev/null +++ b/inputFiles/initialization/userTables/effectiveSigma_yy.csv @@ -0,0 +1,2 @@ +-17000000.00 +0.00 diff --git a/inputFiles/initialization/userTables/effectiveSigma_zz.csv b/inputFiles/initialization/userTables/effectiveSigma_zz.csv new file mode 100644 index 00000000000..53910c07f32 --- /dev/null +++ b/inputFiles/initialization/userTables/effectiveSigma_zz.csv @@ -0,0 +1,2 @@ +-14000000.00 +0.00 diff --git a/inputFiles/initialization/userTables/porePressure.csv b/inputFiles/initialization/userTables/porePressure.csv new file mode 100644 index 00000000000..5e92619dc6a --- /dev/null +++ b/inputFiles/initialization/userTables/porePressure.csv @@ -0,0 +1,2 @@ +10000000.00 +0.00 diff --git a/inputFiles/initialization/userTables/x.csv b/inputFiles/initialization/userTables/x.csv new file mode 100644 index 00000000000..fb1088c65aa --- /dev/null +++ b/inputFiles/initialization/userTables/x.csv @@ -0,0 +1 @@ +0.00 diff --git a/inputFiles/initialization/userTables/y.csv b/inputFiles/initialization/userTables/y.csv new file mode 100644 index 00000000000..fb1088c65aa --- /dev/null +++ b/inputFiles/initialization/userTables/y.csv @@ -0,0 +1 @@ +0.00 diff --git a/inputFiles/initialization/userTables/z.csv b/inputFiles/initialization/userTables/z.csv new file mode 100644 index 00000000000..eb40c4056f7 --- /dev/null +++ b/inputFiles/initialization/userTables/z.csv @@ -0,0 +1,2 @@ +-1000.00 +0.00 diff --git a/inputFiles/initialization/userdefinedStress_initialization_base.xml b/inputFiles/initialization/userdefinedStress_initialization_base.xml new file mode 100644 index 00000000000..7d216b2786a --- /dev/null +++ b/inputFiles/initialization/userdefinedStress_initialization_base.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/initialization/userdefinedStress_initialization_benchmark.xml b/inputFiles/initialization/userdefinedStress_initialization_benchmark.xml new file mode 100644 index 00000000000..518b4a925a5 --- /dev/null +++ b/inputFiles/initialization/userdefinedStress_initialization_benchmark.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/initialization/userdefinedStress_initialization_smoke.xml b/inputFiles/initialization/userdefinedStress_initialization_smoke.xml new file mode 100644 index 00000000000..7dd0a6a9f76 --- /dev/null +++ b/inputFiles/initialization/userdefinedStress_initialization_smoke.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/coreComponents/physicsSolvers/multiphysics/docs/Initialization.rst b/src/coreComponents/physicsSolvers/multiphysics/docs/Initialization.rst new file mode 100644 index 00000000000..a80e5152f58 --- /dev/null +++ b/src/coreComponents/physicsSolvers/multiphysics/docs/Initialization.rst @@ -0,0 +1,14 @@ +.. _PoromechanicalInitialization: + +Poromechanical Models Intialization +=========================================== + +This section demonstrates the intializaton of poromechanical models in GEOS. + + +.. toctree:: + :maxdepth: 1 + + gravityInducedStressInitialization/Example + + userTableStressInitialization/Example diff --git a/src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/Example.rst b/src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/Example.rst new file mode 100644 index 00000000000..912f18a8828 --- /dev/null +++ b/src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/Example.rst @@ -0,0 +1,232 @@ +.. _gravityinducedhydrostaticinitialization: + + +################################################################################# + Model Initialization: Hydrostatic and Mechanical Equilibrium +################################################################################# + + +**Context** + +Prior to simulating underground operations, it is necessary to run a few steps of a fully coupled geomechanical simulation to reach the equilibrium state. In this example, we perform a gravity-only stress initialization for a reservoir with a hydrostatic in-situ pressure. The problem is solved using a single-phase poromechanics solver (see :ref:`PoroelasticSolver`) and the HydrostaticEquilibrium initialization procedure (see :ref:`EquilibriumInitialCondition`) in GEOS to predict the initial state of stress with depth in the reservoir, subject to the reservoir rock properties and the prevailing hydrostatic pressure condition. This way, the poromechanical model is initialized at mechanical equilibrium and all displacements are set to zero after initialization. We verify numerical results obtained by GEOS against an analytical equation (Eaton's equation). + + +**Input file** + +The xml input files for the test case are located at: + +.. code-block:: console + + inputFiles/initialization/gravityInducedStress_initialization_base.xml + inputFiles/initialization/gravityInducedStress_initialization_benchmark.xml + + +A Python script for post-processing the simulation results is provided: + +.. code-block:: console + + src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.py + + +------------------------------------------------------------------ +Description of the Case +------------------------------------------------------------------ + +We model the in-situ state of stress of a subsurface reservoir subject to a gravity-only induced stress and hydrostatic in-situ pressure condition. The domain is homogenous, isotropic and isothermal. The domain is subject to roller boundary conditions on lateral surfaces and at the base of the model, while the top of the model is a free surface. + +.. _problemSketch1InitializationTest: +.. figure:: sketch_of_problem.png + :align: center + :width: 300 + :figclass: align-center + + Sketch of the problem + + +We set up and solve a PoroMechanics model to obtain the gradient of total stresses (principal stress components) across the domain due to gravity effects and hydrostatic pressure only. These numerical predictions are compared with the analytical solutions derived from `Eaton et al. (1969, 1975) `__ + + + +For this example, we focus on the ``Mesh``, +the ``Constitutive``, and the ``FieldSpecifications`` tags. + + +------------------------------------------------------------------ +Mesh +------------------------------------------------------------------ + +The following figure shows the mesh used for solving this poromechanical problem: + +.. _problemSketch2InitializationTest: +.. figure:: mesh.png + :align: center + :width: 500 + :figclass: align-center + + Generated mesh + + +The mesh was created with the internal mesh generator and parametrized in the ``InternalMesh`` XML tag. +It contains 20x20x40 eight-node brick elements in the x, y, and z directions respectively. +Such eight-node hexahedral elements are defined as ``C3D8`` elementTypes, and their collection forms a mesh +with one group of cell blocks named here ``cellBlockNames``. + + +.. literalinclude:: ../../../../../../inputFiles/initialization/gravityInducedStress_initialization_benchmark.xml + :language: xml + :start-after: + :end-before: + + +------------------------ +Poro-Mechanics Solver +------------------------ + +For the initialization test, a hydrostatic pore pressure is imposed on the system. This is done using the Hydrostatic Equilibrium tag under Field Specifications. We then define a poro-mechanics solver called here poroSolve. +This solid mechanics solver (see :ref:`SolidMechanicsLagrangianFEM`) called ``lagSolve`` is based on the Lagrangian finite element formulation. +The problem is run as ``QuasiStatic`` without considering inertial effects. +The computational domain is discretized by ``FE1``, defined in the ``NumericalMethods`` section. +We use the ``targetRegions`` attribute to define the regions where the poromechanics solver is applied. +Since we only have one cellBlockName type called ``Domain``, the poromechanics solver is applied to every element of the model. +The flow solver for this problem (see :ref:`SinglePhaseFlow`) called ``SinglePhaseFlow`` is discretized by ``fluidTPFA``, defined in the ``NumericalMethods`` section. + +.. literalinclude:: ../../../../../../inputFiles/initialization/gravityInducedStress_initialization_base.xml + :language: xml + :start-after: + :end-before: + +.. literalinclude:: ../../../../../../inputFiles/initialization/gravityInducedStress_initialization_base.xml + :language: xml + :start-after: + :end-before: + + +------------------------------ +Constitutive Laws +------------------------------ + +A homogeneous domain with one solid material is assumed, and its mechanical and fluid properties are specified in the ``Constitutive`` section: + +.. literalinclude:: ../../../../../../inputFiles/initialization/gravityInducedStress_initialization_base.xml + :language: xml + :start-after: + :end-before: + + +As shown above, in the ``CellElementRegion`` section, +``rock`` is the solid material in the computational domain and ``water`` is the fluid material. +Here, Porous Elastic Isotropic model ``PorousElasticIsotropic`` is used to simulate the elastic behavior of ``rock``. +As for the solid material parameters, ``defaultDensity``, ``defaultPoissonRatio``, ``defaultYoungModulus``, ``grainBulkModulus``, ``defaultReferencePorosity``, and ``permeabilityComponents`` denote the rock density, Poisson ratio, Young modulus, grain bulk modulus, porosity, and permeability components respectively. In additon, the fluid property (``water``) of density, viscosity, compressibility and viscosibility are specified with ``defaultDensity``, ``defaultViscosity``, ``compressibility``, and ``viscosibility``. +All properties are specified in the International System of Units. + + +------------------------------ +Stress Initialization Function +------------------------------ + +In the ``Tasks`` section, ``SinglePhasePoromechanicsInitialization`` tasks are defined to initialize the model by calling the poro-mechanics solver ``poroSolve``. This task is used to determine stress gradients through designated densities and established constitutive relationships to maintain mechanical equilibrium and reset all initial displacements to zero following the initialization process. + +.. literalinclude:: ../../../../../../inputFiles/initialization/gravityInducedStress_initialization_base.xml + :language: xml + :start-after: + :end-before: + +The initialization is triggered into action using the ``Event`` management section, where the ``soloEvent`` function calls the task at the target time (in this case -1e10s). + +.. literalinclude:: ../../../../../../inputFiles/initialization/gravityInducedStress_initialization_benchmark.xml + :language: xml + :start-after: + :end-before: + +The ``PeriodicEvent`` function is used here to define recurring tasks that progress for a stipulated time during the simuation. We also use it in this example to save the vtkOuput results. + +.. literalinclude:: ../../../../../../inputFiles/initialization/gravityInducedStress_initialization_base.xml + :language: xml + :start-after: + :end-before: + +We use Paraview to extract the data from the vtkOutput files at the initialization time, and then use a Python script to read and plot the stress and pressure gradients for verification and visualization. + + + +----------------------------------- +Initial and Boundary Conditions +----------------------------------- + +The next step is to specify fields, including: + + - The initial value (hydrostatic equilibrium), + - The boundary conditions (the displacement control of the outer boundaries have to be set). + +In this problem, all outer boundaries of the domain are subject to roller constraints except the top of the model, left as a free surface. + +These boundary conditions are set up through the ``FieldSpecifications`` section. + +.. literalinclude:: ../../../../../../inputFiles/initialization/gravityInducedStress_initialization_base.xml + :language: xml + :start-after: + :end-before: + + +The parameters used in the simulation are summarized in the following table. + ++------------------+-------------------------+------------------+--------------------+ +| Symbol | Parameter | Unit | Value | ++==================+=========================+==================+====================+ +| :math:`E` | Young Modulus | [MPa] | 100 | ++------------------+-------------------------+------------------+--------------------+ +| :math:`v` | Poisson Ratio | [-] | 0.25 | ++------------------+-------------------------+------------------+--------------------+ +| :math:`\rho_b` | Bulk Density | [kg/m\ :sup:`3`] | 2500 | ++------------------+-------------------------+------------------+--------------------+ +| :math:`\phi` | Porosity | [-] | 0.375 | ++------------------+-------------------------+------------------+--------------------+ +| :math:`K_s` | Grain Bulk Modulus | [Pa] | 10\ :sup:`27` | ++------------------+-------------------------+------------------+--------------------+ +| :math:`\kappa` | Permeability | [m\ :sup:`2`] | 10\ :sup:`-12` | ++------------------+-------------------------+------------------+--------------------+ +| :math:`\rho_f` | Fluid Density | [kg/m\ :sup:`3`] | 1000 | ++------------------+-------------------------+------------------+--------------------+ +| :math:`c_f` | Fluid compressibility | [Pa\ :sup:`-1`] | 4.4x10\ :sup:`-10` | ++------------------+-------------------------+------------------+--------------------+ +| :math:`\mu` | Fluid viscosity | [Pa s] | 10\ :sup:`-3` | ++------------------+-------------------------+------------------+--------------------+ + + +--------------------------------- +Inspecting Results +--------------------------------- + +In the example, we request vtk output files for time-series (time history). We use paraview to visualize the outcome at the time 0s. +The following figure shows the final gradient of pressure and of the effective vertical stress after initialization is completed. + +.. _problemInitializationPres: +.. figure:: pressure_field.png + :align: center + :width: 500 + :figclass: align-center + + Simulation result of pressure + +.. _problemInitializationSZZ: +.. figure:: effective_SZZ.png + :align: center + :width: 500 + :figclass: align-center + + Simulation result of effective vertical stress + + +The figure below shows the comparison between the total stress computed by GEOS(marks) and with an analytical solutions (solid lines). Note that, because of the use of an isotropic model, the minimum and maximul horizontal stresses are equal. + +.. plot:: coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.py + + +------------------------------------------------------------------ +To go further +------------------------------------------------------------------ + + +**Feedback on this example** + +For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. diff --git a/src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/effective_SZZ.png b/src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/effective_SZZ.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd5ed57fe6128715fac23bcd30322505f701ce5 GIT binary patch literal 124426 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 literal 0 HcmV?d00001 diff --git a/src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.py b/src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.py new file mode 100644 index 00000000000..f6381a56e08 --- /dev/null +++ b/src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.py @@ -0,0 +1,146 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import h5py +import xml.etree.ElementTree as ElementTree +import math +from math import sin,cos,tan,exp,atan,asin +import csv + + +def getHydromechanicalParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param1 = tree.find('Constitutive/ElasticIsotropic') + param2 = tree.find('Constitutive/BiotPorosity') + param3 = tree.find('Constitutive/CompressibleSinglePhaseFluid') + + hydromechanicalParameters = dict.fromkeys([ + "bulkModulus", "shearModulus", "youngModulus", "poissonRatio", "rockDensity", "poissonRatio", "biotCoefficient", "porosity", "fluidDensity", "traction"]) + + hydromechanicalParameters["rockDensity"] = float(param1.get("defaultDensity")) + hydromechanicalParameters["poissonRatio"] = float(param1.get("defaultPoissonRatio")) + hydromechanicalParameters["youngModulus"] = float(param1.get("defaultYoungModulus")) + + E = hydromechanicalParameters["youngModulus"] + nu = hydromechanicalParameters["poissonRatio"] + K = E / (3 * (1 - 2 * nu)) + G = E / (2 * (1 + nu)) + + hydromechanicalParameters["poissonRatio"] = nu + hydromechanicalParameters["bulkModulus"] = K + hydromechanicalParameters["shearModulus"] = G + + Ks = float(param2.get("defaultGrainBulkModulus")) + hydromechanicalParameters["biotCoefficient"] = 1.0 - K / Ks + + hydromechanicalParameters["porosity"] = float(param2.get("defaultReferencePorosity")) + + hydromechanicalParameters["fluidDensity"] = float(param3.get("defaultDensity")) + + param4 = tree.findall('FieldSpecifications/Traction') + found_stress = False + for elem in param4: + if elem.get("name") == "tractionTop" and elem.get("tractionType") == "normal": + traction = float(elem.get("scale")) * (-1) + found_stress = True + if found_stress: break + + return hydromechanicalParameters + + +def main(): + # File path + xmlFile1Path = "../../../../../../inputFiles/initialization/gravityInducedStress_initialization_base.xml" + xmlFile2Path = "../../../../../../inputFiles/initialization/gravityInducedStress_initialization_benchmark.xml" + + hydromechanicalParameters = getHydromechanicalParametersFromXML(xmlFile1Path) + + BiotCoefficient = hydromechanicalParameters["biotCoefficient"] + nu = hydromechanicalParameters["poissonRatio"] + rhoF = hydromechanicalParameters["fluidDensity"] + rhoR = hydromechanicalParameters["rockDensity"] + phi = hydromechanicalParameters["porosity"] + rhoB = (1-phi)*rhoR + phi*rhoF + + traction = hydromechanicalParameters["traction"] + gravity = 9.81 + + # rename this file to the name of your Paraview output file + file = open("simulation_result_0.csv") + csvreader = csv.reader(file) + header = next(csvreader) + header_index = {column_name: index for index, column_name in enumerate(header)} + + rows = [] + for row in csvreader: + rows.append(row) + file.close() + + zloc_index = header_index["elementCenter:2"] + pressure_index = header_index["pressure"] + tsxx_index = header_index["rockSolid_stress:0"] # the solidModelName="rockSolid" has been defined in the gravityInducedStress_initialization_base.xml file, please change if you have a different solidModelName + tsyy_index = header_index["rockSolid_stress:1"] + tszz_index = header_index["rockSolid_stress:2"] + + + rows = np.array(rows) + zloc_0 = np.empty(len(rows[:,1])) + pressure_0 = np.empty(len(rows[:,1])) + tsxx_0 = np.empty(len(rows[:,1])) + tsyy_0 = np.empty(len(rows[:,1])) + tszz_0 = np.empty(len(rows[:,1])) + for i in range(0,len(rows[:,1])): + zloc_0[i]=-(float(rows[i,zloc_index])) + pressure_0[i]=float(rows[i,pressure_index]) + tsxx_0[i]=-(float(rows[i,tsxx_index])-BiotCoefficient*pressure_0[i])/1.0e6 + tsyy_0[i]=-(float(rows[i,tsyy_index])-BiotCoefficient*pressure_0[i])/1.0e6 + tszz_0[i]=-(float(rows[i,tszz_index])-BiotCoefficient*pressure_0[i])/1.0e6 + + + z_analytical= np.linspace(0, 1000, 100) + pp_analytical= rhoF*gravity*z_analytical/1.0e6 + szz_analtyical= rhoB*gravity*z_analytical/1.0e6 + + sxx_analtyical=nu/(1-nu)*(szz_analtyical-BiotCoefficient*pp_analytical)+BiotCoefficient*pp_analytical + + fsize = 20 + msize = 12 + lw = 6 + mew = 2 + malpha = 0.6 + lalpha = 0.8 + N1=1 + + fig = plt.figure(figsize=(10,8)) + cmap = plt.get_cmap("tab10") + + + plt.plot(tsxx_0[::N1], zloc_0[::N1], 'o', color=cmap(0), markersize=msize, alpha=malpha, mec=cmap(0), fillstyle='none', mew=mew, label= 'Sxx_Total_GEOS') + plt.plot(sxx_analtyical, z_analytical, lw=lw, alpha=0.8, color='orange', linestyle= ':', label='Sxx_Total_Analytical') + plt.plot(tsyy_0[::N1], zloc_0[::N1], 's', color=cmap(1), markersize=msize, alpha=malpha, mec=cmap(1), fillstyle='none', mew=mew, label= 'Syy_Total_GEOS') + plt.plot(tszz_0[::N1], zloc_0[::N1], 'd', color=cmap(2), markersize=msize, alpha=malpha, mec=cmap(2), fillstyle='none', mew=mew, label= 'Szz_Total_GEOS') + plt.plot(szz_analtyical, z_analytical, lw=lw, alpha=0.8, color='g', linestyle= ':', label='Szz_Total_Analytical') + plt.plot(pressure_0[::N1]/1.0e6, zloc_0[::N1], 'x', color=cmap(3), markersize=msize, alpha=malpha, mec=cmap(3), fillstyle='none', mew=mew, label= 'Pore Pressure_GEOS') + plt.plot(pp_analytical, z_analytical, lw=lw, alpha=0.8, color='r', linestyle= ':', label='Pore Pressure_Analytical') + plt.xlabel('Total Stresses [MPa]', size=fsize, weight="bold") + plt.ylabel('Depth [m]', size=fsize, weight="bold") + plt.legend(loc='upper right',fontsize=fsize*0.5) + plt.grid(True) + ax = plt.gca() + ax.xaxis.set_tick_params(labelsize=fsize) + ax.yaxis.set_tick_params(labelsize=fsize) + ax.invert_yaxis() + + plt.show() + + +if __name__ == "__main__": + main() + + + + + + + diff --git a/src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/mesh.png b/src/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..16e043636c36db0dcaf38a2fc0cd2bbd1e0e811d GIT binary patch literal 243009 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

sg4;uPO?V2-o8bj3L9qAn(x)c+%TK!AT)c8!4 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�d|m(mnD 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 literal 0 HcmV?d00001 diff --git a/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/Example.rst b/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/Example.rst new file mode 100644 index 00000000000..b60009c1b27 --- /dev/null +++ b/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/Example.rst @@ -0,0 +1,116 @@ +.. _userdefinedstressinitialization: + + +################################################################################# + Model Initialization: User Defined Tables +################################################################################# + + +**Context** + +This example uses the same reservoir model as the gravity-induced hydrostatic stress initialization case (see :ref:`gravityinducedhydrostaticinitialization`). Instead of using the gravity based equilibrium initialization procedure, we collect the interpretated stress and pore pressure gradients for a reservoir and then request the simulator to perform an initialization with the provided pressure and stresses in every element in the model. The problem is solved by using the single-phase poromechanics solver (see :ref:`PoroelasticSolver`) in GEOS. + +**Input file** + +The xml input files for the test case are located at: + +.. code-block:: console + + inputFiles/initialization/userdefinedStress_initialization_base.xml + inputFiles/initialization/userdefinedStress_initialization_benchmark.xml + + +This example also uses a set of table files located at: + +.. code-block:: console + + inputFiles/initialization/userTables/ + + +Last, a Python script for post-processing the results is provided: + +.. code-block:: console + + src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.py + + +------------------------------------- +Stress Initialization Table Functions +------------------------------------- + +The major distinction between this "user-defined" initialization and the "gravity-based" initialization is that in the user-defined case, the user provides the following additional information: + + - The distribution of effective stresses and pore pressure across the domain, with their gradients assumed constant along the depth in this example. We use a table function (see :ref:`FunctionManager`) to specify pressure and stress conditions throughout the area. + + +This is shown in the following tags under the ``FieldSpecifications`` section below + +.. literalinclude:: ../../../../../../inputFiles/initialization/userdefinedStress_initialization_base.xml + :language: xml + :start-after: + :end-before: + +The tables for ``sigma_xx``, ``sigma_yy``, ``sigma_zz`` and ``init_pressure`` are listed under the ``Functions`` section as shown below. + +.. literalinclude:: ../../../../../../inputFiles/initialization/userdefinedStress_initialization_base.xml + :language: xml + :start-after: + :end-before: + +The required input files: x.csv, y.csv, z.csv, effectiveSigma_xx.csv, effectiveSigma_yy.csv, effectiveSigma_zz.csv, and porePressure.csv are generated based on the expected stress-gradients in the model. + +A Python script to generate these files is provided: + +.. code-block:: console + + src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/genetrateTable.py + +In addition to generating the files listed above, the script prints out the corresponding fluid density and rock density based on the model parameters provided. These values are then input into the ``defaultDensity`` parameter of the ``CompressibleSinglePhaseFluid`` and ``ElasticIsotropic`` tags respectively, as shown below: + +.. literalinclude:: ../../../../../../inputFiles/initialization/userdefinedStress_initialization_base.xml + :language: xml + :start-after: + :end-before: + +.. literalinclude:: ../../../../../../inputFiles/initialization/userdefinedStress_initialization_base.xml + :language: xml + :start-after: + :end-before: + + +--------------------------------- +Inspecting Results +--------------------------------- + +In the example, we request vtk output files for time-series (time history). We use paraview to visualize the outcome at the time 0s. +The following figure shows the final gradient of pressure and of the effective vertical stress after initialization is completed. + +.. _problemInitializationPres: +.. figure:: pressure_field.png + :align: center + :width: 500 + :figclass: align-center + + Simulation result of pressure + +.. _problemInitializationSZZ: +.. figure:: stressZZ_field.png + :align: center + :width: 500 + :figclass: align-center + + Simulation result of effective vertical stress + +The figure below shows the comparisons between the numerical predictions (marks) and the corresponding user-provided stress gradients. Note that anisotropic horizontal stresses are obtained through this intialization procedure; however, mechanical equilibrium might not be guaranteed, especially for the heterogeneous models. + +.. plot:: coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.py + + +------------------------------------------------------------------ +To go further +------------------------------------------------------------------ + + +**Feedback on this example** + +For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. diff --git a/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/generateTable.py b/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/generateTable.py new file mode 100644 index 00000000000..c8e8eb08ff2 --- /dev/null +++ b/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/generateTable.py @@ -0,0 +1,49 @@ +import math +import numpy as np + + +model_top = 0.0 # in m +model_base = -1000.0 # in m +num_Points = 2 +z_table = np.linspace(model_base, model_top, num_Points) +pp_gradient = 0.1 # in MPa/m +sigma_xx_gradient = 0.17 # in MPa/m +sigma_yy_gradient = 0.27 # in MPa/m +sigma_zz_gradient = 0.24 # in MPa/m + + + +PoissonRatio = 0.25 +YoungModulus = 100e6 # in Pa +grainBulkModulus = 1e27 # in #Pa +bulkModulus = YoungModulus/3.0/(1.0-2.0*PoissonRatio) # in Pa +BiotCoefficient = 1.0-bulkModulus/grainBulkModulus +porosity = 0.375 +Gravity = 9.81 + + +pp_table = abs(z_table)*pp_gradient*100000 +fluidDensity = pp_gradient*100000/Gravity +effectiveSigma_xx_table = z_table*sigma_xx_gradient*100000 + BiotCoefficient*pp_table +effectiveSigma_yy_table = z_table*sigma_yy_gradient*100000 + BiotCoefficient*pp_table +effectiveSigma_zz_table = z_table*sigma_zz_gradient*100000 + BiotCoefficient*pp_table + +bulkDensity = sigma_zz_gradient*100000/Gravity +rockDensity = (bulkDensity - porosity*fluidDensity)/(1.0-porosity) +print(f'Fluid Density = {fluidDensity} kg/m3, Rock Density = {rockDensity} kg/m3') + +np.savetxt('porePressure.csv', pp_table, fmt='%1.2f', delimiter=',') + +np.savetxt('effectiveSigma_xx.csv', effectiveSigma_xx_table, fmt='%1.2f', delimiter=',') + +np.savetxt('effectiveSigma_yy.csv', effectiveSigma_yy_table, fmt='%1.2f', delimiter=',') + +np.savetxt('effectiveSigma_zz.csv', effectiveSigma_zz_table, fmt='%1.2f', delimiter=',') + +x_table = np.linspace(0.0, 0.0, 1) +np.savetxt('x.csv', x_table, fmt='%1.2f', delimiter=',') + +y_table = np.linspace(0.0, 0.0, 1) +np.savetxt('y.csv', x_table, fmt='%1.2f', delimiter=',') + +np.savetxt('z.csv', z_table, fmt='%1.2f', delimiter=',') diff --git a/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/pressure_field.png b/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/pressure_field.png new file mode 100644 index 0000000000000000000000000000000000000000..9145f77b8973156fe0bc24d6dd0060d4d92de9f8 GIT binary patch literal 429924 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%0D4MFL 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 z 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 S+8^Z5Q%y-rG4IB2zyCipi?Ue& literal 0 HcmV?d00001 diff --git a/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/simulation_result_0.csv b/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/simulation_result_0.csv new file mode 100644 index 00000000000..837edf3cc67 --- /dev/null +++ b/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/simulation_result_0.csv @@ -0,0 +1,1002 @@ +"elementCenter:0","elementCenter:1","elementCenter:2","pressure","rockSolid_stress:0","rockSolid_stress:1","rockSolid_stress:2","rockSolid_stress:3","rockSolid_stress:4","rockSolid_stress:5","Points:0","Points:1","Points:2" +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-1000 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-999 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-998 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-997 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-996 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-995 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-994 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-993 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-992 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-991 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-990 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-989 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-988 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-987 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-986 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-985 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-984 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-983 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-982 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-981 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-980 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-979 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-978 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-977 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-976 +525,525,-987.5,9.875e+06,-6.8917e+06,-1.6767e+07,-1.3763e+07,2.231e-09,-1.1239e-09,4.8216e-09,500,500,-975 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-974 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-973 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-972 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-971 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-970 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-969 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-968 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-967 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-966 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-965 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-964 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-963 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-962 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-961 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-960 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-959 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-958 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-957 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-956 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-955 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-954 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-953 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-952 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-951 +525,525,-962.5,9.625e+06,-6.7171e+06,-1.6342e+07,-1.3414e+07,-1.4554e-08,4.3977e-09,4.9082e-09,500,500,-950 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-949 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-948 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-947 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-946 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-945 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-944 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-943 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-942 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-941 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-940 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-939 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-938 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-937 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-936 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-935 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-934 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-933 +525,525,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,8.0922e-09,2.9974e-08,5.203e-09,500,500,-932 +525,475,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,7.4834e-09,3.0448e-08,3.7313e-09,500,500,-931 +525,475,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,7.4834e-09,3.0448e-08,3.7313e-09,500,500,-930 +525,475,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,7.4834e-09,3.0448e-08,3.7313e-09,500,500,-929 +525,475,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,7.4834e-09,3.0448e-08,3.7313e-09,500,500,-928 +525,475,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,7.4834e-09,3.0448e-08,3.7313e-09,500,500,-927 +525,475,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,7.4834e-09,3.0448e-08,3.7313e-09,500,500,-926 +525,475,-937.5,9.375e+06,-6.5426e+06,-1.5918e+07,-1.3065e+07,7.4834e-09,3.0448e-08,3.7313e-09,500,500,-925 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-924 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-923 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-922 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-921 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-920 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-919 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-918 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-917 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-916 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-915 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-914 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-913 +525,475,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,2.3555e-09,4.198e-09,3.9418e-09,500,500,-912 +525,525,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,1.7691e-09,3.352e-09,5.2129e-09,500,500,-911 +525,525,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,1.7691e-09,3.352e-09,5.2129e-09,500,500,-910 +525,525,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,1.7691e-09,3.352e-09,5.2129e-09,500,500,-909 +525,525,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,1.7691e-09,3.352e-09,5.2129e-09,500,500,-908 +525,525,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,1.7691e-09,3.352e-09,5.2129e-09,500,500,-907 +525,525,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,1.7691e-09,3.352e-09,5.2129e-09,500,500,-906 +525,525,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,1.7691e-09,3.352e-09,5.2129e-09,500,500,-905 +525,525,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,1.7691e-09,3.352e-09,5.2129e-09,500,500,-904 +525,525,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,1.7691e-09,3.352e-09,5.2129e-09,500,500,-903 +525,525,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,1.7691e-09,3.352e-09,5.2129e-09,500,500,-902 +525,525,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,1.7691e-09,3.352e-09,5.2129e-09,500,500,-901 +525,525,-912.5,9.125e+06,-6.3681e+06,-1.5493e+07,-1.2717e+07,1.7691e-09,3.352e-09,5.2129e-09,500,500,-900 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-899 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-898 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-897 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-896 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-895 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-894 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-893 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-892 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-891 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-890 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-889 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-888 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-887 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-886 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-885 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-884 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-883 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-882 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-881 +525,525,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6027e-08,6.0936e-09,4.9075e-09,500,500,-880 +525,475,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6876e-08,6.3486e-09,3.6317e-09,500,500,-879 +525,475,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6876e-08,6.3486e-09,3.6317e-09,500,500,-878 +525,475,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6876e-08,6.3486e-09,3.6317e-09,500,500,-877 +525,475,-887.5,8.875e+06,-6.1935e+06,-1.5069e+07,-1.2368e+07,1.6876e-08,6.3486e-09,3.6317e-09,500,500,-876 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-875 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-874 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-873 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-872 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-871 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-870 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-869 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-868 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-867 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-866 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-865 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-864 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-863 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-862 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-861 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-860 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-859 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-858 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-857 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-856 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-855 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-854 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-853 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-852 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-851 +525,525,-862.5,8.625e+06,-6.019e+06,-1.4644e+07,-1.202e+07,-2.2885e-08,-2.095e-08,4.3994e-09,500,500,-850 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-849 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-848 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-847 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-846 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-845 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-844 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-843 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-842 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-841 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-840 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-839 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-838 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-837 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-836 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-835 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-834 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-833 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-832 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-831 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-830 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-829 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-828 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-827 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-826 +525,525,-837.5,8.375e+06,-5.8445e+06,-1.422e+07,-1.1671e+07,2.533e-10,-2.026e-09,3.9873e-09,500,500,-825 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-824 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-823 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-822 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-821 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-820 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-819 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-818 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-817 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-816 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-815 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-814 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-813 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-812 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-811 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-810 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-809 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-808 +525,525,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,1.4824e-09,1.3732e-09,3.8487e-09,500,500,-807 +525,475,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,2.5881e-09,1.2905e-09,3.5733e-09,500,500,-806 +525,475,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,2.5881e-09,1.2905e-09,3.5733e-09,500,500,-805 +525,475,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,2.5881e-09,1.2905e-09,3.5733e-09,500,500,-804 +525,475,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,2.5881e-09,1.2905e-09,3.5733e-09,500,500,-803 +525,475,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,2.5881e-09,1.2905e-09,3.5733e-09,500,500,-802 +525,475,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,2.5881e-09,1.2905e-09,3.5733e-09,500,500,-801 +525,475,-812.5,8.125e+06,-5.67e+06,-1.3795e+07,-1.1322e+07,2.5881e-09,1.2905e-09,3.5733e-09,500,500,-800 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-799 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-798 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-797 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-796 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-795 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-794 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-793 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-792 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-791 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-790 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-789 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-788 +525,475,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.2955e-09,1.8767e-08,3.2627e-09,500,500,-787 +525,525,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.1293e-09,1.8739e-08,3.8989e-09,500,500,-786 +525,525,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.1293e-09,1.8739e-08,3.8989e-09,500,500,-785 +525,525,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.1293e-09,1.8739e-08,3.8989e-09,500,500,-784 +525,525,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.1293e-09,1.8739e-08,3.8989e-09,500,500,-783 +525,525,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.1293e-09,1.8739e-08,3.8989e-09,500,500,-782 +525,525,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.1293e-09,1.8739e-08,3.8989e-09,500,500,-781 +525,525,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.1293e-09,1.8739e-08,3.8989e-09,500,500,-780 +525,525,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.1293e-09,1.8739e-08,3.8989e-09,500,500,-779 +525,525,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.1293e-09,1.8739e-08,3.8989e-09,500,500,-778 +525,525,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.1293e-09,1.8739e-08,3.8989e-09,500,500,-777 +525,525,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.1293e-09,1.8739e-08,3.8989e-09,500,500,-776 +525,525,-787.5,7.875e+06,-5.4955e+06,-1.337e+07,-1.0974e+07,9.1293e-09,1.8739e-08,3.8989e-09,500,500,-775 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-774 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-773 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-772 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-771 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-770 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-769 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-768 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-767 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-766 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-765 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-764 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-763 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-762 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-761 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-760 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-759 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-758 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-757 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-756 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-755 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-754 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-753 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-752 +525,525,-762.5,7.625e+06,-5.321e+06,-1.2946e+07,-1.0625e+07,-7.4289e-09,-7.4071e-09,3.9814e-09,500,500,-751 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-750 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-749 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-748 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-747 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-746 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-745 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-744 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-743 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-742 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-741 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-740 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-739 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-738 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-737 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-736 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-735 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-734 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-733 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-732 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-731 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-730 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-729 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-728 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-727 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-726 +525,525,-737.5,7.375e+06,-5.1465e+06,-1.2521e+07,-1.0277e+07,-5.2577e-09,-3.0772e-09,3.7433e-09,500,500,-725 +525,525,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2317e-08,6.709e-09,3.617e-09,500,500,-724 +525,525,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2317e-08,6.709e-09,3.617e-09,500,500,-723 +525,525,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2317e-08,6.709e-09,3.617e-09,500,500,-722 +525,525,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2317e-08,6.709e-09,3.617e-09,500,500,-721 +525,525,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2317e-08,6.709e-09,3.617e-09,500,500,-720 +525,525,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2317e-08,6.709e-09,3.617e-09,500,500,-719 +525,525,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2317e-08,6.709e-09,3.617e-09,500,500,-718 +525,525,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2317e-08,6.709e-09,3.617e-09,500,500,-717 +525,525,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2317e-08,6.709e-09,3.617e-09,500,500,-716 +525,525,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2317e-08,6.709e-09,3.617e-09,500,500,-715 +525,525,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2317e-08,6.709e-09,3.617e-09,500,500,-714 +525,525,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2317e-08,6.709e-09,3.617e-09,500,500,-713 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-712 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-711 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-710 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-709 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-708 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-707 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-706 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-705 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-704 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-703 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-702 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-701 +525,475,-712.5,7.125e+06,-4.9719e+06,-1.2097e+07,-9.9283e+06,-1.2673e-08,8.1302e-09,2.7197e-09,500,500,-700 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-699 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-698 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-697 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-696 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-695 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-694 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-693 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-692 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-691 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-690 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-689 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-688 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-687 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-686 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-685 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-684 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-683 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-682 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-681 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-680 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-679 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-678 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-677 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-676 +525,475,-687.5,6.875e+06,-4.7974e+06,-1.1672e+07,-9.5798e+06,-7.8735e-09,-2.8248e-09,2.8188e-09,500,500,-675 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-674 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-673 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-672 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-671 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-670 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-669 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-668 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-667 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-666 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-665 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-664 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-663 +525,475,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,3.2449e-09,7.996e-11,2.6142e-09,500,500,-662 +525,525,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,2.8008e-09,-1.5585e-11,3.0555e-09,500,500,-661 +525,525,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,2.8008e-09,-1.5585e-11,3.0555e-09,500,500,-660 +525,525,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,2.8008e-09,-1.5585e-11,3.0555e-09,500,500,-659 +525,525,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,2.8008e-09,-1.5585e-11,3.0555e-09,500,500,-658 +525,525,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,2.8008e-09,-1.5585e-11,3.0555e-09,500,500,-657 +525,525,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,2.8008e-09,-1.5585e-11,3.0555e-09,500,500,-656 +525,525,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,2.8008e-09,-1.5585e-11,3.0555e-09,500,500,-655 +525,525,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,2.8008e-09,-1.5585e-11,3.0555e-09,500,500,-654 +525,525,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,2.8008e-09,-1.5585e-11,3.0555e-09,500,500,-653 +525,525,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,2.8008e-09,-1.5585e-11,3.0555e-09,500,500,-652 +525,525,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,2.8008e-09,-1.5585e-11,3.0555e-09,500,500,-651 +525,525,-662.5,6.625e+06,-4.623e+06,-1.1248e+07,-9.2314e+06,2.8008e-09,-1.5585e-11,3.0555e-09,500,500,-650 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-649 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-648 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-647 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-646 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-645 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-644 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-643 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-642 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-641 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-640 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-639 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-638 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-637 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-636 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-635 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-634 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-633 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-632 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-631 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-630 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-629 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-628 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-627 +525,525,-637.5,6.375e+06,-4.4485e+06,-1.0823e+07,-8.8829e+06,8.6973e-09,1.137e-08,2.5422e-09,500,500,-626 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-625 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-624 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-623 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-622 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-621 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-620 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-619 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-618 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-617 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-616 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-615 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-614 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-613 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-612 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-611 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-610 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-609 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-608 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-607 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-606 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-605 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-604 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-603 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-602 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-601 +525,525,-612.5,6.125e+06,-4.274e+06,-1.0399e+07,-8.5344e+06,-7.1658e-09,1.2119e-09,2.4478e-09,500,500,-600 +525,525,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,5.7147e-09,5.744e-09,2.6549e-09,500,500,-599 +525,525,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,5.7147e-09,5.744e-09,2.6549e-09,500,500,-598 +525,525,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,5.7147e-09,5.744e-09,2.6549e-09,500,500,-597 +525,525,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,5.7147e-09,5.744e-09,2.6549e-09,500,500,-596 +525,525,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,5.7147e-09,5.744e-09,2.6549e-09,500,500,-595 +525,525,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,5.7147e-09,5.744e-09,2.6549e-09,500,500,-594 +525,525,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,5.7147e-09,5.744e-09,2.6549e-09,500,500,-593 +525,525,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,5.7147e-09,5.744e-09,2.6549e-09,500,500,-592 +525,525,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,5.7147e-09,5.744e-09,2.6549e-09,500,500,-591 +525,525,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,5.7147e-09,5.744e-09,2.6549e-09,500,500,-590 +525,525,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,5.7147e-09,5.744e-09,2.6549e-09,500,500,-589 +525,525,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,5.7147e-09,5.744e-09,2.6549e-09,500,500,-588 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-587 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-586 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-585 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-584 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-583 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-582 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-581 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-580 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-579 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-578 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-577 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-576 +525,475,-587.5,5.875e+06,-4.0995e+06,-9.9745e+06,-8.1859e+06,6.0238e-09,5.5572e-09,1.1504e-09,500,500,-575 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-574 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-573 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-572 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-571 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-570 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-569 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-568 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-567 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-566 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-565 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-564 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-563 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-562 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-561 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-560 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-559 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-558 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-557 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-556 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-555 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-554 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-553 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-552 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-551 +525,475,-562.5,5.625e+06,-3.925e+06,-9.55e+06,-7.8375e+06,5.6524e-09,-2.5183e-09,1.1073e-09,500,500,-550 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-549 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-548 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-547 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-546 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-545 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-544 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-543 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-542 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-541 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-540 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-539 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-538 +525,475,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2223e-09,-4.6824e-09,1.507e-09,500,500,-537 +525,525,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2087e-09,-4.6421e-09,2.4099e-09,500,500,-536 +525,525,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2087e-09,-4.6421e-09,2.4099e-09,500,500,-535 +525,525,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2087e-09,-4.6421e-09,2.4099e-09,500,500,-534 +525,525,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2087e-09,-4.6421e-09,2.4099e-09,500,500,-533 +525,525,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2087e-09,-4.6421e-09,2.4099e-09,500,500,-532 +525,525,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2087e-09,-4.6421e-09,2.4099e-09,500,500,-531 +525,525,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2087e-09,-4.6421e-09,2.4099e-09,500,500,-530 +525,525,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2087e-09,-4.6421e-09,2.4099e-09,500,500,-529 +525,525,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2087e-09,-4.6421e-09,2.4099e-09,500,500,-528 +525,525,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2087e-09,-4.6421e-09,2.4099e-09,500,500,-527 +525,525,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2087e-09,-4.6421e-09,2.4099e-09,500,500,-526 +525,525,-537.5,5.375e+06,-3.7505e+06,-9.1255e+06,-7.489e+06,2.2087e-09,-4.6421e-09,2.4099e-09,500,500,-525 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-524 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-523 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-522 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-521 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-520 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-519 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-518 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-517 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-516 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-515 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-514 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-513 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-512 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-511 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-510 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-509 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-508 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-507 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-506 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-505 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-504 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-503 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-502 +525,525,-512.5,5.125e+06,-3.576e+06,-8.701e+06,-7.1406e+06,4.5432e-09,1.9792e-09,2.5512e-09,500,500,-501 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-500 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-499 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-498 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-497 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-496 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-495 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-494 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-493 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-492 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-491 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-490 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-489 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-488 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-487 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-486 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-485 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-484 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-483 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-482 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-481 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-480 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-479 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-478 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-477 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-476 +525,525,-487.5,4.875e+06,-3.4016e+06,-8.2766e+06,-6.7922e+06,5.7245e-09,1.9448e-09,2.7185e-09,500,500,-475 +525,525,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.4137e-09,-2.4198e-09,2.5927e-09,500,500,-474 +525,525,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.4137e-09,-2.4198e-09,2.5927e-09,500,500,-473 +525,525,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.4137e-09,-2.4198e-09,2.5927e-09,500,500,-472 +525,525,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.4137e-09,-2.4198e-09,2.5927e-09,500,500,-471 +525,525,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.4137e-09,-2.4198e-09,2.5927e-09,500,500,-470 +525,525,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.4137e-09,-2.4198e-09,2.5927e-09,500,500,-469 +525,525,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.4137e-09,-2.4198e-09,2.5927e-09,500,500,-468 +525,525,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.4137e-09,-2.4198e-09,2.5927e-09,500,500,-467 +525,525,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.4137e-09,-2.4198e-09,2.5927e-09,500,500,-466 +525,525,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.4137e-09,-2.4198e-09,2.5927e-09,500,500,-465 +525,525,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.4137e-09,-2.4198e-09,2.5927e-09,500,500,-464 +525,525,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.4137e-09,-2.4198e-09,2.5927e-09,500,500,-463 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-462 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-461 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-460 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-459 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-458 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-457 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-456 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-455 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-454 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-453 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-452 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-451 +525,475,-462.5,4.625e+06,-3.2271e+06,-7.8521e+06,-6.4438e+06,2.3894e-09,-2.4077e-09,1.2297e-09,500,500,-450 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-449 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-448 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-447 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-446 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-445 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-444 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-443 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-442 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-441 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-440 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-439 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-438 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-437 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-436 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-435 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-434 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-433 +525,475,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,3.2504e-09,2.9329e-09,1.2885e-09,500,500,-432 +525,525,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,2.8413e-09,2.4755e-09,2.6738e-09,500,500,-431 +525,525,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,2.8413e-09,2.4755e-09,2.6738e-09,500,500,-430 +525,525,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,2.8413e-09,2.4755e-09,2.6738e-09,500,500,-429 +525,525,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,2.8413e-09,2.4755e-09,2.6738e-09,500,500,-428 +525,525,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,2.8413e-09,2.4755e-09,2.6738e-09,500,500,-427 +525,525,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,2.8413e-09,2.4755e-09,2.6738e-09,500,500,-426 +525,525,-437.5,4.375e+06,-3.0526e+06,-7.4276e+06,-6.0954e+06,2.8413e-09,2.4755e-09,2.6738e-09,500,500,-425 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-424 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-423 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-422 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-421 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-420 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-419 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-418 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-417 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-416 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-415 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-414 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-413 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-412 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-411 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-410 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-409 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-408 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-407 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-406 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-405 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-404 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-403 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-402 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-401 +525,525,-412.5,4.125e+06,-2.8782e+06,-7.0032e+06,-5.747e+06,-4.8032e-09,1.1377e-09,2.5232e-09,500,500,-400 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-399 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-398 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-397 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-396 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-395 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-394 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-393 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-392 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-391 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-390 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-389 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-388 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-387 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-386 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-385 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-384 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-383 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-382 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-381 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-380 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-379 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-378 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-377 +525,525,-387.5,3.875e+06,-2.7037e+06,-6.5787e+06,-5.3986e+06,4.6369e-09,-3.2797e-11,2.1925e-09,500,500,-376 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-375 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-374 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-373 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-372 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-371 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-370 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-369 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-368 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-367 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-366 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-365 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-364 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-363 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-362 +525,525,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,9.6765e-10,1.6844e-09,1.9055e-09,500,500,-361 +525,475,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,1.1919e-09,1.9178e-09,1.1725e-09,500,500,-360 +525,475,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,1.1919e-09,1.9178e-09,1.1725e-09,500,500,-359 +525,475,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,1.1919e-09,1.9178e-09,1.1725e-09,500,500,-358 +525,475,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,1.1919e-09,1.9178e-09,1.1725e-09,500,500,-357 +525,475,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,1.1919e-09,1.9178e-09,1.1725e-09,500,500,-356 +525,475,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,1.1919e-09,1.9178e-09,1.1725e-09,500,500,-355 +525,475,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,1.1919e-09,1.9178e-09,1.1725e-09,500,500,-354 +525,475,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,1.1919e-09,1.9178e-09,1.1725e-09,500,500,-353 +525,475,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,1.1919e-09,1.9178e-09,1.1725e-09,500,500,-352 +525,475,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,1.1919e-09,1.9178e-09,1.1725e-09,500,500,-351 +525,475,-362.5,3.625e+06,-2.5292e+06,-6.1542e+06,-5.0502e+06,1.1919e-09,1.9178e-09,1.1725e-09,500,500,-350 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-349 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-348 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-347 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-346 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-345 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-344 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-343 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-342 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-341 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-340 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-339 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-338 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-337 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-336 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-335 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-334 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-333 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-332 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-331 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-330 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-329 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-328 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-327 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-326 +525,475,-337.5,3.375e+06,-2.3548e+06,-5.7298e+06,-4.7019e+06,2.6102e-10,-4.9738e-10,1.173e-09,500,500,-325 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-324 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-323 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-322 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-321 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-320 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-319 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-318 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-317 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-316 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-315 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-314 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-313 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-312 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-311 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-310 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-309 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-308 +525,475,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,2.0344e-09,3.0247e-09,1.2099e-09,500,500,-307 +525,525,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,1.5852e-09,2.9935e-09,1.6606e-09,500,500,-306 +525,525,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,1.5852e-09,2.9935e-09,1.6606e-09,500,500,-305 +525,525,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,1.5852e-09,2.9935e-09,1.6606e-09,500,500,-304 +525,525,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,1.5852e-09,2.9935e-09,1.6606e-09,500,500,-303 +525,525,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,1.5852e-09,2.9935e-09,1.6606e-09,500,500,-302 +525,525,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,1.5852e-09,2.9935e-09,1.6606e-09,500,500,-301 +525,525,-312.5,3.125e+06,-2.1803e+06,-5.3053e+06,-4.3535e+06,1.5852e-09,2.9935e-09,1.6606e-09,500,500,-300 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-299 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-298 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-297 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-296 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-295 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-294 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-293 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-292 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-291 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-290 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-289 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-288 +525,525,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,2.5181e-10,2.8519e-09,1.5497e-09,500,500,-287 +525,475,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,9.0531e-10,2.5587e-09,1.1061e-09,500,500,-286 +525,475,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,9.0531e-10,2.5587e-09,1.1061e-09,500,500,-285 +525,475,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,9.0531e-10,2.5587e-09,1.1061e-09,500,500,-284 +525,475,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,9.0531e-10,2.5587e-09,1.1061e-09,500,500,-283 +525,475,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,9.0531e-10,2.5587e-09,1.1061e-09,500,500,-282 +525,475,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,9.0531e-10,2.5587e-09,1.1061e-09,500,500,-281 +525,475,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,9.0531e-10,2.5587e-09,1.1061e-09,500,500,-280 +525,475,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,9.0531e-10,2.5587e-09,1.1061e-09,500,500,-279 +525,475,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,9.0531e-10,2.5587e-09,1.1061e-09,500,500,-278 +525,475,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,9.0531e-10,2.5587e-09,1.1061e-09,500,500,-277 +525,475,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,9.0531e-10,2.5587e-09,1.1061e-09,500,500,-276 +525,475,-287.5,2.875e+06,-2.0059e+06,-4.8809e+06,-4.0052e+06,9.0531e-10,2.5587e-09,1.1061e-09,500,500,-275 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-274 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-273 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-272 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-271 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-270 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-269 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-268 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-267 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-266 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-265 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-264 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-263 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-262 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-261 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-260 +525,475,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.7614e-09,1.7419e-09,1.03e-09,500,500,-259 +525,525,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.6197e-09,2.0688e-09,1.59e-09,500,500,-258 +525,525,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.6197e-09,2.0688e-09,1.59e-09,500,500,-257 +525,525,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.6197e-09,2.0688e-09,1.59e-09,500,500,-256 +525,525,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.6197e-09,2.0688e-09,1.59e-09,500,500,-255 +525,525,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.6197e-09,2.0688e-09,1.59e-09,500,500,-254 +525,525,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.6197e-09,2.0688e-09,1.59e-09,500,500,-253 +525,525,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.6197e-09,2.0688e-09,1.59e-09,500,500,-252 +525,525,-262.5,2.625e+06,-1.8315e+06,-4.4565e+06,-3.6569e+06,1.6197e-09,2.0688e-09,1.59e-09,500,500,-251 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-250 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-249 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-248 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-247 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-246 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-245 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-244 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-243 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-242 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-241 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-240 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-239 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-238 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-237 +525,525,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.7162e-09,1.1193e-09,1.3168e-09,500,500,-236 +525,475,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.6792e-09,7.0582e-10,8.0772e-10,500,500,-235 +525,475,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.6792e-09,7.0582e-10,8.0772e-10,500,500,-234 +525,475,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.6792e-09,7.0582e-10,8.0772e-10,500,500,-233 +525,475,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.6792e-09,7.0582e-10,8.0772e-10,500,500,-232 +525,475,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.6792e-09,7.0582e-10,8.0772e-10,500,500,-231 +525,475,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.6792e-09,7.0582e-10,8.0772e-10,500,500,-230 +525,475,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.6792e-09,7.0582e-10,8.0772e-10,500,500,-229 +525,475,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.6792e-09,7.0582e-10,8.0772e-10,500,500,-228 +525,475,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.6792e-09,7.0582e-10,8.0772e-10,500,500,-227 +525,475,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.6792e-09,7.0582e-10,8.0772e-10,500,500,-226 +525,475,-237.5,2.375e+06,-1.657e+06,-4.032e+06,-3.3085e+06,1.6792e-09,7.0582e-10,8.0772e-10,500,500,-225 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-224 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-223 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-222 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-221 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-220 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-219 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-218 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-217 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-216 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-215 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-214 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-213 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-212 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-211 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-210 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-209 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-208 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-207 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-206 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-205 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-204 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-203 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-202 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-201 +525,475,-212.5,2.125e+06,-1.4826e+06,-3.6076e+06,-2.9602e+06,3.0572e-09,1.9361e-09,6.0434e-10,500,500,-200 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-199 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-198 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-197 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-196 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-195 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-194 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-193 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-192 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-191 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-190 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-189 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-188 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-187 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-186 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-185 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-184 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-183 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-182 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-181 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-180 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-179 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-178 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-177 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-176 +525,475,-187.5,1.875e+06,-1.3081e+06,-3.1831e+06,-2.6119e+06,3.0927e-10,9.9923e-10,4.4779e-10,500,500,-175 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-174 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-173 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-172 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-171 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-170 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-169 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-168 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-167 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-166 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-165 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-164 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-163 +525,475,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,5.9889e-10,5.2977e-10,3.3278e-10,500,500,-162 +525,525,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,7.1002e-10,8.5869e-10,7.5644e-10,500,500,-161 +525,525,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,7.1002e-10,8.5869e-10,7.5644e-10,500,500,-160 +525,525,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,7.1002e-10,8.5869e-10,7.5644e-10,500,500,-159 +525,525,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,7.1002e-10,8.5869e-10,7.5644e-10,500,500,-158 +525,525,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,7.1002e-10,8.5869e-10,7.5644e-10,500,500,-157 +525,525,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,7.1002e-10,8.5869e-10,7.5644e-10,500,500,-156 +525,525,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,7.1002e-10,8.5869e-10,7.5644e-10,500,500,-155 +525,525,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,7.1002e-10,8.5869e-10,7.5644e-10,500,500,-154 +525,525,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,7.1002e-10,8.5869e-10,7.5644e-10,500,500,-153 +525,525,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,7.1002e-10,8.5869e-10,7.5644e-10,500,500,-152 +525,525,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,7.1002e-10,8.5869e-10,7.5644e-10,500,500,-151 +525,525,-162.5,1.625e+06,-1.1337e+06,-2.7587e+06,-2.2636e+06,7.1002e-10,8.5869e-10,7.5644e-10,500,500,-150 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-149 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-148 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-147 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-146 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-145 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-144 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-143 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-142 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-141 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-140 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-139 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-138 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-137 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-136 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-135 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-134 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-133 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-132 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-131 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-130 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-129 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-128 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-127 +525,525,-137.5,1.375e+06,-9.5929e+05,-2.3343e+06,-1.9154e+06,1.4539e-09,1.0711e-09,5.463e-10,500,500,-126 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-125 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-124 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-123 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-122 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-121 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-120 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-119 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-118 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-117 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-116 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-115 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-114 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-113 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-112 +525,525,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,1.0895e-09,6.821e-10,3.7359e-10,500,500,-111 +525,475,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,9.0843e-10,4.9507e-10,1.8174e-10,500,500,-110 +525,475,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,9.0843e-10,4.9507e-10,1.8174e-10,500,500,-109 +525,475,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,9.0843e-10,4.9507e-10,1.8174e-10,500,500,-108 +525,475,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,9.0843e-10,4.9507e-10,1.8174e-10,500,500,-107 +525,475,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,9.0843e-10,4.9507e-10,1.8174e-10,500,500,-106 +525,475,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,9.0843e-10,4.9507e-10,1.8174e-10,500,500,-105 +525,475,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,9.0843e-10,4.9507e-10,1.8174e-10,500,500,-104 +525,475,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,9.0843e-10,4.9507e-10,1.8174e-10,500,500,-103 +525,475,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,9.0843e-10,4.9507e-10,1.8174e-10,500,500,-102 +525,475,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,9.0843e-10,4.9507e-10,1.8174e-10,500,500,-101 +525,475,-112.5,1.125e+06,-7.8486e+05,-1.9099e+06,-1.5671e+06,9.0843e-10,4.9507e-10,1.8174e-10,500,500,-100 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-99 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-98 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-97 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-96 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-95 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-94 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-93 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-92 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-91 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-90 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-89 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-88 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-87 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-86 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-85 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-84 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-83 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-82 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-81 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-80 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-79 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-78 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-77 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-76 +525,475,-87.5,8.75e+05,-6.1044e+05,-1.4854e+06,-1.2188e+06,1.0079e-09,4.7515e-10,1.6434e-10,500,500,-75 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-74 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-73 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-72 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-71 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-70 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-69 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-68 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-67 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-66 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-65 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-64 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-63 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-62 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-61 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-60 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-59 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-58 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-57 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-56 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-55 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-54 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-53 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-52 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-51 +525,475,-62.5,6.25e+05,-4.3603e+05,-1.061e+06,-8.7058e+05,7.3943e-10,3.2228e-10,1.1758e-10,500,500,-50 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-49 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-48 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-47 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-46 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-45 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-44 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-43 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-42 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-41 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-40 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-39 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-38 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-37 +525,475,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.9873e-10,2.556e-10,9.2379e-12,500,500,-36 +525,525,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.3531e-10,3.5968e-10,1.4975e-10,500,500,-35 +525,525,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.3531e-10,3.5968e-10,1.4975e-10,500,500,-34 +525,525,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.3531e-10,3.5968e-10,1.4975e-10,500,500,-33 +525,525,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.3531e-10,3.5968e-10,1.4975e-10,500,500,-32 +525,525,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.3531e-10,3.5968e-10,1.4975e-10,500,500,-31 +525,525,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.3531e-10,3.5968e-10,1.4975e-10,500,500,-30 +525,525,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.3531e-10,3.5968e-10,1.4975e-10,500,500,-29 +525,525,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.3531e-10,3.5968e-10,1.4975e-10,500,500,-28 +525,525,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.3531e-10,3.5968e-10,1.4975e-10,500,500,-27 +525,525,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.3531e-10,3.5968e-10,1.4975e-10,500,500,-26 +525,525,-37.5,3.75e+05,-2.6161e+05,-6.3661e+05,-5.2234e+05,4.3531e-10,3.5968e-10,1.4975e-10,500,500,-25 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-24 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-23 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-22 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-21 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-20 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-19 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-18 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-17 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-16 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-15 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-14 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-13 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-12 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-11 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-10 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-9 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-8 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-7 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-6 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-5 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-4 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-3 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-2 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,-1 +525,525,-12.5,1.25e+05,-87204,-2.122e+05,-1.7411e+05,9.3783e-11,1.7537e-10,1.3591e-10,500,500,0 diff --git a/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/stressZZ_field.png b/src/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/stressZZ_field.png new file mode 100644 index 0000000000000000000000000000000000000000..8c02e28c42816e646d166e8faa998c76cf7f7179 GIT binary patch literal 406723 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ÎSGVEtoj)vEkw1ft}6| zD*zKg8R|T+$sl;5jy|H;tQ>{Z_ZB_@SDm8qB9BAJh$ zhUmMmV&grpu7GWx4DXbB9x?%7E((F&whDM8GthUi4XjmKO60zjSf zTo|O{6rKQG9heD~PYrdRvR6$F@oZ2H=&ROkeIZu8HRs^}?kE%M18+Yzn^_rK@R^Fa zR_5i%dwsM$9ookU_p>}hg8mbLJTf;l6HB{G?a#-u1`Zv=F0oW5VEdk&MbozKUaAX=_LOLh#MetyBzMEZrUM^#6j`0G{C>9R*+QGd=AxqCQ-ut|M zW;>7&I9d>=^Pkcn{#R*Oxo3-nyD~x>} zAdgX!LJxy4k>fFLXk=1OLePb)zoU=}Bq-Y=8E4~JDcBNeboqF4ZAE!e%X6uF0~yh( z?G7VVtp8H@jr+j-@T%_0BzuK>>q*Vgcg`gDTcu`Us>q`XJ|SA3;N%jQTC2lI z`Nse2L+2ZYEIU_RIi_Q$?xcQ7@WXjk@B0%!Eq7!<;m*Gd1w^p*{N`e`d{!B~EFlKNZ3Kbim|eFgz;VZf#) z!#tnssh$N~LVoW$fc*6kcdMt4^O)nBy~6wXXslZPINv7b;^WY|o=JenqwZN0@o+&l zDEFD6&fAysLu#Ns3EbdbpsW7}LFM}gg31UQ1E68xwQjz!wOpQuxv2ifNbA<`;#K#x zpbx23JH=elYgwV`!b-FpyaVnPYf2^2OEYnz9X>w3@yGq@^z9COZ8?Pty2q&uQ~s7A zPcRB{OJHutyZ+Ah2KNPs1#uN8Bj$vwx$*kt=W-z^3@FC1S|`MD#zeS4AsQuPaBGAh z2yoVja&;m`yx9-J7C`QioMZ8WLW*PFtI{T8VDPyT_F8S=j%^4<*X~|2T)wiK1XU~_ z;(vSplV2(&5um63qU$~9?ZU{v^U?@ocXU5pEIgT{wg5#Y`uRRmF+d^P%zNnWVgsWM ztS2D;hEqpa$*E@(kjg*?SgIxg%eRuappZr}u$WtL zxQ^Kd2WfQIG#|ZYhe;)1V6~#_oa(U zgz`|IzBQ=MvA{wATc?Y_LaRJ}2E=V2hGWUIuj7t8f$}tBb#x^6b(a7}@rAAnF1!V1 z5u%EI1j^6H?QY+GSh;?xJK*zeE_1N9ax|A0F#!coIy&kf6B8=Ti_8PQ&OB_}s&*@X zG|Qi0HyMlfX)0bW^EcZ1p}5+=pEp^J_vg*flh-59D6@Q6WeANO#Vh%u_OPzlS=g2H z=t)aGN?__ATT4FPqw8V&m8{GHDNK^tRL5vg`N<7`YIT4?#y}=tgdMRPWcpb8|@fTLYJdDh>E;}!JCil zLEj@RY#f%BL&>MZjVo@K`05?(zxJ6Qp=P^_ff>FHH#QN7HTSYTajjIujO;0ld3!nh zmDwSn2h4|+5r_v6pWlFfj6CntQ{tuB7Qmp+@&-R8TCUTGY#X>>60yx9U_b>4Bkiuw zN|M}uzE>W&;H}oi>icQ!zc!i(0@xl}5gX$B`+QN0YBecIWn|5=J6pU;e{nj@-!#2H9g;EPRMkx8wz6!dsZP zpCfyb({w0GFw0NtQ^1dP(ejjTQHi>@kxPyvrN^gMhUZ<@&1~I;%rYmM%o>ch^qVbj zn|54IY1T@A+o+qQpj*Tco#p!%P$#ioX0*z5rD9Z}qW9y5*4Ql@+V;6*kvEtN6-v=x z!-3@{@lNw`TnZ<11J_D<AvaV&F7P-xgiSRb4H~Jz(DSLO(&S&)CxgrIlWn_kU=g0yU5@?5N9LvCZpm1+?Y?*%w{A-c$6d(zvj89PsWH!nJRZ`Xg&d&Pftc5{78zJui)qgQq9zNo?nEu1)r zFJK=&qxc$E5lilF;b$-_lwfCwyD^CPV|6_P$IJv2VbpLJ0bOEt>4_?Wq8CE7*Nz~* zKV*noSHq{NqEnHa0kA9}u7dSmmz9mwoqBfHxU%0NTRxnXJE*;4Wp%s<+`wyL5Ob@|dih@WwwNM` zg0_?*31;fW8JCT7G$mvqnISKZZ$imZSIS>?8~Ey za4**4kj2~rNqVHQe(@JSpaR!gv0Fjh@?KDwL5NV%vm~sUKB)4Os5o`X7!>RnDw6bl zc(Y1Vx&hC`s!lda&8g>#6#dyfc}CCPKl~K*KS`hoKZk_xZ4mX38mSzq^zm*#SaIz0 z;N(p{gF)f3iMN0}h|WSJ?7d<(>lisO-3kt_a;*mv#4;cE7#4^J+IPB*dYTsR&4v1qBLT|4{O z%z%b!z-Sd4`btCuK{J9toLnnDY5y#e=c&Txcb0=BlTo74?t+=MCU5#P7cTp%-b;G_ z>3uwtedJ^J)W_E&rAN0FR&{nYqtdfGsM2q)xtd_EZo+qMf0-GJkvt)Itz|*@EBkY! z9^PkZ`euxt=RJ$z+Tsy7J)?rWPy)04W``>ZMpF| zQ2%?3*yh`3kINw@ypSPimj*lPH%A(mS9Oh{p77yMRP42aFsk!I_jZ^ zMIJ$}qdEF}bN_Xoyi!qFC;1B-B)>R{@hY{v3k@FEmi{!MMY0=DlgH@La^v;+vFGko zfkx6fP4C_Y+0# zq}TbWE`rkI`Eds#o$BhJP4xFM-tk% z#Jn|P)Jf)ZxAv;<;p&gCW)lTgs_3O#>>=_P`_;sl&58N}>tBmkMF(EOPM+Px$PEhE zP2Bj7od@%L)WhjM&T&T+CWJtd|9oq|zDZxQQ!=*xXM~DD zo=C&#(wwR4NVD8!^^zOMcd!2;vo5~zNjZE2u=t6wmL!VOY3(%K6a6WaXQz!<>NEv9yonlLC%#(#04f;L?+XJ(&mTz_`6~o0hgv)?l4uXo*;EIR=w} zq08QW%{UWXQ(n#nV*9z{Jj$1gq zMLgmV?}Nx#yt}jH>NduTr#F=*`tyv}_k1lsN^Z?+t8C#j5yhGk$>B7w_xGYsMNo|8 zIU^|Dd;HrZ(Q&f|0%Y!}(@|)9_^?u4&sfyz60macB*z8E=u&veM^UV273*?k;g8{p ze{SW%pa~R9eHGxj(bMd;0tEcx_Ad z_{sbX6OzCot@GSl%o$-_kv3dil3cX{oUG2FnWr#wZ?K&8m^FuF(oJPq?Knytm06HC z^RC3;^NqOMWKl&a`r~cy-lf8cbbvr%i6gOK(3RA%{j|jL0*{8STX|$nqHrz^g{BNX zZo7R_$NB(qW5AA3a9r_CK#i04VKL7nr9R}7QU0h7Ir(eH&1lhbJ(3TyDE@+bH=rpy zeGf1hDkHfp82a^*uVH%KE~!|>JZ7{J?jki_z-0~Q=CJYcOm_IKjk=87YdLZ~7FNbA z)%@r`uj!}1Ueim_8@_eaF5M0MwE4h9t=XLGkqcU#k5W>w**FtSM7-P!9lgAhAyZQ? zW|SJVVuE)(-fn2vwJs}K40$WX)i`q?w-)ed$7EW+7kfNU%qg#pz1(%~q%g9j=Iu%O zq~=O8s^pYX6BDE%DkEf0Ogx7VD=l?5dy1B&X`GBFAA1&=7^a1@-W|7TtVIv_FFZFQ z`LQJnzyFGmzvH2ROIXD^as%s>HWo7<5@(Jn)N1J>niGwZutQc*WTij$r8SWvYCMAUUyLt3UB zF6!NQA)X6PS z4L1bn1)z%*aj5&JzQ`0<@9ynBoQ3QvLoY{n4hHk{<{s$GSwH5TW6sV!2$lMzh+CsF z!h{n*2us91O*WC?p1oqbW>FHoom>4J%Z~k4G&na!EP2%nSfc%c-BPhFiajzs>PjOo zRLze^$lx9ODAAe}Np#n(Q7Z!N4LQDND_6mjM-H5rSh^AB(Z)0a?L9fZ80dx4$ykBN z2FsA;IhXR&-!2@g@G%aVACxKg{6f#t4Yj8Y>n_jcAA0P!Tfw1PuJe}NtI2acH>_`8 z@4v6>^2p{kezfUh?HN@qVVuL?71n8 zvh1x{{S}x0+Wq@_g$L)7UVIyC^7xjy)BD>*Lw?`f_cOtS+Lk@ZSgg3Dt#bqB`4m3D z2P4F3^fu4H+eR$4sh^Ki-GCI`$|Z@s1e{Gc)-rqn|EsG)ob&umR}OL#ISWommOkVq zi-!4G$`#4t$T&|E)?FQE-3XL!Pav>qS=Ni}c8rz9My7BCNpNS~B@<8HrDRYYfqV@0 z?VAXJ#?RJOYOrw@dJs2IkMVA2v`Va*Orty6jFT;CD1n&+GjO>jkZ*yyt^dG#M zdgN`%f$^zMhgUEe?#S~z_Wh$r%_VDx;C7q!J;?I>017G zKj_}BS*~bIS2o;#>yT{a*`JB+MeU(+o`EOpQR+Hl8X1aC^ba$$B9DTzJwLWw(SLJB z#55;(Iz7Pd{MwCs5?T4w|9YpDt2vkb=95J}R+(1YRTzEOR@rawioY#Mr|gu)wd6B(|*Ry{w`O1^%&Wm-X=M92T7ZHaGWPWErcuJW21j@C1HKD zD51SBo0}!Lx6AIkPwq*^=v~RgE=tlZfs%N|^8^WNu>Yc>Q75&>DGT{)N$gp(rkIgl zZse`z3n?wF^y)Q`TH`a+Vf->he#^|~z}t&cw?i-0tSpU=k3HcvWe}tayn3G>cM>46 zG$}MU22Hja?#VacDet|wqc1LWF@JH`VI?tiWuco=K76aPFFSA~fkQ0FQZ#sScSDYD zO~*}J>#DeX!?+>CYHj+?<$X8yH*jrzOsoo=Nr~hUHklj$Cgt(@@p!#NT)lIgw)D;m z>k`t^1i-?tiom6_IHvy|oOd+EpPG}@y}m|hE&RB*=hh*RA=u=IJ#22*U753(d*!g4 zH?qa9qReOXvz>k5PZcRbE)R`Up$%x-^IQ`eG!nLsnQeuxf}5uk`uMnXKY1QTkwFfD(^?jpBb&}!E5?k2(`|G zAF*p7`zTMtOg6XRxhyv(|A_mb?FZE+;<}@+O^q-rx7;eEe|#glVSgslB#L`03Uiz9W017iypL{CI!QFkouv zY9H!EXs>s8bNIvrE52{0W~Hj4#_!kHwyUNa(v_SeOB`yl36v;-g-cF%4JVaeDVhn) z&3)KcKH1Br5j>k4RCDZ{T)?uiztWv*b5i}K5U16br1nm1g21)sMt!MYj*@j^r<5AZ zA}=+iN)tR!K8=0yfVdON;sS0jspU1Rj(@JvS}9yHp4|l7qP~+wjmVoz%k{Cpca9lN zMbXF}pbjXF)vS-F=Jv5{$0e)UVjsf{2u}Ojlj5b%*J1P3_TNjBE8p+$P{s8oCm4;K9lC>$Qe#Atojl%3NFZHt#Rl#Ky(Hm#fVt&As#1<)Fo1 zFVYq8CqI-KUmpCNZ^%3N;r@-u!FI#>>7T=E>_0MTtWp{p2QD9o>pU+_hgUdsNagS% z`uc>&c}L0Gk^}dSJdMJ)74MdiwJMA`PBbzyvRvShM`;I6??s~&?&NltxmjJ?bM?Y} zm$a1BwL2WIQny+!$i*9#9(~0>Rlf3RG^7ZF*5VN2RSd`rU0Dvv5$n3x|EwRE&r96w z7=*rf2mZpa;gPPxx0<$@sYd(W-ZOV}U(WEq+IN+$e* zmI)&a&Z7oy#kZ(!EDb&-c)}x{E>+FLQHj`1gf84ku0628cX^+Xje7$Ny);T)70y$~ z(kedRiUZa3Gst5{TAoV81-v(tQ%g-(MH1LaaIrW0fn zGW&(&eO2H?%?WK>+EUyprTmp^McIjOZ`zvPJa}JHQ}bYknuo&e$Kx-d$3*4aEBEfd zKFuOG)L);VpY8XR^S&5V#=;L9i5%n>=A$(+SD5sW&K^Z@QUuu$9bOoGF1_4 z;@Fn=&kOI?=W1_GSl_CTbBXcDwpD9Ly=`_W^`j(Ee%2Fczqmpx&LN#yM7&Y0hGyMo z15^i=Gx3|vLMAk!4=CW(8;{+SOdX4Wn*yHwAokHMJo~o^;dMrkGW+CRbrk4UQD+jx_6YPd5sL*>NvXV74rzj1D=y~tzfcChQ(G|e;D zkFR6a=?DpqY3Nx!fiiV;`0dTpi?d!xKZhP?i$DkM`sH7;_gdmQ`Gb4mn7o0Z`F{2{ zl%KV&rR(Z6<5)^9gw@K-@WT1`8SNMk*{WV6tYh~ilc3>?c?BG8FDZSpl@hTnA-Kiwa_ z=j0|hqfY7vFqo}W%N|Whbc}XOK5v^O9sOAfUC;V_<}4Pov}OIcG@dL9UAsydZrzLm ze&A;dHC`H@YzlGorT5qSUBZ5)eQvrzg&P_VT)LxvA%DD-3qz4Y2j^J8-3Lb{xw>?@ zaAGL7SWlqzv>bYc27>T=OZcxy?tweY_X=lYO!194D#LMM`e)lsTQ!y8n!VTd9DmAk zkl-08`B=y0arQZ}`!#n=`aR09Fs68AJF`5fvy_-?D z^l!leotFb@J~Ry)QtUn5{SD5GBFZPzf@VJX&L3#(r2VX!`!1ZW;aw<{I)-#3-(FsN zgJqMR_(wmyE&fL8)`mNux*NtH+9wPen+FkU;}bRB$o2b#mdPN81B2X=7JgdtRc**y z^%q8I`I6)DCCqm(0Gc=uA%$P3Hd15HAUCkAJ;3B~7WR&y8Tyl*FDhd7MNw~{y^SAo zOQue;H6!@s7I}Z``ilBaiXz@;a}%WBI*H&OWZb;-(i%SLi!WcT71{1?;0e^ACG= zmTOqGEAGY9Y5SvLWQbnLkBgppc%oBb%0EnfY&3MmRs|m;q+)WPCt^)@|JP^HCJ)Fb zYPDy&@~6e0?E{#?z-1c#m23+d{00!om)r0gY+o$VSsPt_Yl?d?fq-=Q4;^B^r&B_bg@S~Tz z3xb_uMz?fo*Absfukm~8kwuevsR3BW_9)nXv$2Y+I0k6|%esMZxtAN=BkTn4INJH5 zGFBR&rv5@OXeZLD3}e54FwCHaojbL6Lf_MG;pamsX=wxbJj0zkulcXIG-toDjcmGV zn%WU~2#&-cXv&99E(j_gD`xY?atf?hgiig;j;5~e$Nu+3bb{VJtj}&0QTHTQFOHke z4dlli`TW@bZot%WDYl-H(5)mEgLNeb@0(P;l{U|)hgQ`=c7I9Qr7P9C!bx7bc>OJZ(%U^G{VB`Dz^G9F* zcz6_2jiz4obmYaoY-uY$y7#Ic`?-6%6+>xA>3pbOt;8XDLMh}y-O)MvHng*(;@jN4 z_IxKASsD(t%=U%|O69w?1X;Rzy8%w+jC09c418T+^>@^J(fgN-OG#%q1M5IcRh z*j^=DtPpz=*0Zvjmq1ZA!URxhnShWYwScH(&xM(ix_=7G$i3;y04T@g{4w^|N6F{; zZ+%4#q-MFc91M_FNo``p0y#PhISo742lBD-$4gL1%=Zh$T`%gU;UXmkr`o<>4^O_| zlcHdE{o!~DwEQn!a)PCwoaaqNPQKR}Dp!35+Y;40?ERsQd6R~bYwDf8WmmcRiX&VC zPLK6a?!z+nD7B!%excsw*wnw!dA2Z4!uQOHi)q1i@c0+8e37qTzjkb5jl$c9tD+wl z!5eTxi4FeCFq#auu3nn9JtJn%)yFQvDzKjBOjK3fAN$azCZsB4owV{lOGX-3(XN*j zaotJQJ09){#fk3yp(MCpH7-UqL{QA`YB77~J+65b!}QyMd%x9v7puJU$g&#sV*Bbz zc!Y4gjODpV@@tQ;BBA7M=e`_O*Zf-O^ut@vU8T(!bIyzbaM8|e%W<-YN(xgPi>Z5X zs(X*BKNAFBr)&X?*>qmr@r5}g8l#F7d+1WU#Y*h>{wG?HUAw|eeiy~B_ z>}!cp*&?)9LMWs{wz4nJ>+N$tzq{}Ky`SIj`5n*m*XKAoIzC79zOL(aov-seU*~m< zsON5Hzn6gJ!N0HH?iYtQqB9a%aM?KYJTH*EfeAK-1Bcxo96DD0tG;^csiFGlgfjPDgJ=QeEuk!&$#OPj-=CschA>_@b>8u9^0wKn1r2(%o#r{& zad=gq;aC|b-hH4MiZifa1OYX$XJ`6WCil&;n}~PE2Wsq_ z_#Yj9zjonk>+aid&4j+9-CKLrSt~Pk%T#5Kjbt)Yp+ynQQC;XbQ(SP*% zAA%^6l0l)3)_t0>n#!}SEV|t`@cg2u|Lohn&XfHwF6A=lv*Z#(MN}ObdYE`%(!rr1%7Xr3>TTkSl*#Xr7cyF zy%=M4dRM)~L!f;(QI^{xWlEkn7Ujk8V~Gl5d|d}H>C|#_*U##o9l0`JP;J)&Lv=$= zytwpu%)O^1Zg|+qw|BTHp~E#INyc*L<3VWOmiXVA?!^DqKqu592u9`Ys#X7Z$BB9i z8F_8P(Ri+{GtcE4T?C`%?T`}>M3&({J#@uH)WEv;NUZ8tuODxDl z%esObGLIV$0YST0Hzd{u9~?n^RD*o~-*r|Y@hV4%eBFmxv92QRX!^7-`w;8<2sE8W zrUq#I@LcKtWepgGy3(4)ZKtLN3TGmo$l}`fnu(c$!2tf8#xjhzqo&Ko3`p4$p@L^@ z>zIs(Ttj~`ST^riWfnx?`Wx{~Oz+>=eR?vv3kM4R0Ki5@Kd|a5jk9x9yRDny( z4e7_u4RJ?s*8*GQ^d?cdx|3${^mtPg|8A#0KRbM8hV@^VFHvi^%i(&O}G; zU7mbl$;K<2&HKBMxc)OYe`hT!Caie+ogZ!YFMGc)%;LO*s_%}{!h-eiRwWIe=D(bRrWRi7wIXXvVt z2R;vEgmbC%{0MRcz(YK4m?=t8>TcH-yjqN6J73qbB|ue?Nind|jzh6dr|tywGbp{?r?Jdz)+*9}wT&Dp=Yib(;zl&D~TVuCZul<{)4 z(6Qlnu^)TAR66s0r>6L$xfXK1bLw-mxq9omivPbS6eUKs@hv{$0*O{h_1POR=og~Nyue7hG|a6 zUrRR1Q9A-_A;`px-dMCJ531@X)Z-sVDF&78IDvB%oB0{$A;^!w108Ci(Oi-iaWuN;w^YD?3w*GIwCRCByhNF%7~*+Da}xwY9g z4TXu`a!Z%>p|k!i3y1!!UEeD6(UH7|v8=VK&ig#ywld@1w%u!cJ^N+PeQP-)hj-;- z+*)>ilXxT=JJywN`IX+Ki!RyGEsoaX;xj?1G7JHt=*s>6{tljpWtzhr#}W0dxS7P* z#xYUu4E(j{lhroADuy;!PF61`nzmQ@pW|0@3hxo_&PT0Z=q_-0e_xv=;`;TYZ#NYd z7Al>5jbDVe!0|dLe0IY!GUhX5)N=%w6mf&V%)w<3NCu*bJP1bgKn4v=#8pE z0FoC~u!BaSNuc$Z9Q1$+%(mXofq*qLjHay)I51-I2-Qf;CR5XY?Jl^DPb5Nz1+u-G zA*h3jcm!FK^>ok|yf*}l*jOt(hKp?B@t<+iKJAZe!ok^FWI*xKI~{UP(K^@5(+yC;r}#W4G( z(qp)otxU`3r0?;tFY$Ix5O@o2_Gjp@OP{E!5O~y%fRvFW%a0YzXT&hPQxog`^4pxs zDD4Ff+TvX4b|@bP;O>r~+A}AfUwA4okE%tTAL}%pIB@pd_jZw*Ip(T*(L*<+J~{SP zc>lavJIeZ&xg*!oGIP`1ug|&Vr~3ZlpOkJIZj*1Edk{ICuq$+Uk=I+P@Pa?T<%_KS zANpwUXF_xR}uQ*e8k7`k&C53*E!R#9oSiaj(Z`RX+HO^HvA2t;#! zBkkoaU*&zF{|#-ey_YLXVELK-w5@@V={{#V8M3Mo-l=}HI=D`87&t*LzLfe&qi_2# zpiFQ5-?7Iy7yzqJC(qEB#nD$Q@A9}!51c7VpwNo@3r$ayx|xe((#=tk^S~Xk`_HMj z1~t6YXk9rZuEDz|B1{d?tf*Cgh2DRHy|p0UzNVU6&~!8=jwP0bka{B4-D_xpN z2^BKhP{9(;$@i)N>3Gi%25S0w32DcQc?r)k3kgncdb){IZHk8A%IF~csB*u@U+ffr z%L8GB#vA!5jgNS)HaEKqyh-p*G8beL3prxW1_afxZm0xd&q1;nS(K?kz)9#vF*_?# z%o>fgR*kN{48`1c3Y;%2Ik<%v5i1jsLfuD=pXGFnrBskcj3n7xNiT)(UZG}K&$WgvoEwI5r6Wn z;Q$_^hh|+;!hX>MlMwNUJx(+ZI?=xRT9V?BX<&P+?*4K%emdZ zApY6+egYw0*@~MEP6tY&p6O%7CXT55)9O(%PyHJ@t-XG%K|=&9iMCVZj_YnAML~qG~*~OVjvJ+fP z#G88QJ!~A~+)Tr$!9<+wlQM9Xv|9}&;MML3 z(JzT4%>zT#7owf0+;}mr!3(qM`P`Zsa-28Onu0$*+~Q_Rhz<$UmKTC20`J{zQYw*ICYX&GrMqv7CSeTn^(9r71FX|@u)U2}1UFx(^j9b&)mOx^% z>w~`gvD(PM;3&5?kVPZ!4hbi1SM|}mrR4lEF!>|gV`-7y-BzV?J#0ias_@s+%&+TT zt_ddxuM7$MOum@UX^;Z?DPFLk{YEm{_M}aFk+UKH!Am7)y9+eszB+oZby(V)e?^tm zUH;MkV%b+83+;9ML*qL+7g#Ry)c(O5GrQ6ljtHQ)XlMiFTMk-p^S2y{`1cLAcb#vZ zB_O6fXxPBtwCK^%RWx{OdggeF#f(v=fLj(5_%KMQ5-zeB@fJ>3H+!tUtL#XUYy@qH zgeDXIu5F=&{h|;RL1!Gg7K3Zu+)3#umsGOYdb?1FJ^;xkvg~ zq-m>fo0RUje(NaBl8(xrh&FsqA+YIT;Tc1aR!|Yd{)*o{6e>6lXJ{Ac3`tJ7;@Y(c zrX;U$3~x>#Jbgj^5{v)157USS^MxVuZXRzU{^nUO+3h~lid3*nnVwnycE{5o|HO+d ztuQvX`*R>{mhSIeL*(cE%ggKVSc_!v+HBegFr?4bKuUJ2eUvzNhAY zRPG+9po$S9t}KpftUu=c^OV_FtbOezNrkts23SMoE@Ad{t0i>zp>B;Y)QMx`j%qmh z$!BBo(#K1(dlb?FW+L1;{J!0C$pStksO?Yi`h4)ub9BRil{*6~x~rFIV>PQ2o*jXm zs|$R+>ud8hmT6tkOuR`|J!d9^$zluW7r9C%G5m0PqOp8{7*4&t{opo7dpIfrWsG%Y zC!eePgG<{s&XcQ&F2V?iOf8Z>(7P-`d!_5AUn+hQ-LR~MR<3-AnOVI(QuKYXY35YS z1*Ou{?zhYyg(TzIq~jRA-U*1Gs|?&3fwQIHDL@v~M^G_`Bqb&q1?$)&7V=f~paIrD zE8hfPppO=s7IYz8fAj5u=M|>cG`>4xgGpXuXm&$V!Esy_42iMIgBvSK(e*kPj(~Mr zZiZf*LNF8Zs`X6OBp@asM+2+{k0!B&7o8hOgA-{tJNuy7XPUvK`rP|Y>WNbQ!}*_N zT{;8LX{$a`edbYo*8aJs#Zx<(=FYshtvH#jXN)`f%AX#WZnk`4TD-VB5=g7#z#i^A z6Ftf}S)OtMb=gZoy;V#Y5c+Yw)+Cvf{l%+rH(I(p)A-%4Ju?`}`3C8AOHnbq7Yk7_ zi*uheN#y7?Ah?EK%=aI2S<2K$O*#%T=x!zCY{aA^XW^)Z62pS=1bwgvZ(6+G?HJPp ztEFK=)zEs)01^B^c~2Ukm6X@7Dg4l-EZKVWmKjG2FeVn%250HPp`BiVera>mK7fEYw$yhqTzF8cF3@zt+SHf9^@oc21OIqK z(99F@?*MJx0^v!(g*Hzgt^Lk~XRZkP@{)N~;RQ=f7%y)8^7c&E7KZ!f`CktxgWTtQ zlO2jQH^gupCSvfKugpkfN?LOHvP3hxT(oDrugon_>mm;#CM!7%7JbGRhF5Z|GD%VS zzHH}!X~s&qAp1c~)XGs*FPWb90p2Oo`?S&zJA(M=+2##1RU+1wewKzq52-E-wjE6O z`SKf#2pbl^M7lON9y`orT3nKqvx`~2h?dapgBx)+wZmh#enu*NMJSGd&v_P!VGB&N zBSBP*0!ecpx8})IX+lY!_^89aR@Ed5JXDy2J!XHNDu_u%e22YwLR8?_17dwcF^%bE9e3j*;{h0)wuKAB5LUmU?a z?#RCX(JeJS`xB$$>0$TBygTGNaxBbe$9H2s_Biq${MO@mgfH^jmtipR6gf6*78fN; zFtX99%#R+U}aP;5C2$>AGzrrCleEx#VhZo+_eUE*3}2+GZ*|`!|~y^JA3o@Hw(Lbc2r{=n5@cd{oas`9Zxf*KL7FIQSS9M z>*7<7Pobg+ATlU8tuFmBup*y(xpyESlXtXmU|O|c{XoDC#j7Y$0$dT^J6>u6YE1f0 z8$}EdMt4+<-Px!7U(Igce_roJ{_664Gr*DDIrbYnR+fRt%_&}c(I{f!#nFpIF z+|(cs1K;rM%<0}z z6|9)UL;_hTJU3equU0|;W7w-4cm!xHC~EfPD=A=y2Ih5!9LNdu(tslmU7B;x zUcCftpLYVjo5FA!SScB$ogF)1@og&HJ&=QH0ke5hFWw72WH< zBgG3AUu_)}p^vjC?+f}ahvGIJW$z zx!NSOp(^vYBt>d8^&5{3kL^8?Y^}Z2xMyfvgY=)AH{EXHPEHR(LgH|Fk)Cj&>!F?` zvy^MtZgfqtcN(PL`bO`T$`nV(fP#R>UeIT-dkk@?fdPU@sAxjd!{t2LupZ#;`-l&v z&d_$iZ4d*jw@UWo)jj{5&Cbbh;$xtw8Z7nhR@5+hNHDJO`bw=w`!I& z{MRjmlQ@HXyEYAJhqeX##(WL4U)8=Xm@hJ!A0*BxsOAydOuQzM?`Tv+ zcekUeIoHi{%ziwRwl2!biEA*rl=>iOZru9C#gK-|?9_KxE~P$!>EDAIt-mJUKZq1? zG%Y)8Z9WjQdvw=VV(REMFPe^bi8^9NJF0}P*LT|ED#*aI$zFB*A}s7U-9I+!3}E~{ zc**|U^SZDGe!Y=UPW35e5K_yumzj=BO!?PZuK@v`3_e0-DAvmacUD&sMmRH&EoxSk zJ`dcK$(hXR1Fp1e^W0=NGjefg7vk_N+wY z#s`WtEvja70`@8CoY40WF;NarE_^56lJm+S7JvPr4Uq(kwPKn{;)oi{iAz_apl6Nt z#%rEk_7uw=tmY#lhwf_Joo-) zxKPwd8n!}6=573?n8eD9-;zGnEIkkSoqO52)pPx__TqT?`mw6@JJ&`Q2l^BogU-c7 zE&Tbc^rm9FyX}pIjvdz}*N>T=x?mEg@J%7sS+KLoQYN_>?9u+8sr9Qb!`Pkcu5bN$ z)<2bBNWT(dgwn&DU||OaWiOPl3_b~ra${s1Q5MZ)}~;B4nB=b}wk@ zbg9*^2k#g{XEmTVK#VhR!WzLOYF^9$=}|2v)2hfRqU7`kT_8-vOV4yACnjzwt+>%J z#a$H~zJ;)J%D)nvq2eyBsY*aP7TiX+2kg2qZsk8!%hI8KwVM`L1Zvl(3hzvTxVY3* z*%wyl?u0Th~85F%OM(C z>GLCFd-pSIi<7FXfz5m}vy*bN!mB?$ z7Kit8Hn{}*e|zXZ_SgPX4*I2`q|gaJTVrNdvYS5 zLYoiaU)?9VgMHj;1-DR6@0Z;9D|lu4kol*W3ples>t8s7O;d_by`8Bto#fzc0FU95 z9^svqc~AOTct6*yEu9(o^vBP*vx0>kTmHqrkalB^zP7rYt8*C$N(+qax1sS%W8PZK z>_4FP!HxRu@mJwxPWIoirUg^MZ3pKY5m3hu;#$0H!Fs^}=Eb(Y;NRbml$u=n{r!IZ z=@sa`lJ6b7oYO^{zqByr(9ub22>2Qy`SJ2Z`~A>M>#?XQ)lx%+&Y__{nMa1M2?v?x z=bNOd8;}`8L!}vZr1ws@^!`hE*xplZ-WmA&UQ3`)N!6#_`uE&zkLhDYcW#M|LoD4_ zV(+kBi8_+R{-~78l!*9-^l+>;h(-U0TK@>s0hI`1pEpjrzK!eyP*2plkm!|K)%p>SjNwf#Y*ky-IJ2n^tDo`1OF#oA(ENnk;b@wo6^9MGKak zZ!%yh$09!_e((&)w)gL>uO7TyeC`D|Q`x7Q;2NZ}Rb~Rao6OH?ux@Aa-v1oJ{0*U3 zj<3dv9?J1w<aASuOxWlDwD+*SiWjyv2*X;t0`MpaToo8Oo`Pq)o0)g2GYH7!J zOe4WhVWFHacbE59iv0&v{{aEkDb-gMoA8{jVT_tv>VePP+GwuS7cOcnLc*E61sV?z z-_6O|q{rk2Fk`R4f*8H$dBVOm2WOK{fU6_*Cf1K2quPb1> zVG8p=&v9{?!y73A?xv>p@kW_iOFF!O--j(;!~1r9IwUE3#%pQze>`@@k@*qCElK~l zj_Eg#{s4>4$|1hQ*=@{P^ogAHo%|HI0(K4cH?LrkFi%OTJ>&48GZbnh)Qj~oY!xOwC%IEdfdgb6pI zl2bQWP{cFxY1+9t+598}WTX7n)Pc%#kB$diGon3P2Q}w#6MObZ!vZ=r2{>`6=5BE- zaKoFre7nX|brss}$92B4U$4nU@XeaXOLKCft7+h5-A5@=U~nq*u#|t zX?6NU!v76BvrafKx{n1s9;dW{R+2ct%w0RD>F8YhN@sXzpid@k?T5py<+klyuSVA! zMb51aU}l=u4-yR{b(;H6dp5OgdvW)4P%f66$!!kW+^4*E&vfL7>+9?PYzc&aGw)E% z!dLdv!9H*+m!j+osG7dI`>~jEYTV-6y#r?KLr0DrabtQ0Qyp$`J6!7RP1=2EyT24R zM%OL(Ri4XbKHu_lvh(R3qkC%B{Xxs_;`-ED!4y{o#@IDKQy3s9{eGhGq)zE7T>XjN zwBor}tXWt!p%WMZ-m9F#^01xq+<5VaNQ|;GU3un_D^G38Ewr$_6JTt7@|rUoD;%_N z|B?ctNWO%zswhQ98FKSqT3<+2pKaNlBk~o*tEG2u$yzkq>E9nrWa6+BtYBxeNaHEl zG`LG+_4hI6`u&66L}#k~m+8X%qeqV>rqhnFp6C_u==v9DOHWd>kI(vvPn9c%)~d7S zi>@EZ{*QeF`M22}1^@ITT>;QF;5NWl77i}MtlMvOWg8*3JCQOQmqy=L+Y~UdqW}V4 z6(>mfGjw?IV3XF1038MVUss{`E)_%P!%d#4M!k;>0lXguk(2fOerHKjka$EVW~mJ_ zUhNCr(m^I%xnMek0hFeq+8J;A0IIQS(ag`{`F0te1~+OeMGe{nQw z`>!|Bu>P8hzhgKXEyZ)2tACWIQ3}AxSZaEM*%K~cqw}dF2w$sgsbQvgF&GFDWV)w= zOe@4%RS54s6}7*4KyKfiz{Xe+gM9_{eAF+3E)^`?oG)3wt>)X5AMRKj@-LvBs0j+} zP@?S~_r@K}gO;6~%9!w5B}glF1+OejyS>{U`ITR_SZEUyLHgN+i5vmmf*8c_)PK1m zQ?@{OuSZ`t?++FZK6rR?7;F3W&sSf^7N&l7`Dy>xd@KR-)BTG5OzRiG75K9-l^esm zx(m(p6hpwaThSU`It~`;Mhmb7a7^9o4)(kE?d_fBa4u1&UwxGZdYX=!`#`DZ``cn+ z``kz8u<(B3^RB$aQsLG_6G@JQlxTa226F}RSIwgdTwB?120NASO!{2FyLY3-E@JO& zQ#_*c_5#ZdZLgshBR7wakgYxC<(E6YAQo9DkJwyiA* zFODm4zUgvyYpmukzsSRM8(V;n);XVVjLlv|>@bN~+U}9aEz%jSrVZ8;blw3G`9UN9 zD1nOgwdD@}b;JR&9n_n*eKq~mxHYylkKm<};{m}i>XoH^ZL`~#9r>ItZ3Ey(n*rw6 z{8!cNVgEroi`iu~?+}pjIjvO#1rDK0^Zc81#aiwiw3*lz6?s!5xcZWus|VhaR1gvt zv}bdAM>RhIv9|C-RzNtj^z6^l4`^tUJNG>_+%JDxp1+a#HmT}C%m4PL7f zaHn-~EHcS)@mWr_1+N`jTN%}WS)-Y4r2{@AZywBvt6x*7St$xw{nPa`a997o=$dCN z^BZr0J#_M6Y0;NrPN!dq@04CR9^}E z#_C}+NoPq}o@Q8GL90PWpTO)uYbj$XYBLo2zVjgl*t#7vG;d*SNVW5feoYZ@aXjI; z<0>$KN5E%Xf7XmXOyuMnND(1qQMS!XaKWM9f?zK#)p&<2Gvm!>6N_L5Ew9LSrRX|Kx+;hrXR=m z=ugV)<0c-Qxz_n!GiIX@TuP)Uo=uev%E%5_dbB(;8%()L@v=X>IDTWj(Iq(0v|9f1 zWdrOrPGO57yrKd1>+1+5pJ6?7hnV8`FFw8>YB|@kn6}sR-u}oP#p_4hW84B|4W2Xa zo1y!yxE8Z(Gm|J^L4IM{^fM8S!9cTI z3*%Bux_$0^l-<`mm7#RAmC;gH+GVHQk^GWK?Xj|N3n{h1vU7I&o_K!GGMzoZ2+_?D9tQ=Ku zT?p$-y7^wIbD{3wT?!#=OicSb^Cn~$^bw=d>=dgboP??ak5}p)Z^ks}Afl^e1%-M; zL9v%*#?_w~g+oJZ@4x!iGqLEljUxWPWmli_#+_P5VPS-zmO12vU5{aY-i|E829@{s zjoI%|3iMjR^iSHOj(Eel1XH1^^c9B3)O~{~3*8I9`X0MYzL5Ps6csG{(Q%rez0V5V z-Sbvf)tCO{^uN)FWp3A{)w#jdc+S4UOY@-pDFyYRKlkOB+RDLy<@@kpR*1M^a`rBc z$ZZPAa5e5cjh+l#Ut9gTYFiy(t)W$qX2KYA#IhDBOyBeypwC5gk+m4rb))!Y{(QlF z;YrLS%X>8M+`BAV8%tT(_bJ|W38AA$OeZv0S@TP;uxd>wJtKIMU>oxx74>pG6yq2=IFM3=% zyMC!q_TF4nRcB_jQMQeyE(pIS0tLr9vGe>jC7IDE5>wOm@vY5gB{y2hGPFiR_wgJv zaQeAZPe$(tYfJ}Z--`%M%W@^Yo@%$nop=4RbMwucK6J434NGqBuI0lRV2v)o zBnqqZa|lt-c`3cmV}y` zl;)-cEvP>8{?`rAmDd#Ga=5wh;6PJrlA&``)Z>{;Z5JL=OdpsIN}wePtnGSar6_?- z^f6@)BKLQVsz>w~eXq02Z>n!|6%v%Z_KI^{3EgzdWcC3}J$(!p+tRh~T z3k9Y{|7ft$Wx!*MYJ;U=(2Uch2u~u&@JR9nnBWA88(fcyg7_*tmI04&L%7&y;ln)i z(z}uoNWHe{>e_^@#fFsZVmX00z!gX6Oa|QePOU)+F6>of_!QCc_^UA~3O>9EZR?k6 zT9)TUi>7M(xL$>@oNMZ<(GWW~xe_C*V6Qz_v!rqd8CHM)H>|{Q*VdhL8F{^SaAvh< zYtirMZ6neB`fjP<`-n4-Y_tOW-K0izGE?|*5tlX_Grh6vuSms#q?=_g3j^em_mKPq zzWL|SL6Tu2LC8OuC6%vcen}sDqOoxwrh|+^KqabOYw+|H`i@Z~SRfA1JtVeu6IP^` z<*eU!7oe#ICon%)VTkKw0=@^)fDXwE?UOoiC@Mv~GO}s(q8f2_@)CttJ@J6gf{Dki z<(O+uzXsMtn`K@%u61ps5|sYyqH5SD7;bBA{_%>%sja@WXnf+w%&D}^r+73+LcSPc zgG4#QFaGw!A0%lhbDMQJZX)lQ4)NTMRWB3c*tmLaSjR@ShxQAw>YA%G2*et_6nO4n zJ720s@L}gNMJ`HKY`r^7_uMbou;7WbYtddxvtiL-R#uj)TR7NS3_M+H>hTZhV8=uC z@_{KaN)qMq6%}4?XUVOp%-?4p(XR`K@~VO(Iq^vc>g zKjA^`A1a^yE3nP2^nbG^noeLIs>Qmk{2H$eL-kts_S``bNxe$vg*k~38jQOmt~s?0 z>%bWi(|P`d+jt@?7=?+P5EluM zpI_0k+7PO=-hasX-TDk=^ZHx4*|pUI_(a-889q_t!FQ3t7Hh%30Xvygap_0A?LOb5 zn1+HNg z@em}3sdFxwLTKFwuFd+%vtJ-=<53`EbJ<1k(8lFO5MTc<9khkmkl!!KRM_aBlpj(Q zHLF|fwZ5&+YFc}(XBI8QRdHb`A&VE+Ex!%?DR`27^w?%3=0+m&Z%5=!K-M~Wc9o=U zZFiG02PUEMcp)>Hb$*w4hyk;clNngr#4gh$u2Drr8vhKSm5XYQqmBEBG4z8-?FNwHR zaNIi4tfJFo3D_v5a5;t0A&>`oU1ePPj7S9nZ1ALtt7dvxy~w705T)!$_bz+pJ(9R&i-DK2^QMUL|NPuIfPcHKQjs;H+y}8|)VE zy4D|K&=@Z7uyzDa$A&p*TY$!VtdZvAG5cl=Z<#b#pDFm)HO0};f8zD9TVHK=KqXSB zwgL?ys;vwWjtU2N$SA7{!J+d-Ib?x;{)oo_!O#ePU#MVLVQfBIjmq_qGI&N9FUDzw zjmM)M*|4W)Pzam!?Q5;J0cjz}RNC4LPU&}znC5LUqmfd){qy16tQO|Eax4Q#IFeDP z?tikYwl0v#ay#|l1&WHoP0`6szaEQ)IBcD5#sf>zSH17fj+_)DjZTy>PfYimAo7zM zC-6ZMFP+Vf@Q3N5|DQHnJ}UulFcPOOeojB_C~OHN)1gBPmLr_0ess@WSwcu+&PEg& zIY9uPmaDIdl5@GCXc|J^8m%qhbuwC!Cf439{l5qw+Xq;TsP{3YR*wVjzQ>37kOe#g z3wR+Tz`P<+wqn%5`gc1|(Qw2H7e(FLZym07^*a==h>a4p?XMEWTIuyOE1-DcoPV&Z zr*bQx3v)Kev-p(OBVQiZ4w$b$I42tAD3X&>K#z&oJ1#2HqH(YIEqw#SZX)b_nij?p zkV%3t9<*@6nD#`o)@dzz=7@+fNs6fbW+a8ldB$Miy?>U;>7k;t)rcKr!_v3&h14MC zEvC~K+~>TdtsI$Zy|2gz=o9c(4R&x+CI0kp=Z=57nV`Du1wA#TmMqp-EFIZwYbX^h{#D0*FoQ++49uph-jrz<(s6Lcs(i8Ftn zc@d4f2V{DyZHdKK{{W;_M?4ODrbs>tJIFPYwz36QR7Hj zP~wEWLNd6?HiY)%B#h^=1+KZ}J4y;WrAALYK_oXL4EFW!~5xaOdByX4Xod#rSdCwFd!; zJ9Q-LER(+^u{AbkzeGsSHL7N+-)jL@2kQ8N0lo0=++sX@Ja&Ea4L&M7$i5#g!)4@n zo=^4=ZO`0f)N+I+Q&}{+_o{`g6lOPx3xYtjG=JC^njU{emV%^#DwP^8Tzy+TWGZqF zjh?avd|Np3-VjY^lokH}_CI~(gR~=8w*=A$TZ#%GB*=ca>E3C{2qXbfH2vx zFP>#>!^680fxXG^#Z~nsZV1C?Rg?_oLKOy0UBImtlKc%`-eF)f+x=T zabALef}^kaPc$007mUSv@vyw7k=xnPbVCeXXY|H|*kkvM^9H|&Lk%$r;)c}-?R-{# z$9}Qrl856*9=vJX#<^}%9Y9J6NUEVy3Wwh{j6@z1N+>OL9BDtW@jZI}g1ttKZP575 zpGj_(9JI!yUGnfBrM=}-VfTTM?2ZH&YyNZLa{LY>^pohH&p(zne55zhaZYgvusJ5H) zdVSsdk_;(gn?YQ>@b%9FI}-U7Ee&Mn3gO;8kH3I9umaPbahR|{2mn}s2QU}FSvn=f zl^(`8%cu7doPz20J{jEjr3-GN_iy7Np7+!NB!|HW&cOnuielQHh(`iI?KU8d|6h*!paAgTK|{?u1eKY7{J~o;=2E*WOpf95WRZI9$Ys(9re(;<$Wt+Vn-%Fbu*zjW6ggpV`e*tpKyplj)b>Lh7 z`;Y*(esQPsO~|NZQ^{syr=n^0-wQxps)1u(iO(wwfr9aG3w5$(?(R^UM&^EKE0>}&8K6Zz**QXUz;B15?#y=Cr5r$~y$ ?eTO=t+ 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

b+{*UtL|p1P@cms! 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 z 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 z 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

aMaL4cfv(z^e|%^?-xkY05PFLK!Cx)} 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�E&f@#I-(CuewKU%r>R$?v3y}9Z6 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

tlQ)tvnO}liFsq&+(UGQIvb*=CB1CZspIv6O zq&|Gj)}uBX0TyV>#r>0wN6&>kepZffkxjqnSHXxj{`P~5^cWs=nV^}!E7!u4JM9R{ z(dok$f!rUwRv_dA2``(}Yn_)4C?%GP%T{Z$>%A$dRmk1W0kgQuPe$|F*1mh?WD&;- zRe<-+*VOPbs0o!cOj-^A)!Z724&h)kWTjwUO*;%=;Ygv>HqOpD`a*&R1UA0!kG*YX ztq!fylwg(8!$EI$d=)F&2GcEHv96Z|eyzv!H6@WW7+)D+4$6=RJ0R`n+b5&;v?RV6 z+Ek0a(JtZ8=0vQ+hTaBSqeXcZRMj`_Bo_z2ji~Q+HAKTesGRe*Bu!|H*+iiV_$@pw zA_NmyCUOF6m=JnuDiEBL052-D&xTun^Dl}+2A#Bb#ZUkW`&XXr_Z#FZ&_T*B(SfKGALM)rAm7rcXSMA zRs!|-E2^TMqqx(4`%ZIJqemAuMYZ^3IqCPG3%&ghdZvTAdL5SAI=;9IO&G3>sttM$N~ zUbPe~39F8^qfWb{PKB`rKz(%zOTYARc1}2hdFxs%G6VDu+O>sic&M2ZapD;;9t_=5 za}*omaC&6Q5?XWZljIw4Qfk~s$M9z7N+7Z>3^G-yQ= zTV2eQDvxSaAD~kAtR2_tLI|6byg+V*u!%bXD?SmcA_8(TjVSI{g_zseM@0QfNAyFC z4nG0S0-a_n;tn2lD{Arg*=K*znk-2_mO2+eE7{KJO?kPv=o?VDJkg&ba52?QNr&Hj zAn_Nv$U85Ma4D7U8H+XOFFQDfx(npXu-CH@SaQj>3@r1H4068pA{2 z9g^z%fCfm$@uTdr>?`$_iicj_z9DVCRuFW28M&`KC&A}?GrbzOj{vY!Vb(%@-}sYs zu59rBQYZt0qyv+|%MXkIn@Jb~(d`oxLj7{697KJ?%KbUOKH?GVpNJ`WxpB{WAQ4-y zT)!Lagic56Pg-`{1qf1*FVKd2#S|NJg<6eqLXH7bNuO9yU*B_yCaAc$igycDFqj%n z_F|QSf)q9mWt^OXvR(oOLQH!O9|XeMBL&sfc(i{=5R~351z0X;j-^RD1F-aAUEvbC zP{~AKc@mn8p$A1jjn>0aHK6bMB9H0v%VPZe{)UwEefUhJbm(s6C=wxfAwhHU;Yk-S zet{t$0hm926b3w#!dK{ExV+~YCwZBpGXQzJ&ueps1B*EsB1XyLAC%{(b@yC*05#cA z1&uQq8)K3bw}OqFIZfMwgK#4ivlZ{ifMr27YGMVUjD_yWN*hxr*Us1WAbFUAZZOtd zwqiass1&P|gLs4aN(hu#-@BA7s2qgX^CTTez|JeZnFSe^UYB&0`(jHuRqP!XkBLXl zlpq+YehK`ig|OJ;-YqR}hQmwk1K`4?TT$?g3G%`!DMb~`mP7Od(Qa^1<&S6W6z zKOPt6sfZ@YaQ-Hu0GZW>2677Y3Wh(uf`XzHo%V?!=qC!&(vQxsMEtVN?vqoi^{dHaFRv00&tn4|0)j~v6b{@^FDGz-SfKZ6uPxSf-d$0H z^!d!^`ydRiaEe~s>zoL*eW&;DLt0uSCM%y78_)yOm`MuZ%}KTIW<3_jGno1jNQbEKO>Y<=k8;7XL$c(GEOAhIjv)cb9ws?lqL_&1OE*YGh{r~N*c?Vs5|kvGKYZRO(z2h^k!MYjjPhHemlj(G+o_YGQ9u z^-xJK;_Pu%-k~8cJF(LEuy=ZM(&ZIj?O(d&{CcLx14rhdP6C(-DFNmM;hLoFshm*{ zv;12dGX9I?R#z1Q%9)3QBua0J+J#PM>Yj^y8P^H-7H&KR_9~xmy^3j)7bhrnB}#8{ zq6f&5b~vZ>yuk7h*x0Bk?u{sGO>GU{*iZ#;3%QHR8Wz*Nv(jztUzKmA|IG5A96sQr z7~e8id{q&6dD1hJ+m>9x;dZ!+4g3wEKn}k}jv=5d9RbPqKBbBv=L!kIr$HoPdY5=0z}6Oo zVPg#1xO7J38`gjx!Yv+_c64fq*#1jn^DrRs!+SjrJut1F%OIb}lR0PYdK;sT=_kZN}H{@q9;fQ?^^{e_K_%zJZXqenfGWH(j1Tu^{3LWbSsFnlW@V z4ss=c%N*Ox`Kt-TN-^s=W%SwlaDtBkmyOqNz;39aRP!OmLV|p0%TAxeSzTMbhKJcO z1y5U?$Tn4qx+w*~Y&V7)_eRPIJX*i@t)y*{;e4=KX6bJo`(SCdsT98Gs1#4)pM``A zo2Bjx%t1phO#oNORk!{?1)@z^lZaWM38Ft&9SVzy`Vgq9;lP`rAogp#I!*`!M9KDi z`ZZH?)-Esp{&>V(1kjQHql%npnsQA{n44-dQ|4FMAjER2FcA@&Q|7%gHeo8Ph!-(Xw8#MU7dbeJhTY+b9ayH zr{R5Y=+073zUpqu%tt6ks?hb6VH|)*ol0?w!>Zm)-~ zH>%mWxmxe5_dkFA+Kl(B5QYhKP?&q=8r(&4+Y%nf$VCwLz)oGFQd&}oWv}(B%7>1F z5*fpQf`S6ikVftXa=dpLC}KBCD1(CJfL@1;sNfZpC2+>oO^ z%Dzs09GLi1&61#7#5gx2<{I3vcp2G<8AkJiRu4T{GgWJw0Grpcar46!>V1r!8{Ys} zpLyNGi9RTX?)~$n%ZPo&qZ*#O;=IXIPZ;$b0jc-7~%$-&XYMhNEPyBQ_pG&?^Vyj!XX%2 zdkkLR|1sEqM@*Mil_IDstHKe+B~^3?cx9E7%OA(AGrHSWPFy`OY!8DCy@0Pq*T#Q< zHc5|@Lbp@5Z!$PI7zi~nksb%z?-@vm`v#K?+uH89)}|AH@+-ATa_LUd@LVKP{ssOyN{KgIA+d8o z9rr|XZb$0>?rmTK-+ezAJ%KHelH=VV|9r*<#n>eyc75k}-i!2K&&S^u0emnx$ec!9 zAsSBV!jbEBGRm&w9>l|%$Swr|XI?wcqzI%t;{P}k%cx)`yWkidxr~irSw92y9u|%P zDxKvI|A;JS3-w1eYT_etrI^X7V}w!ISSI=H*MDkf%@4ouN9SPHDd+Y?iQm@cF^mad z`&+&e0(YL^u`b+FH-V#$sw$8=0U2)}@oG6(v)(cpYB@=V!LJX?Qsxs~x87!$zYgma zB2RT{9ai2v6o0Fzr1bFFvu7t{fOlhhYMaqc^6MecB7Dp$*~)>hm)qCDi%I}Q3*>r5 z@S8Idf2B>_`7O>$JxN{V>L03WF%j~K5o%Il`b!&CQvf~JASNeA2YjbVs}~i3wBcFAJ-Xom{h}L;%oFfxM`I7r73WS zv}F#HaE6~2!?y3FTHb6MvN~EPanR}~JTz0N+f>Gy+#-v5tQ(@7ei4{}Rl&p(5Gz?7 zNcdxFk|hA-*RHfL4Pp@}f4jv55})IjaYqJB>2^R`ncNJIDYZ|7+m@)Zk_>50vAUQV z82ro@z?VLq@+>vciVH^*2!^H)#B#pVGdreC4##-4*otHsPF@D`n8J}e@A>u7Fexjc z;qNgGsqV7{-&oMLEDu-vANt;iKYO++`L{>q8JL=wWbkkSdFSR^K#k?_Fh3MO9bZG^ zpfzb+^&7L>1D@@Fy3KZL82;1m&n^%vsUH{bAjJbqRw7pIH7*-M7UTf5DvLxH=*Y1g zq$-(n!zr7}^iyezlKI7X@AwmHzOF^6NgbD2tLOB~osK;f9L(bIIJDWX1@t~M=yDq$8+elfZ~n89r7pGbA2HP6o%?h zkuWn%>?J#H^d=kh^K zen&y)|4km07SkniOF`tn3E?0`iq|aLum(f(Rh}O-qPRw2P@B@hvKH_Mg40Q6$}JL- zNoMA!Nw9}=?HNuv&y3Pxd~5AdKm)|ALrC%?nv^KDjc46ES(6#|EXM40&hBjxbCtol zeLj68I>vfZKLZ!B*B{f5L4C1pL(_6n_w{lKK{9v#4T0CIn`j`JIreZ1+;Fi#zQ8H) z?`8IZaO*;UH6|ES$4eJe{i$pnriaBpq}LWW({wS)mAaDG{64XYiBZSI#5{bvie(GD zRKUW>1VS-~0R*)+7;4tyVF^IlM)xCDFK=%nCMfcyt+NCrR!fT?loo~OhRgwvnTSfJ z*n>KIMJTh({GHyNO>vO{2@FspCD&t5If||zT-Z!nFDWUkZ90KY(DTNhhYs8jq3Bhg z?}=M!0LvJ@#4n4f*1;Z};Mb>y4F`BY_Z-f`6$A8lU8yaLpnc3oDv!BZ&I0wYsQLib zKZHG^4K>q)dlDdVbl1~PIAs(3tn^AvIlA4JK*I*(Az!^eO(BYNG9Fs4jR!lys*_xj zqI$YQO5Oq{!a~?Q_;W}dOaNwd*@Jd&0MFoYqX%XTC*xKOLX-)7sn&VJvIgSJf2^>u z9`F~o!}zcPZeK&YAuu%foq?CQ4-x=imgSk*`v<1}pU+!$MUWb_qTydLGp?E6+U|#k zg_#jL615N@Wif|(DT(OsOYCa_<6{2_ez!z*0G$zW`A1eSL$|7YR@=Sc?NggHl_yEO zpqcwu2!`p^o_Y>oS#Ra#P~d_SOm zp%4G7laTw&X7)#CSjj8?Yqt>_fd-34^jDQ<*{sYx@sz61h+iu^FCQhx2dGJ4Veu8w zH%cCK<*$~Lfde6RU5pVF?oV}cnQ2%UWRZXK^kJu_ncTYA1y9Mkzmek}3}9gd}!pgui4-9J2(wYDy} zxcj$rhTTxMs53HA%XBR5pWyn3+TF=8^*;F&*nBqU^rz?nkE#2=R7Cf;MV-*oKWBD< zO`yhN({kuT8<1e`_5c|Gzt^@cFoe>3V^&TAk-G(`GpK^EA7GxOKbZnFqP#2^X-+-_ zy=;qC1l!@J9(K~p7@1(|d~lzdU1B2V)fzGTpCc!UIq3l`fu;63G2m+Q=`)`-%!U;| zXIQ;#6?uCXT%Qn_L|T&u7fcx{RMMb24*4+XT2Rn(CoV2typ-lMP5003(70ZWr5b=I zRBU(-H7>073dBL5qMV3Ax8!b$ybRbcECmvTk1|MPvL+EeLh+)mT-F1>WK*z!IMObS zX6eY0W|IT5R(7hGuKs|}XFy^5moExW)%^N`;s4eSg3AV#O-~WV)m4m$m-$sUi0Q(r zJ1!Di?wB{2x`(`GB*iS!a_lDg6UGsj0 zs>0Y6XHcK6x6?+E&vjI0D5HT;$9A_TsPqw^$FjbuEI4q3c8PBkIFF{E_cVKL8jE7Gn&cz1n+43LTe`1>N-DzpMz&loYr_seL*eqpUm^ z4ll9)2)~{L}|>i9b2*j9-Pw%@*V5niA+sK5noS`$Cu$H~jj|Mstyc_=pmSj8{rr-GD|@9GbRtoyt7i8-BzKA6%<)s zZKUATv1T9Z0@ejAB{t+Ql^NE?7h?2h+|g z4|H2(Wg^hm%A&^;a3hlG3W~{BuUlQ8r7bqA!-=5iD5}cR6p*2Kze4t$ggJJ+jnqQ_ zDBBm%{$tdSg0LS20pJEKXFs72)q1sBYYJs~FL2c2oC*@e88IoXC^yML(UEkIm^Rb- zYPko{cve4W`-I@b$4%Mk+I-irw7Ok*6SE{@3M3R;-5?^l?hSJO>Mr4uGX*AB z{;n9aI5}P4So4ZXy~-q%);DOmSy^t>afecFc~({+Sn=`pY(4HuZ>%B+ zsy}#Aq~>-u=X!A9dlP8V^fnh{qV>hy!<4)^w=(7KD=;%F)n+-~{zV!|!P^4@zra&@ z*(#5m9sqrtok-T%d5@Tgy*mJk1X{Z8X#fkgoQCK_-vdVVtk&{KbfCWJ1d7ZP2wIvM z--}D0sI*V`T|KY9`u(H!aNcUhqXV`DAorNI6-J1poM0ztRep!)UfOUE7%&9a=_%wm zvseMQ58ruir)CRhu5}Y5yOu*u)^n&mDbTkEF%@DWHZg)#3%|%Ry2j08+mpS$E1=Ke zWmm5*Gl2WHh7(L}|3YP9dbkP)&=)9--G(V7+EE9FV)~fPctPvdzdf_=aMoc4IcqD+2@tslwT0Krr9RR=Nn%QgCneYPBA?2g9pDRoE zTmck?AOTXU(XFrlcKg_NmjmA22O*YQB|{m7K)fugnlMDWC7Yr$d|Iuo&eEddPR>C# ztLL7#oWsO|MnO)0XQph!?@l9~R1B_FkA>?;TSL8O;q~$ASfia8tDU~MhYgl!v(+Xt zL7|w-I;nSwNbZJoDaLG^K)~$?IRFA2++6LgM2jqZZCLP$1R=7yrp@oqcN!KnbEHv_ z>>d(@6|nmr70;rYXVn{nG|7vP&#?V{nsqD!C^D>ca&ih=FE9iuK~15g&sx8P6n{Oz zPN|mc`E^9-w0ulQE9paeMQGle^~azFVCsOXqo--e>Y9F1C$PkvTqzlYTp4eWgc=9s@xL;p>vS*Ew!of!ZtAkE~F<}`YwZx z(`HyJH2e04aDrFu$w&-142zfy^*NZ;<&})pmDvBnt74!Gk1GtIX*2QpRumJ16FG-; z8@ybHZa~W(ur7ukuJ%~zZOykYU#?q8WO}xrOpLAf75H%X>y=29P0@#7>xcmHpoFP_ zCpAU!O%>nm4=_Y~Jo%3SNZiQYqPi-VGJvxr>Jnj`$3y7$p*k)js>-)SK%J!_qT+r@ z;aj;i`E$M6Cota@IeEtK3k)&_1NFfWbDqd8_nTc|s_xQKSMP@InTdr4h=O(kJ2*xxyUSl-F` zwCA28uc<=gyFF}&*|(Fy5Tjgx^8nq~Ghl4^*?Pq!{JMUMlrXtk(mz-=*5WkaPpX)` zNRRq-2ogTByG`<#mKh{C8fiS?Mk4HO4;ZBM&n*eSImd5%hOxd#KucU@#$*12)yK$F z!=`dTiQLFwM6)n@0F~U1yw2sIwl?gItKvq}yM42IoHLJ;&VB};_L$?%+S5S7n$?xq z+WmCLnhFbeo-?1j!*d_MaoIHy|5=A##irhVyK8zbCc3oz>m#L*hhPMdSrLvE zcF{PtMZ3;>5>mBY;+$+vjBVklmrN~uv?DAUPW>A(CEFcwuH9n7dbdw50B|qQfK?m0 zAZCouM1_a*FX;UJ=`+>cJp;WfZWN1vV9Evplvol6i#Ly5XTR)3fWXo>yPc1bYhGx~ zeEY6=+6vMXyuHeU%jF z@j9SFnf)3Vk+^>mq61k*8%uYz(k2wBGdxUX=kvUe2OybD92M&9;}0yoJ6+K|0Y%qC zjs7ony@e3r`@$iM|AEx5&se1zup+YR)gJei0sZCRZ}|w!nV~^d9F~AD%Bqk$_#)Uu z;s9EH^4sW9OV46MNItl9Bd|UDnoy(qR`^d6aPPfO`ntIi`Rz^ctb(#%l~Ic9?T&ekO0y zmqEq0;LFfEUi@v;b)mZh%s{6ak{uDlQoYyQMl}UW#ILH%=t8GIcmD#9*87)$$wCw9 zBmFA5-={kVJFW{$(Z1Jcj$h8`fB2qKsgUu;_@iMgj`t_*pPU4T7PEn5XFoui=caoM zd0iYXfvLLF6LIoxZJ;m`LdvSv4gyR8m1Egj{1@z%ONgoFoFhJYYdUSDco4-SiGypaAv4=;;Cs9xS z7d<>t>2-AX*j{xY(Rd`ON&~;^jZyWZJ8;*V)PU{N-e;`WV!R`y1VBd{$y#Z*B_R99 zb__6+y5leTsDMnfeYh=3zUgJY=H>4tps>FN>P%x>q&hPemE~%aB!GE?_ znHp;~EawUW8{#P1IMPpHw|A1P0S;mqs6tsP-GxxLPzEy8BSxTv1aE`phZ|wKi5S zq|{p1ox;snaV>H5zEap__Cw{_k8%8_yf`f+%S=o}9;;a5muJ2Chih-nW*pxf1rjznCuu$db~kq#^guQT9}m5Nd;q>Z^5|Hq zEe0$~0^aVtYu8S*hSOFI7bxZ(C+XiCJ?50FH5#3M$y93sdniv#R%0+)XtmW@D;Kyb zgevSH8alD1Vfm|U#jtTZEX$40Gy-eP_1VzZ*ObE3sU9Qs!vdzl&wqdcPbfVGiT>A% zt!Qng@Sm3=z*Y8#Y8v9e?cJ939GqWU1b7KOh ze~Qa61)l_j-xLP?uGRyb8uVfbcoNBL)t34=NkuD)-hPSd6NGJ}R{}!b624|3aeuAt z@8$~x@FO+>Ooh$)@>iv)0#>;1cWZkyn|ZLX*F^e=z}PnUuQ^<8Kw`FAPEESw{=jh4Ms+ecpuOW}im|FTrO_=#jfDpZ(3K4U z?i#2#Eo_fAHfr4Sl(^DNv1hawfc0p}m}a6LBpu%~_g_!qY1CQ!k4fEzDL7xx0(I?bcX$Gr{TFy z`CV25nvkwg0!GbULY)%0MwNMU2vBC_uJg7njtxtWv7jo$HKgP(aLD%l` zRT%$P{5*pYvbzNpMAX#SzPFmd8{YY=8xzTmUd3=BWw#fR1P|TU=?NH`!+~lK5#IrS zVprq5#t*h>4Gj^>m&rID$4_(Fs6OqAGd!93uJC8wwsx`M0NDBkK?-YCF}a}%dL4m` zKGaa3{(85-$?${VTc?>PdxaXCnkklMSF8M41HT`CMwK`){gAC-p~qBH@t`l^lidDA zL-c`i&m}Oml*uw2Bie|zM6%lpxd@kbmx@(Q|5tlw*;nPdwS9WhjifL^8YCtLf~24b zNJ=RkVj(RdNQ)pbX;1+vk&rS#deWgwkyJ?mN$Hlj$Azx7@BQri6Fk3ty>RhrDc3yb zI7b}Ee<1w{5nntF+qw6@QsVDbM7JkL$vB_vdS8rp#G(^FSMD8c`5ERCxzkS1&`xU? zMkgHWzuc+ccCMdXuYcoOe+e}jCABmvxin2TIzd`dfp_PQf3CpjPpYkLm{%(5(9+Tq z1c$Ir5(php%Tv^r7{x6WD5?{6v7bV}R%asGT}@xoO&3lR*1r7oGRNhG7p8`1@>~?{ z>N>_C7?Z8<goKJmqaCM&hZFfogk)LURp4F5q+QF zVARsI#)nno$Z_RYKR(3BI-2`zEw@&xEN#dxqKkKy@k|1oX5-V&)4p6_XYGQPF!B_0 zruai2A~3LVY>JscyI2uv{lS=Y&~G|JfQ_X&FjU%k2apZ5QD8;2ZcKDFezOoS29zG} z0pkpbd(mm85}=-rU@2z}x^M?X5&%{Wx#J7!m}tK1{qEezunubE+0RN~J%xqNnkTNy z6T+^=?gECJr=Mo_3n1OX-dRmWq``HPoatsni?+e}(N^_F@Ep^EJx1+@O@gwLNsi7S zwO9CtQqiJas6ARai}eXn=9gPX zJFnoR3K&=1#$||q6hHDx2f_Wy)jpxMvha7aqvFxtg+>|m&jcjabQd4Rlgbo~B;B1| zEn~t=-Hg#eOch)(zDu{e^AMx(El;7mZ*(h<9h%sx#-6;^Hg-=%km9WUU*GbxO()); zYpmG0J{QAvE6R^#v3U_+zsIqgGC@^XWS^=qkKp!GqT54c^JgjNShuiYF~Y@Yi4UaRUBT_pHCv_xC4XL+eu( zYLFzh6R)h*shTf-3}2UdaByU3Uxwt6{NuWPwp} zgT|0l3}!6w_kCdwD=Sa+2{q;WRpt3@whM=RLS*`+h)kap%zB{XG|3vBm=6M%mGfdi zmH88=)wdKyLv9TTb5Ru#9uVivI|>@-mVJ5fedInu!DImPaB7ZsMFQ;eU+;Y}&L~;u z=({a_DC%5Z$x5!SDgwj!j$u_lt%OvmF z@Pl}o*m!DDK0*x~+TQwIy`E@^7{l+%0PQVv;r_+wq~xa79%2%W7{%ht5;PkYhCMbv zN`&cbKa5=T<$T*U2}#tGWBO4)pp~=#J z5AQ_oMHQvX$Wi<2pQGk`wt-UgyuSOJO~D7fsJeh(YtjDPj`%@6j=fF^x?F@dB6tia zLj5Cz-HG^8Kk#2&!*{(#=sHEPIz>pqOz^0;Gf5ObF|XgGl)(5Mz404z;~F;OS0u*e z)W&t30~K@wugM0gS)ooCsAL+bJvvZII8ehrP}MIe#34h(A^(&`=(t)GCvntKDIUHD z3<42P&yqcru~P}Bvi}Ru{v#VP>fXK4U9YTZr)3_enOI%V3K!xE?_NRq!3zArT8DT} z+seRrPEltU3^^^v0ar;hHc8x8dtXR->lb?*b2cp<$8Aju&tY$r#-6RVE zJ_;|{m5qs?9p92#V{Xu_RIF@a@Rf&|z3Oa*gR7(UzG6484*Sv2jPL2!$q(c3wR1I< z+;D*pb<+8*g!@zpXqb$kY!YIW&Od7yLq<&Vp>2mStWZw+Ige@}6;!$#OoINMmmZIf zVY!!*<=FRU&6o7KJfTz|8lc-?s|?%>Gp3dnnsWp90pH!QBnL_mv~N;E8?N&b>r1aFH>>BB^oCz9#W z5g2uH9FA@_y{4sy(4N@>^5>x@19DK~Hp1+yWO4K)EDfb&U+)Qu1F3RJ+Fc3n2181Y zT61mb>Cg9szTP!^i0B}!D6))oY7QG*lpThw85+bPejLz8ZZlpL-L9O=!}k^r=#38u zCL_G~dGbpbVJzcw>SH;ndRdo;uyX&P_y~o<_uN@t;&18=`e3O52$|2(Q%>}vgj3CMy~9^l3UCrj_EObzasU57+JIH(RRc_f@(tC+Yz+~Myuhi=X{1i07mQVI8mg*)d9{9h z?)(kqVMie&kXbetB(;LKIT;s3mm&}ia|*sd9VQ`qqCBD(TLoJwG1dWvXP5M1-k|6m zrNlrf8CAgHJ$3Zy)|$TQ`xwI0;YXTlKIe?-)Sg`cX16O9n`Kp{LSlaOl+SwU(~+vv z`~}hXp0J(7O5HN7&ba>*Dd4p+wu*V*o4ZQgZxzCKJi2Gmv2fQMY7*oziD^(W_GBao zY8V}7pgiqy5PSpWu^^9o!>$GSIDYQOi>0IdcYjtD!Vy{v4C#!r+-M-IG?uXXsuht| z!2~Us!&a;PsIc3dhzR46EcYqm>wR~q+1@@4tGtvulZg{w7sxn2MD}9i8`0&La>K?c zI=4iHdpUw&U3!+!Izk4{7UO9PCN#;=$#3`+e3E?RKpGDjkVEOl?MEg%A<}20Ef2&O z#|hCviZc_kr4(z5Z+C~*aryCN**@qTA|b))cH%y-=k=BsJ5))snwD+@2#?u&HcH#dTSfQ%pMT1Z}WdX+S>?QP1Ylu(otj{LT=Bc-BWU83>5GRcLHjuE3) zRCL`{_}?o}5y`xG?U?EzMtWDvk-t5d|G^Hx-+^2AajjbeMOVxFF23Z`CL zfwlNp@zv7I<+%xm%X!w-HM6~uty`1K?aO;SmnOivBV6Ua!zuYHPNw9Sne(ooxmhR-=I!Ne(rC00R_N>)=^HZBdg zpq6-|l!s`2TF@YCp2eQKccwb&oX?r}N$2)jqa*W3Tt>y?C}CI?N0`llW*`@x@Jf+D zi^uiHWcq8;Vq^WQsWg-np9{1x5~sXCGaQ*H&6z+$O2s+h8@H)DY~+6>&w(w=zy zp^?IY+ZRmJi;<+Z#aazPy0&iSX3R_UKtwz>uih!h=O8!9>>y6)bgT^%5$^9<)sv`L z>$@r)&rN8^EEaKQcHemLwa_W|g$SVLW3+sC@Bj6Lnd@LR-J1<}RhU(Nhg2a!FhFv4 z{8%?>U|`^yM{%3So4=2Kn;T)uWm-DcNT5D|(g}^GtOcp(3Uy#rsDi1f@A5!9#U@wf z922=wk?a`wwo6XKfbgvAX)A{Y;IWjpnm&PQ_U*iMv5^3r7LtPg^oAAio_aRxiW<9+ zx*p-EkAU`u-H$t($(4k_HfnrW`b5&Uhs5msp_*+2DjZIvw{cwd{W$~}P}Oz0Mm?jf zQ16B0l_V;41CH?T3RHc>K?HpB^nF5Y*S&-Y+Q^Aa9--&x*VIEC-@B8O!FGv$!R!ik z?k_ULHR?*um`h`-bBy%4yxC4*D)l=*F*6DO;`(?b zloHhAKj$Na@N4d|>l4}r`g06)s^FigE>E)rfw4=4c<6584WgB5JM{p&n*mLj-g?ZW z;{BI)wN8=vXPYx&sDOXwx6 zkang!*;c}lv&2#fa^$kVlnl=p_erchUKOF{l-v% z`_(GYk`i``!G^z2c*Ul3&cs}dn6M5eCJan-2`HNP zgGMn4D0_pAYi<4?yjHD^QZUlno#N7Fxzv40BB(0O6djYAv$-99m*sWZ(@qvt5`WDf zX^BKuxB2Yt((=V2(p%(VoJoOmX?Tl46qG`S$5dK*)ajYB9+8YeOU_%#*qBkdk%x{x zpPoLz@}iS;;AMg!UMo^k&4}NA*mbrL=*&2|t+ec+7Al-OiID-!J7fR@`b-&b!h0JQ z&4@m;htLG@ZXhw!d|XNaE~*E=XPsWwrO#lVeMmUDq%wKPC_wrwl&YQ7pS#Ijd`GTA zBi-_#U{Pj9*`JX}ln>vGR!xwMMHN4F{=Ai9t0)!AEtc3z;u0E!ALCK6+5&3#mpUc< z>{e=;jOB{r$;z1H-O0h%USJS5+F2O64E(0H_^dN7On0KWI@Zq*wb)4dyl3N(ze}Yw z`;iK=j@N%9@HEv~ct$Bt57r+a46mhRPS+s4??%>DF2=nu%h%ND@y4R!g^T$lhts~O zWwFa&93kQ(KgCAe#ZkkU?-sSIX4JKOtx>Ea#NsiH&Sxl-IAm-&k~M5q{Z**j?Hv4l z%BwjNJI8jSj?3A& z)SOG3c<7!>g&68U4-ZRtSBOweQqk~e8~3lRjyC-s;LN!073d6Bra4aT^<=EApiC2Y@SA3P`?J!&mtAYlfLv>?kN9ZbQiV2$Cs1RcVMeG?)v#vOA`T#~!jL$dH z6qi#MGGfhi_sYknzux2gAv!?yi(-?Op8n4M3`o@1yrurYFXDKDM#p=YZkanfmp=4k zyA{!OP!p57?{_UTE0S)%Y*hh`x3sD;xV<=YBVyHWh1YqpE@Itpi?+g#tHM=aX2H)y zz>@W+I3G&rgj$#qIYpHRdpBNoGTM$v2(7kUU+IP(=@O6WCDD_{k^x5!Jkyh-7Sub( zA+R?3p6N*<^o1)t$fuLLcD)j1(ukg8u{{}7cmw-}s;pM2Po_-VWTcGWna(%9myT6=>n)KTy_MM;a3B4f+ zMjn)($?9({zsg!TR)`d{43p0*+9ydVHBECye=N}08(ExnS^KO{VVls91CD*e=SQB_ z1|4g49P@uCZ#9*sF;KZ0Xr5Yfx0_WCXPHu{WqhA;HHo8TJ_H4OX5}?g-mo*|{%ooM zk=4zHBa~dP$j+T-n`5wTP+G(<_%w9qoq5Km(pKx&Kg(!Ax_0i>Th~t|lbXAI1Ex7T z8suax!XaEDROiB6&gr~R|B>}?Z-CQ0ZyhR^nQo|Gta zH%f^x#un?UndVrggg+DDd11`YW6aEuCd85LhD18U6}1SEuvV98DGmK1_Rh~8>aFRg zOL1Z23;bB;5d0By^0LC6fY?cI=uHT*$lf44_7wR!+D-(qO40YT8}|{Z;VdWAYz*o@Wwcy@_+)G- z+jf}%Fn*JSDHt>Zi7j!E=8+Oc8ryLHcxtv&nol__<>cxyO3&^(980`Nkhr_@NLLHn z^TJ9coV+)mHSbEV;Bhr!BP~(!-K}Ff6%yDpQcF10O75PkjS#7^I{r$J_f6a*o?;O` z0uv9Yjx5{1IUbv~I8fHvStETPON_t0!d;@n9n1)O$`e+b!>zo(lwE(me|0v0B>k`1 zO_$lV8ANyh8*iS=&(Dq{={r1Y;U$N_wl$df`6}Bs>=4b!j(8zt0wEkp3P*_t^!b0A=}m2(4wB<#eS_aIk5Z(5TdR zQ}y=OYtaBRwb`C!fcl*Dnz*!o9%vKhvmIE@x)6GASb+TZ^}ICKr7IuL*TC=!7$cYW zfZPU@T4*-S=>=#?v>CzP8^+ljnq{dU(}fiHdTd)K^uGnGWsIuY5p-5U+6H)^?CLAH zN)^i^WTJcoz7?Gk;sP+4x>d_L>m~H+wYDIgZQCGi`h7EtB+?F}pV7m6%vQ~h8)2xD zxMRBBcS|2~htC9miW%3(iC_hLl&wR{oMbFqqA7tzj1VR96t<6*bg;S-*hS;=c*^Q( zJeufieJYNlk!1lvLAuh|c9P8n*3x*IBJ-2ssHwmBid;*~CoN6JEKNo%O@=H@`Ylbq zp!ta54^`rn2k_IJJ5^aeuI#x|pOmqoR9i4nN(5Sj_1Xt@(^mA{kwPPkT834Rpv_*O zdxnyscw0WPkW?FENRb&sKfhXlQU~Jh(*(Iw*;}--Dmk8#upSAiLCg%n$4BubypS+9 z2Na%Ky6n6+N+@mrp0r#!WYp*-oAQ-6%E8_TnGYzHl6M@ztVuX^(cFe7HbMIOFCSQYTL;OZU&wlXLx2u+PW%{sG8zEIz18ji^lGIfJl+4YZKCX{Jv&} zWJpz;W-UKJgIxN92u$M-+okT>tid!&#{1X~jTy+20Q;kgAi=6rHIFC9NW6IlFah1S z9co}J>*HnIcg91|!;sfwM`FL92f|0Ou|Vx8h+`f9a9!-n4D`^R=Gn&BvwA1gIOp6c6X}(~AR)vj z+#x6ofKv(~)o{v>8pZ>!Vm=2oK{5;1!#LUwB_z`}OCluQ_Voe#=?J~X9F6+z)$@5u zo(tOr9TqCoTs->+~799G<_38i$T4 zYGXWMR>@g8-goqsvC}?203#yzLW^wrhdT$ZnPikKgC9jMfDfRHxX+C+m|lB#Ptxnh zorv@@!YuyV%_XHz)_4hpj{c#)^%OAtwr?gqJ6En+8T@~s-yl6^syp>G0yOQTQx+|m zrr;w3eJ(fvRG1ln?8nFeX_p-#%rj_wx5OF9ZN0(GS)wT;@th-hjz0FKW{IY337~3H zye$Fade>K(zjGo8v`0PTxjt?0tA~Mz8Lu6iNc!2=jE3vl78Ou3&%N9^Ch0MDXRu=O zp?|%ON^9Hffb=Ru93*7x*ZyEm`OA*$-N(`g#namQ1~F2K>NANlFg;C;%)~W@wh)DU zE00U0n*SNlog0}Mps9|{4DgmW=eyHLa`tB*RVjd-3OP&6RlzHW?k0kOUlsnU!-ff! z5Gphgkn#&^bi|w;%5|SK_h1*bz>2AdHdMtC@u<)@x5n=$i8*nerp7NYI<_;d+cZ=e zB27cn)b2O8*n~O6u>mIx2Nz-o5x8DKtlOAH2bAGQ#Gt809AzUy$LAQpRJPRg0j}S* zd?EoGgNDWnX%z>b2sb$^W)jHC7c0L5TD(SP3~+2_$`zj5bo1h8n*i12#yU0%{0E?j zzg?_+(Mbwwq(_NIaf7NTNhCdZT&q#62YOcqM7LX1laz_jp$2arnLUy60Qfx_U<1@S zq_Evc7Gq-E$*4=Sgar@UwjI3&%*0?gA~|RuxFRsr@31s;8gyPYdKnI%6UfQt7~#a} zi7`1P5X8CYrKv2n8@VqRYu_3xxP1wv@y3Nio*d@G_&@A<=;(C6TK)3@UHWX9I75bE z#bL;Bn07_L@YX7klO*<1VcP4vrDkSH1O&2fgV^75-KW}nXKg@Ig@!HoVYQdLE_yqh zV7s(Xf>bBwBEcQu=*xHVO?A!`xU{^#k)VG~E1%;Y$OHD)^q+R5F!XCAJ@Cd=)kn@J>UB!Yhx(Oj zM%td}@t`2Od*dVxc5I5cK(aZM&xf{Eb771xG;rye6YdFb2%`+{rhIWYpEi<9)unf!_Y75MPN5g_U{@0_Pl^d z`V0o28;BCxXO~tf0&8A?@EzG4&YVcZo%dwa<_$d2=@L^xtO_Uig@B6gHSh4(kY)gfiUpzJ4l#l zpL$_#Pmtfo37sf4R?tJyfxMgrk+o@%mB}kTKgtMfW(tII4A zQjwT9T>9eJizH>j-0hV_VRn@;9|#J*h`L7KCurO!z?<%k{Vq(brL^@c)|jU)z94mn z$c+hLZ_DSTnro8l_Sn%EV#@UANCvs8V~Z5;+llYGLSg>T5-8CPqM6wJVv z3Q6j<#pq6oBlUYrRw{#4p`Lzzt6jg#eS&jVQHb+c*_h>wKVRSm|s&^(1R-euW4>6ZsG!(dfHgd8u z7+WD@wSsuTKwcX4ErR>lX(03t{WJvEzUuX_cc~G<$rUR8KV_+;ppiqic?JT=1_YEp zSc|~i^@U>N6Yw^O+td*i>5Myhx{m{hh=yf|ZE}=<1t*Y~X^lO)eU!cfl~{)Bzt)A$ z3BWn?P5R?>GDvW5 zg#JM?q&zHa^1j#TxNLnECbOo#Q%6np(uEV-Dg#}G6Ag$H-HAglXDgQMJQ6Pv^SCoF zY(Oq>v!_0U|B};7eSyK*5w7yqsOFbnUOC(J3J(s~u#0VMkOD?io9hz;>ah0&*U1}e zO1%i}*oumYux?dC4Qm@dZTCZ{mg;L>8OfE^6<6pTf}TDo*8~03ERu;_Po=_VUGlFq zKmTz7$MO0@t`a>VEY z;x57cZcAv@0w|@;yd+oN7z$gtgnEo!z01~tX60Ea=Xybs-L!VXM7M6Q4W}nw02imT z-7TW3ecwkp^5aezL9=Xz^?JbUa7vWP>fP_36GC_Pf%f>nLWeEiDM8Y-TYaN9-`tem z@H@ygV&sr`Wnov`!O1k|PJGp%&$i7!K{edc=H(UXuQ?QVqS#SMOd_MMTM~he!zvYz zC>rGC=w>HFBrGgc@>|2GXf9MUlG+|6{2fT?y3!RpNUW@4{_qT45Ng2YLe*HyC41A# zT~hnMhWhm>ffx|s{^X-ID4vq*CM2%?^(|TmY|(@9;A^{2@gU->|NgoD%zpm_#Cag& zW)Wd{t^JwOBi0w)wvWZwKt-Wjtd4B}dg+UmIq6-~!+}c{1u4*G8ng{A%&wE!-3Jv7 z2f}j)$Mh{ma)CnK=}_1r$KzNk|3f%rxXq-3xmM(Qkv=r923pjKh0xR1%6~Pjlae80 zmi9;ClovH9S6DtC$DDPoNHesKC&f%HL=>03X<;^b%%hQJC}>i|%=VTg8h6aldZ=Z* z!u6x-NGNhlBmdVieGr0kU%mD;?<%uw?G^$1h%Ynyh!^TfPxtY~n$V*M`={?7OeqXx zm2HB2^|Y_|{QiRMZ4o2ttHA!-R|;~vF?_aSemJtez=-bWxJ|9ypZqT~>D+U+Hjlv0 zV1gQDZb5KBjUFWe2KV1umV2X7Ps+`lCLbRYGrb?|%FHz5N;E)=q3xFubv-dvj%LpKxmOjHa z>^riuNry=FlO&nm5z1I!DY<&Iv5M0SVKTQ&dT?sQG28?3m9F zN`i%9)$F7s$s0iPK76M6N(*%%u4;d9CkvaSi#SQDD+~bUhYusp|7%kO1&TWsOG;D# zn<9I05hgz_y6qZfZmnh$sOCyQ$|F$CC?n5lq0Q8Lsarl1Z2p z8iQyQQnteFUv6ENz~n*zd@`F?!rz)5d1g{|rqUSEZ(J^x#ZS1;nw86#-~ruX!U^^)c7 zx%jodh3PW9n4vn3{f|CD*LhM>_Ue&&czBJ}D8@szzGL9vst z!VDZQ5LS<-+(g=2W-43zt@z#zO5e$eWhajJ85Qeb!%&bh!;92}Z7=PKb+Q10F%(vd z0ig>v6Zfi_aE`ZjLF%F)-&ye$<7;VWdi=gfsuQKSxVPA+Tt%C;JlHByWQP@{oU6=> zxa~)qkiw%fGUzIslmYG6_qV|ztW8~0g@{8dt!X&sSZSfvx%V&iRPAr1$_#vY$zJq6 zjVhWDMeDsOmPUelQWyT`{5@28`c7Smp93U1{LBa*uv>&y`}fw73(;~QB4P)LX-l(6 zOHUwj%a;I@fC{D?xG1?KdP9N2A(-0rr8XhNSWm#R$o%apfzHj`3htkNVU-YUj6r4} za$unUcKkxputrzuFQi|n!%YA9ZEC9YvZA5TF6PLjJGYgzx&cc*EZ~q9+&bq6rh?N} zse$pN*}PcE3j%U8utA}%gUBXC`CGOKqi8qXT5#}2J3lY4)`cxIeY(O9QkeI})BHNf zoF)hX4I1}Q|D|QW^!{@&m4?NjCvFelB?m9%!-(+nfCET-0Jeeu{RTU_lUY26>!NST z-W}ZhJ7izSN^Grc|?|Hx!%#?a7!NUy>GStaaY9fJa)HDp45eWFQV-jX0*l8CL0~);5H?|3$W{^=F|^@9 z_-RX+;PHV@K|4wY412L!a%zJNyQKgA9_W{s2Yb&$s7D^#x$luY0fl-GV+_b45RL(73$8PgkYn|x8E9fcla$ff zA1Hexn@bHg0^&gBXgY_Y0mW<-OuW`Qg0BLKXdGmWBW^8-sK)059kZD1=-@W$kJ3FS zmt+2`2kTW2^LnrtyRpJ}O4QVw2$2uG{&Med1`8XXNs!JH(p4qV6h`@O+kSQYu#~_Wz6##H0wD;=p1~LbnL>DQ(F^rr_^#+^1S7p-za|z z?j`S=W1{aM(UXwq7xGEXiW6h7#q{&@GLl}-HeE8foAnxd#>0L>w1=tLZx(hC3s`RK zrdGK2H}B&8`+NH5!0d2=oD(5)0)+_%m-N{YOQRVm;9xaR7DP#VjB#r{t$l=mx1C3K_q6Ue8L?Ky~{$jw0JwCuhSmzF3|d`T`F!?NBpN zLkMHtNn5@KEz~KH70|^BFmgB> z?))bQ`u%ajpMC@>ZbERn8#33L2rWiv5ruklFAefVJ^`&Pqo$kk40Hyl*43&2{;Jo=u&OB43fqO!TQVp~Y z#Dv@1u+l73b8-yYQZgh|7LhP%2Uhiy*}ATg-J>uqQ?GjeXW8FBzoW{UKxrY8TWSiD zQba4OUFQuf>=T4`C~im!uSk1$X`r2*hT|+CZXrZFk0(AdPlD0WBO}f+WM^B|5+0Ny zz)$r!gf_`Jvxi0x^~^DBa8!h+-V?K$i&`BhnJhHVC;{%h+@$3~W>E4ON3Q4Z2P4V! zJ*H2RH?|&r<*iP8o`hCuz5r(%TZnL7)H#^by2U6yr)j$xRP5^37ZS)3;*H?2b&F=z zPTV=k05XFn5RN%5?8-^Y+?x@igkR`J>OV!p-}nB*ect8e78QaywNmtr?@Mbpth3!L zQ&}!XxLea54?C6q_~TrxvN0o~WKXh92$a1ubob(0^)Y_f$Pn%zD?VF>>v$vJ)@}(U zRSA0;i9?l`3cy>C7Cq9PUtxN6ZrIw_-Rs%qkPHact8ZPwmn2gYKGyLD=*QHMxV+wX zMBe+{|MA{s9-apJ%!BhhXbG^MAPXcexPHa`l+|_uB$=4$U1WOzLYBP!#hFvX=xE~_ zsDy66=XWc=8gMF=`5Ew}uMgi5y8=8oq=W$Y6)=oL#kiizduTHs$+Ss(Orr@enV5xZ6YH;E(muP0urKhq zte9o@se8A--i$sDkUDp=G8v^lAq0ou_p*9u%X1YUX|wPVc*`YkO8tEWf}x4O&`6Ni zA_-kUCt5(8nQ6TyLnOooU|#MfQFaK9+-S6B5;ZTra6o|7jvZ`)BsD5#&$(YyZFaar ziT-bE+@BuKpU+j0=|A5ma-!qO|MS;HVvjoU-@?3q{mYP_asvPJ#2|l#9_~Mb0rLOP zv;4dL`cFhde#pEm@n?4bXF&AlZ_yS0Cu{xl5C8q2|Niq2U(kQw{(lb-@~t|2{`=KE uj1B*dJV Date: Fri, 16 Aug 2024 12:25:31 -0700 Subject: [PATCH 16/42] chore: add a few comments and small code fixes in addTransmissibilityCouplingPattern for poromechanics with conforming fractures (#3250) --------- Co-authored-by: Ryan ARONSON (X) --- .../SinglePhasePoromechanicsConformingFractures.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.cpp b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.cpp index 2f0a16dc9ef..5d84d5f205d 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.cpp +++ b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsConformingFractures.cpp @@ -371,7 +371,7 @@ addTransmissibilityCouplingPattern( DomainPartition const & domain, // Get the finite volume method used to compute the stabilization NumericalMethodsManager const & numericalMethodManager = domain.getNumericalMethodManager(); FiniteVolumeManager const & fvManager = numericalMethodManager.getFiniteVolumeManager(); - FluxApproximationBase const & stabilizationMethod = fvManager.getFluxApproximation( this->solidMechanicsSolver()->getStabilizationName() ); + FluxApproximationBase const & fvDiscretization = fvManager.getFluxApproximation( this->flowSolver()->getDiscretizationName() ); SurfaceElementRegion const & fractureRegion = elemManager.getRegion< SurfaceElementRegion >( this->solidMechanicsSolver()->getUniqueFractureRegionName() ); @@ -390,7 +390,7 @@ addTransmissibilityCouplingPattern( DomainPartition const & domain, ArrayOfArraysView< localIndex const > const & elemsToFaces = fractureSubRegion.faceList().toViewConst(); - stabilizationMethod.forStencils< SurfaceElementStencil >( mesh, [&]( SurfaceElementStencil const & stencil ) + fvDiscretization.forStencils< SurfaceElementStencil >( mesh, [&]( SurfaceElementStencil const & stencil ) { forAll< serialPolicy >( stencil.size(), [=] ( localIndex const iconn ) { @@ -405,13 +405,15 @@ addTransmissibilityCouplingPattern( DomainPartition const & domain, for( localIndex kf = 0; kf < 2; ++kf ) { // Set row DOF index - globalIndex const rowIndex = presDofNumber[sei[iconn][1-kf]] - rankOffset; + // Note that the 1-kf index is intentional, as this is coupling the pressure of one face cell + // to the nodes of the adjacent cell + localIndex const rowIndex = presDofNumber[sei[iconn][1-kf]] - rankOffset; if( rowIndex > 0 && rowIndex < pattern.numRows() ) { // Get fracture, face and region/subregion/element indices (for elements on both sides) - localIndex fractureIndex = sei[iconn][kf]; + localIndex const fractureIndex = sei[iconn][kf]; // Get the number of nodes localIndex const numNodesPerFace = faceToNodeMap.sizeOfArray( elemsToFaces[fractureIndex][0] ); From 7eccbb8f7b1a918b6d432dceedcf7b0f37906c57 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Mon, 19 Aug 2024 10:46:02 -0700 Subject: [PATCH 17/42] Add dense LA solvers. --- .../denseLinearAlgebra/CMakeLists.txt | 1 + .../denseLinearAlgebra/denseLASolvers.hpp | 255 ++++++++++++++++++ 2 files changed, 256 insertions(+) create mode 100644 src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp diff --git a/src/coreComponents/denseLinearAlgebra/CMakeLists.txt b/src/coreComponents/denseLinearAlgebra/CMakeLists.txt index 791767bc5c6..55380d8c4a5 100644 --- a/src/coreComponents/denseLinearAlgebra/CMakeLists.txt +++ b/src/coreComponents/denseLinearAlgebra/CMakeLists.txt @@ -1,6 +1,7 @@ # Specify all headers set( denseLinearAlgebra_headers common/layouts.hpp + denseLASolvers.hpp interfaces/blaslapack/BlasLapackFunctions.h interfaces/blaslapack/BlasLapackLA.hpp ) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp new file mode 100644 index 00000000000..793820cd779 --- /dev/null +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -0,0 +1,255 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file denseLASolvers.hpp + */ +#ifndef GEOS_DENSELINEARALGEBRA_DENSELASOLVERS_HPP_ +#define GEOS_DENSELINEARALGEBRA_DENSELASOLVERS_HPP_ + +#include "common/DataTypes.hpp" +#include "denseLinearAlgebra/common/layouts.hpp" + +#include + +namespace geos +{ + +namespace denseLinearAlgebra +{ + +namespace internal +{ +/** + * @brief Solves a 2x2 linear system A * x = b. + * + * This function solves a linear system of the form A * x = b, where A is a 2x2 matrix, + * b is a 2x1 vector, and x is the solution vector. The function checks the sizes + * of the inputs to ensure they conform to the expected dimensions. It also checks that + * the determinant of matrix A is not near zero to avoid solving a singular system. + * + * @tparam MATRIX_TYPE The type of the matrix A. Must support indexing with `A[i][j]`. + * @tparam RHS_TYPE The type of the right-hand side vector b. Must support indexing with `b[i]`. + * @tparam SOL_TYPE The type of the solution vector x. Must support indexing with `x[i]`. + * + * @param[in] A The 2x2 matrix representing the system of equations. Must have size 2x2. + * @param[in] b The 2-element vector representing the right-hand side of the equation. + * @param[out] x The 2-element vector that will store the solution to the system. + */ +template< typename MATRIX_TYPE, + typename RHS_TYPE, + typename SOL_TYPE > +GEOS_HOST_DEVICE +inline +void solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x) +{ + LvArray::tensorOps::internal::checkSizes< 2, 2 >( A ); + LvArray::tensorOps::internal::checkSizes< 2 >( b ); + LvArray::tensorOps::internal::checkSizes< 2 >( x ); + + real64 const detA = A[0][0] * A[1][1] - A[0][1] * A[1][0]; + + GEOS_ERROR_IF_LT_MSG( LvArray::math::abs(detA), LvArray::NumericLimits< real64 >::epsilon;, "Singular system." ); + + x[0] = (A[1][1] * b[0] - A[0][1] * b[1] ) / detA; + x[1] = (A[0][0] * b[1] - A[1][0] * b[0] ) / detA; +} + +/** + * @brief Solves a 3x3 linear system A * x = b. + * + * This function solves a linear system of the form A * x = b, where A is a 3x3 matrix, + * b is a 3x1 vector, and x is the solution vector. The function checks the sizes + * of the inputs to ensure they conform to the expected dimensions. It also checks that + * the determinant of matrix A is not near zero to avoid solving a singular system. + * + * @tparam MATRIX_TYPE The type of the matrix A. Must support indexing with `A[i][j]`. + * @tparam RHS_TYPE The type of the right-hand side vector b. Must support indexing with `b[i]`. + * @tparam SOL_TYPE The type of the solution vector x. Must support indexing with `x[i]`. + * + * @param[in] A The 3x3 matrix representing the system of equations. Must have size 3x3. + * @param[in] b The 3-element vector representing the right-hand side of the equation. + * @param[out] x The 3-element vector that will store the solution to the system. + */ +template< typename MATRIX_TYPE, + typename RHS_TYPE, + typename SOL_TYPE > +GEOS_HOST_DEVICE +inline +void solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x) +{ + LvArray::tensorOps::internal::checkSizes< 3, 3 >( A ); + LvArray::tensorOps::internal::checkSizes< 3 >( b ); + LvArray::tensorOps::internal::checkSizes< 3 >( x ); + + real64 const detA = A[0][0] * (A[1][1] * A[2][2] - A[1][2] * A[2][1]) - + A[0][1] * (A[1][0] * A[2][2] - A[1][2] * A[2][0]) + + A[0][2] * (A[1][0] * A[2][1] - A[1][1] * A[2][0]); + + GEOS_ERROR_IF_LT_MSG( LvArray::math::abs(detA), LvArray::NumericLimits< real64 >::epsilon;, "Singular system." ); + + real64 const detX0 = b[0] * (A[1][1] * A[2][2] - A[1][2] * A[2][1]) - + b[1] * (A[0][1] * A[2][2] - A[0][2] * A[2][1]) + + b[2] * (A[0][1] * A[1][2] - A[0][2] * A[1][1]); + + real64 const detX1 = A[0][0] * (b[1] * A[2][2] - b[2] * A[2][1]) - + A[0][1] * (b[0] * A[2][2] - b[2] * A[2][0]) + + A[0][2] * (b[0] * A[1][2] - b[1] * A[1][0]); + + real64 const detX2 = A[0][0] * (A[1][1] * b[2] - A[1][2] * b[1]) - + A[0][1] * (A[1][0] * b[2] - A[1][2] * b[0]) + + A[0][2] * (A[1][0] * b[1] - A[1][1] * b[0]); + + x[0] = detX0 / detA; + x[1] = detX1 / detA; + x[2] = detX2 / detA; +} + + +template< std::ptrdiff_t N, + typename MATRIX_TYPE, + typename RHS_TYPE, + typename SOL_TYPE > +void solveUpperTriangularSystem( MATRIX_TYPE const & A, RHS_TYPE & b, SOL_TYPE && x ) +{ + for (std::ptrdiff_t i = N - 1; i >= 0; --i) + { + real64 sum = b[i]; + for (std::ptrdiff_t j = i + 1; j < N; ++j) + { + sum -= A[i][j] * x[j]; + } + x[i] = sum / A[i][i]; + } +} + +template< std::ptrdiff_t N, + typename MATRIX_TYPE, + typename RHS_TYPE, + typename SOL_TYPE > +GEOS_HOST_DEVICE +inline +void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) +{ + static_assert( N > 0, "N must be greater than 0." ); + internal::checkSizes< N, N >( matrix ); + internal::checkSizes< N >( b ); + internal::checkSizes< N >( x ); + + + // Step 1: Transform into an upper triangular matrix + + // 1.a. Find the pivot + for (std::ptrdiff_t i = 0; i < N; ++i) + { + std::ptrdiff_t max_row = i; + for (std::ptrdiff_t k = i + 1; k < N; ++k) + { + if (std::abs(A[k][i]) > std::abs(A[max_row][i])) + { + max_row = k; + } + } + + // 1.b. Swap rows + for (std::ptrdiff_t k = i; k < N; ++k) + { + std::swap(A[i][k], A[max_row][k]); + } + std::swap(b[i], b[max_row]); + + GEOS_ERROR_IF_LT_MSG( LvArray::math::abs(A[i][i]), LvArray::NumericLimits< real64 >::epsilon, "Singular matrix." ); + + // 1.c Eliminate entries below the pivot + for (std::ptrdiff_t k = i + 1; k < N; ++k) + { + real64 const scaling = A[k][i] / A[i][i]; + for (std::ptrdiff_t j = i; j < N; ++j) + { + A[k][j] -= scaling * A[i][j]; + } + b[k] -= scaling * b[i]; + } + } + + // Step 2: Backward substitution + solveUpperTriangularSystem( A, b, std::forward(x) ) +} + +/** + * Const version of the function + */ +template< std::ptrdiff_t N, + typename MATRIX_TYPE, + typename RHS_TYPE, + typename SOL_TYPE > +GEOS_HOST_DEVICE +inline +void solveGaussianElimination( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) +{ + real64[N][N] A_copy{}; + real64[N] b_copy{}; + + for(std::ptrdiff_t i=0; i < N; ++j) + { + b_copy[i] = b[i]; + for( std::ptrdiff_t j=0; j < N; ++j ) + { + A_copy[i][j] = A[i][j]; + }; + }; + + solveGaussianElimination( A_copy, b_copy, std::forward(x) ); +} + +}; // internal namespace + + +/** + * + */ +template< std::ptrdiff_t N, + typename MATRIX_TYPE, + typename RHS_TYPE, + typename SOL_TYPE > +GEOS_HOST_DEVICE +inline +void solve( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) +{ + static_assert( N > 0, "N must be greater than 0." ); + internal::checkSizes< N, N >( A ); + internal::checkSizes< N >( b ); + internal::checkSizes< N >( x ); + + if constexpr ( N == 2 ) + { + internal::solveTwoByTwoSystem( A, b, std::forward(x) ); + } + else if constexpr( N == 3 ) + { + internal::solveThreeByThreeSystem( A, b, std::forward(x) ); + } + else + { + internal::solveGaussianElimination< N >( A, b, std::forward(x) ); + } +} + +}; + +}; + + +#endif /*GEOS_DENSELINEARALGEBRA_DENSELASOLVERS_HPP_*/ From d3d6b83fea28d0678edfd5350a0d8813bdf3cc7c Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Mon, 19 Aug 2024 11:00:08 -0700 Subject: [PATCH 18/42] add documentation. --- .../denseLinearAlgebra/denseLASolvers.hpp | 56 ++++++++++++++++++- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index 793820cd779..5955730fe04 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -117,7 +117,20 @@ void solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYP x[2] = detX2 / detA; } - +/** + * @brief Solves a linear system where the matrix is upper triangular using back substitution. + * + * This function solves the linear system `Ax = b`, where `A` is an upper triangular matrix, using + * back substitution. The solution `x` is computed and stored in the provided output vector. + * + * @tparam N The size of the square matrix `A`. + * @tparam MATRIX_TYPE The type of the matrix `A`. + * @tparam RHS_TYPE The type of the right-hand side vector `b`. + * @tparam SOL_TYPE The type of the solution vector `x`. + * @param[in] A The upper triangular matrix representing the coefficients of the system. + * @param[in,out] b The right-hand side vector. It is used to compute the solution, but the values are not preserved. + * @param[out] x The solution vector. The result of solving the system `Ax = b` using back substitution. + */ template< std::ptrdiff_t N, typename MATRIX_TYPE, typename RHS_TYPE, @@ -135,6 +148,21 @@ void solveUpperTriangularSystem( MATRIX_TYPE const & A, RHS_TYPE & b, SOL_TYPE & } } +/** + * @brief Solves a linear system using Gaussian elimination. + * + * This function performs Gaussian elimination on the given matrix `A` and right-hand side vector `b`. + * It transforms the matrix `A` into an upper triangular matrix and then solves for the solution `x` + * using back substitution. + * + * @tparam N The size of the square matrix `A`. + * @tparam MATRIX_TYPE The type of the matrix `A`. + * @tparam RHS_TYPE The type of the right-hand side vector `b`. + * @tparam SOL_TYPE The type of the solution vector `x`. + * @param[in,out] A The matrix to be transformed into an upper triangular matrix. Modified in place. + * @param[in,out] b The right-hand side vector. Modified in place to reflect the transformed system. + * @param[out] x The solution vector. The result of solving the system `Ax = b`. + */ template< std::ptrdiff_t N, typename MATRIX_TYPE, typename RHS_TYPE, @@ -189,7 +217,18 @@ void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) } /** - * Const version of the function + * @brief Const version of the solveGaussianElimination function. + * + * This function solves a linear system using Gaussian elimination, without modifying the original matrix `A` + * and vector `b`. It creates copies of `A` and `b`, performs the elimination, and then solves the system. + * + * @tparam N The size of the square matrix `A`. + * @tparam MATRIX_TYPE The type of the matrix `A`. + * @tparam RHS_TYPE The type of the right-hand side vector `b`. + * @tparam SOL_TYPE The type of the solution vector `x`. + * @param[in] A The constant matrix representing the coefficients of the system. + * @param[in] b The constant right-hand side vector. + * @param[out] x The solution vector. The result of solving the system `Ax = b`. */ template< std::ptrdiff_t N, typename MATRIX_TYPE, @@ -216,9 +255,20 @@ void solveGaussianElimination( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TY }; // internal namespace - /** + * @brief Solves a linear system using the most appropriate method based on the size of the system. + * + * This function determines the appropriate method for solving a linear system `Ax = b` based on + * the size of the matrix `A`. For 2x2 and 3x3 systems, specialized solvers are used. For larger systems, + * Gaussian elimination is employed. * + * @tparam N The size of the square matrix `A`. + * @tparam MATRIX_TYPE The type of the matrix `A`. + * @tparam RHS_TYPE The type of the right-hand side vector `b`. + * @tparam SOL_TYPE The type of the solution vector `x`. + * @param[in] A The constant matrix representing the coefficients of the system. + * @param[in] b The constant right-hand side vector. + * @param[out] x The solution vector. The result of solving the system `Ax = b`. */ template< std::ptrdiff_t N, typename MATRIX_TYPE, From d3c693e2f43b1d7729a3fe82506d53ae236dcccd Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Mon, 19 Aug 2024 11:07:28 -0700 Subject: [PATCH 19/42] add non-const interface. --- .../denseLinearAlgebra/denseLASolvers.hpp | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index 5955730fe04..c6bbfa1c6bb 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -260,7 +260,50 @@ void solveGaussianElimination( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TY * * This function determines the appropriate method for solving a linear system `Ax = b` based on * the size of the matrix `A`. For 2x2 and 3x3 systems, specialized solvers are used. For larger systems, - * Gaussian elimination is employed. + * Gaussian elimination is employed. The matrix and the rhs are modified by the function. + * + * @tparam N The size of the square matrix `A`. + * @tparam MATRIX_TYPE The type of the matrix `A`. + * @tparam RHS_TYPE The type of the right-hand side vector `b`. + * @tparam SOL_TYPE The type of the solution vector `x`. + * @param[in] A The constant matrix representing the coefficients of the system. + * @param[in] b The constant right-hand side vector. + * @param[out] x The solution vector. The result of solving the system `Ax = b`. + */ +template< std::ptrdiff_t N, + typename MATRIX_TYPE, + typename RHS_TYPE, + typename SOL_TYPE > +GEOS_HOST_DEVICE +inline +void solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) +{ + static_assert( N > 0, "N must be greater than 0." ); + internal::checkSizes< N, N >( A ); + internal::checkSizes< N >( b ); + internal::checkSizes< N >( x ); + + if constexpr ( N == 2 ) + { + internal::solveTwoByTwoSystem( A, b, std::forward(x) ); + } + else if constexpr( N == 3 ) + { + internal::solveThreeByThreeSystem( A, b, std::forward(x) ); + } + else + { + internal::solveGaussianElimination< N >( A, b, std::forward(x) ); + } +} + +/** + * @brief Solves a linear system using the most appropriate method based on the size of the system. + * + * This function determines the appropriate method for solving a linear system `Ax = b` based on + * the size of the matrix `A`. For 2x2 and 3x3 systems, specialized solvers are used. For larger systems, + * Gaussian elimination is employed. The matrix `A` and the right-hand side vector `b` are not modified, + * making this function suitable for cases where `A` and `b` need to remain constant. * * @tparam N The size of the square matrix `A`. * @tparam MATRIX_TYPE The type of the matrix `A`. @@ -297,6 +340,7 @@ void solve( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) } } + }; }; From f855e3fbdf9a7c29d2ec48943e44bdbf5faa89de Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Mon, 19 Aug 2024 11:53:33 -0700 Subject: [PATCH 20/42] suggestions from code review --- .../denseLinearAlgebra/denseLASolvers.hpp | 251 +++++++----------- 1 file changed, 95 insertions(+), 156 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index c6bbfa1c6bb..bf714c1303b 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -31,13 +31,13 @@ namespace denseLinearAlgebra { namespace internal -{ +{ /** * @brief Solves a 2x2 linear system A * x = b. * - * This function solves a linear system of the form A * x = b, where A is a 2x2 matrix, - * b is a 2x1 vector, and x is the solution vector. The function checks the sizes - * of the inputs to ensure they conform to the expected dimensions. It also checks that + * This function solves a linear system of the form A * x = b, where A is a 2x2 matrix, + * b is a 2x1 vector, and x is the solution vector. The function checks the sizes + * of the inputs to ensure they conform to the expected dimensions. It also checks that * the determinant of matrix A is not near zero to avoid solving a singular system. * * @tparam MATRIX_TYPE The type of the matrix A. Must support indexing with `A[i][j]`. @@ -48,31 +48,31 @@ namespace internal * @param[in] b The 2-element vector representing the right-hand side of the equation. * @param[out] x The 2-element vector that will store the solution to the system. */ -template< typename MATRIX_TYPE, - typename RHS_TYPE, +template< typename MATRIX_TYPE, + typename RHS_TYPE, typename SOL_TYPE > GEOS_HOST_DEVICE inline -void solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x) +void solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) { - LvArray::tensorOps::internal::checkSizes< 2, 2 >( A ); - LvArray::tensorOps::internal::checkSizes< 2 >( b ); - LvArray::tensorOps::internal::checkSizes< 2 >( x ); + LvArray::tensorOps::internal::checkSizes< 2, 2 >( A ); + LvArray::tensorOps::internal::checkSizes< 2 >( b ); + LvArray::tensorOps::internal::checkSizes< 2 >( x ); - real64 const detA = A[0][0] * A[1][1] - A[0][1] * A[1][0]; + real64 const detA = A[0][0] * A[1][1] - A[0][1] * A[1][0]; - GEOS_ERROR_IF_LT_MSG( LvArray::math::abs(detA), LvArray::NumericLimits< real64 >::epsilon;, "Singular system." ); + GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( detA ), LvArray::NumericLimits< real64 >::epsilon; , "Singular system." ); - x[0] = (A[1][1] * b[0] - A[0][1] * b[1] ) / detA; - x[1] = (A[0][0] * b[1] - A[1][0] * b[0] ) / detA; + x[0] = (A[1][1] * b[0] - A[0][1] * b[1] ) / detA; + x[1] = (A[0][0] * b[1] - A[1][0] * b[0] ) / detA; } /** * @brief Solves a 3x3 linear system A * x = b. * - * This function solves a linear system of the form A * x = b, where A is a 3x3 matrix, - * b is a 3x1 vector, and x is the solution vector. The function checks the sizes - * of the inputs to ensure they conform to the expected dimensions. It also checks that + * This function solves a linear system of the form A * x = b, where A is a 3x3 matrix, + * b is a 3x1 vector, and x is the solution vector. The function checks the sizes + * of the inputs to ensure they conform to the expected dimensions. It also checks that * the determinant of matrix A is not near zero to avoid solving a singular system. * * @tparam MATRIX_TYPE The type of the matrix A. Must support indexing with `A[i][j]`. @@ -83,46 +83,46 @@ void solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && * @param[in] b The 3-element vector representing the right-hand side of the equation. * @param[out] x The 3-element vector that will store the solution to the system. */ -template< typename MATRIX_TYPE, - typename RHS_TYPE, +template< typename MATRIX_TYPE, + typename RHS_TYPE, typename SOL_TYPE > GEOS_HOST_DEVICE inline -void solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x) +void solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) { - LvArray::tensorOps::internal::checkSizes< 3, 3 >( A ); - LvArray::tensorOps::internal::checkSizes< 3 >( b ); - LvArray::tensorOps::internal::checkSizes< 3 >( x ); + LvArray::tensorOps::internal::checkSizes< 3, 3 >( A ); + LvArray::tensorOps::internal::checkSizes< 3 >( b ); + LvArray::tensorOps::internal::checkSizes< 3 >( x ); - real64 const detA = A[0][0] * (A[1][1] * A[2][2] - A[1][2] * A[2][1]) - - A[0][1] * (A[1][0] * A[2][2] - A[1][2] * A[2][0]) + - A[0][2] * (A[1][0] * A[2][1] - A[1][1] * A[2][0]); + real64 const detA = A[0][0] * (A[1][1] * A[2][2] - A[1][2] * A[2][1]) - + A[0][1] * (A[1][0] * A[2][2] - A[1][2] * A[2][0]) + + A[0][2] * (A[1][0] * A[2][1] - A[1][1] * A[2][0]); - GEOS_ERROR_IF_LT_MSG( LvArray::math::abs(detA), LvArray::NumericLimits< real64 >::epsilon;, "Singular system." ); + GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( detA ), LvArray::NumericLimits< real64 >::epsilon; , "Singular system." ); - real64 const detX0 = b[0] * (A[1][1] * A[2][2] - A[1][2] * A[2][1]) - - b[1] * (A[0][1] * A[2][2] - A[0][2] * A[2][1]) + - b[2] * (A[0][1] * A[1][2] - A[0][2] * A[1][1]); + real64 const detX0 = b[0] * (A[1][1] * A[2][2] - A[1][2] * A[2][1]) - + b[1] * (A[0][1] * A[2][2] - A[0][2] * A[2][1]) + + b[2] * (A[0][1] * A[1][2] - A[0][2] * A[1][1]); - real64 const detX1 = A[0][0] * (b[1] * A[2][2] - b[2] * A[2][1]) - - A[0][1] * (b[0] * A[2][2] - b[2] * A[2][0]) + - A[0][2] * (b[0] * A[1][2] - b[1] * A[1][0]); + real64 const detX1 = A[0][0] * (b[1] * A[2][2] - b[2] * A[2][1]) - + A[0][1] * (b[0] * A[2][2] - b[2] * A[2][0]) + + A[0][2] * (b[0] * A[1][2] - b[1] * A[1][0]); - real64 const detX2 = A[0][0] * (A[1][1] * b[2] - A[1][2] * b[1]) - - A[0][1] * (A[1][0] * b[2] - A[1][2] * b[0]) + - A[0][2] * (A[1][0] * b[1] - A[1][1] * b[0]); + real64 const detX2 = A[0][0] * (A[1][1] * b[2] - A[1][2] * b[1]) - + A[0][1] * (A[1][0] * b[2] - A[1][2] * b[0]) + + A[0][2] * (A[1][0] * b[1] - A[1][1] * b[0]); - x[0] = detX0 / detA; - x[1] = detX1 / detA; - x[2] = detX2 / detA; + x[0] = detX0 / detA; + x[1] = detX1 / detA; + x[2] = detX2 / detA; } /** * @brief Solves a linear system where the matrix is upper triangular using back substitution. - * - * This function solves the linear system `Ax = b`, where `A` is an upper triangular matrix, using + * + * This function solves the linear system `Ax = b`, where `A` is an upper triangular matrix, using * back substitution. The solution `x` is computed and stored in the provided output vector. - * + * * @tparam N The size of the square matrix `A`. * @tparam MATRIX_TYPE The type of the matrix `A`. * @tparam RHS_TYPE The type of the right-hand side vector `b`. @@ -131,16 +131,16 @@ void solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYP * @param[in,out] b The right-hand side vector. It is used to compute the solution, but the values are not preserved. * @param[out] x The solution vector. The result of solving the system `Ax = b` using back substitution. */ -template< std::ptrdiff_t N, +template< std::ptrdiff_t N, typename MATRIX_TYPE, typename RHS_TYPE, typename SOL_TYPE > void solveUpperTriangularSystem( MATRIX_TYPE const & A, RHS_TYPE & b, SOL_TYPE && x ) { - for (std::ptrdiff_t i = N - 1; i >= 0; --i) + for( std::ptrdiff_t i = N - 1; i >= 0; --i ) { real64 sum = b[i]; - for (std::ptrdiff_t j = i + 1; j < N; ++j) + for( std::ptrdiff_t j = i + 1; j < N; ++j ) { sum -= A[i][j] * x[j]; } @@ -150,11 +150,11 @@ void solveUpperTriangularSystem( MATRIX_TYPE const & A, RHS_TYPE & b, SOL_TYPE & /** * @brief Solves a linear system using Gaussian elimination. - * + * * This function performs Gaussian elimination on the given matrix `A` and right-hand side vector `b`. * It transforms the matrix `A` into an upper triangular matrix and then solves for the solution `x` * using back substitution. - * + * * @tparam N The size of the square matrix `A`. * @tparam MATRIX_TYPE The type of the matrix `A`. * @tparam RHS_TYPE The type of the right-hand side vector `b`. @@ -163,48 +163,48 @@ void solveUpperTriangularSystem( MATRIX_TYPE const & A, RHS_TYPE & b, SOL_TYPE & * @param[in,out] b The right-hand side vector. Modified in place to reflect the transformed system. * @param[out] x The solution vector. The result of solving the system `Ax = b`. */ -template< std::ptrdiff_t N, +template< std::ptrdiff_t N, typename MATRIX_TYPE, typename RHS_TYPE, typename SOL_TYPE > -GEOS_HOST_DEVICE +GEOS_HOST_DEVICE inline void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) { static_assert( N > 0, "N must be greater than 0." ); internal::checkSizes< N, N >( matrix ); - internal::checkSizes< N >( b ); + internal::checkSizes< N >( b ); internal::checkSizes< N >( x ); - - // Step 1: Transform into an upper triangular matrix - + + // Step 1: Transform into an upper triangular matrix + // 1.a. Find the pivot - for (std::ptrdiff_t i = 0; i < N; ++i) + for( std::ptrdiff_t i = 0; i < N; ++i ) { std::ptrdiff_t max_row = i; - for (std::ptrdiff_t k = i + 1; k < N; ++k) + for( std::ptrdiff_t k = i + 1; k < N; ++k ) { - if (std::abs(A[k][i]) > std::abs(A[max_row][i])) + if( std::abs( A[k][i] ) > std::abs( A[max_row][i] )) { max_row = k; } } // 1.b. Swap rows - for (std::ptrdiff_t k = i; k < N; ++k) + for( std::ptrdiff_t k = i; k < N; ++k ) { - std::swap(A[i][k], A[max_row][k]); + std::swap( A[i][k], A[max_row][k] ); } - std::swap(b[i], b[max_row]); + std::swap( b[i], b[max_row] ); - GEOS_ERROR_IF_LT_MSG( LvArray::math::abs(A[i][i]), LvArray::NumericLimits< real64 >::epsilon, "Singular matrix." ); + GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( A[i][i] ), LvArray::NumericLimits< real64 >::epsilon, "Singular matrix." ); // 1.c Eliminate entries below the pivot - for (std::ptrdiff_t k = i + 1; k < N; ++k) + for( std::ptrdiff_t k = i + 1; k < N; ++k ) { real64 const scaling = A[k][i] / A[i][i]; - for (std::ptrdiff_t j = i; j < N; ++j) + for( std::ptrdiff_t j = i; j < N; ++j ) { A[k][j] -= scaling * A[i][j]; } @@ -213,55 +213,18 @@ void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) } // Step 2: Backward substitution - solveUpperTriangularSystem( A, b, std::forward(x) ) -} - -/** - * @brief Const version of the solveGaussianElimination function. - * - * This function solves a linear system using Gaussian elimination, without modifying the original matrix `A` - * and vector `b`. It creates copies of `A` and `b`, performs the elimination, and then solves the system. - * - * @tparam N The size of the square matrix `A`. - * @tparam MATRIX_TYPE The type of the matrix `A`. - * @tparam RHS_TYPE The type of the right-hand side vector `b`. - * @tparam SOL_TYPE The type of the solution vector `x`. - * @param[in] A The constant matrix representing the coefficients of the system. - * @param[in] b The constant right-hand side vector. - * @param[out] x The solution vector. The result of solving the system `Ax = b`. - */ -template< std::ptrdiff_t N, - typename MATRIX_TYPE, - typename RHS_TYPE, - typename SOL_TYPE > -GEOS_HOST_DEVICE -inline -void solveGaussianElimination( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) -{ - real64[N][N] A_copy{}; - real64[N] b_copy{}; - - for(std::ptrdiff_t i=0; i < N; ++j) - { - b_copy[i] = b[i]; - for( std::ptrdiff_t j=0; j < N; ++j ) - { - A_copy[i][j] = A[i][j]; - }; - }; - - solveGaussianElimination( A_copy, b_copy, std::forward(x) ); + solveUpperTriangularSystem< N >( A, b, std::forward< N >( x ) ) } }; // internal namespace /** * @brief Solves a linear system using the most appropriate method based on the size of the system. - * - * This function determines the appropriate method for solving a linear system `Ax = b` based on - * the size of the matrix `A`. For 2x2 and 3x3 systems, specialized solvers are used. For larger systems, + * + * This function determines the appropriate method for solving a linear system `Ax = b` based on + * the size of the matrix `A`. For 2x2 and 3x3 systems, specialized solvers are used. For larger systems, * Gaussian elimination is employed. The matrix and the rhs are modified by the function. - * + * * @tparam N The size of the square matrix `A`. * @tparam MATRIX_TYPE The type of the matrix `A`. * @tparam RHS_TYPE The type of the right-hand side vector `b`. @@ -270,77 +233,53 @@ void solveGaussianElimination( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TY * @param[in] b The constant right-hand side vector. * @param[out] x The solution vector. The result of solving the system `Ax = b`. */ -template< std::ptrdiff_t N, +template< std::ptrdiff_t N, typename MATRIX_TYPE, typename RHS_TYPE, - typename SOL_TYPE > -GEOS_HOST_DEVICE + typename SOL_TYPE, + bool MODIFY_MATRIX = true > +GEOS_HOST_DEVICE inline void solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) { static_assert( N > 0, "N must be greater than 0." ); + static_assert( N < 10, "N cannot be larger than 9" ); internal::checkSizes< N, N >( A ); - internal::checkSizes< N >( b ); + internal::checkSizes< N >( b ); internal::checkSizes< N >( x ); - - if constexpr ( N == 2 ) - { - internal::solveTwoByTwoSystem( A, b, std::forward(x) ); - } - else if constexpr( N == 3 ) - { - internal::solveThreeByThreeSystem( A, b, std::forward(x) ); - } - else - { - internal::solveGaussianElimination< N >( A, b, std::forward(x) ); - } -} -/** - * @brief Solves a linear system using the most appropriate method based on the size of the system. - * - * This function determines the appropriate method for solving a linear system `Ax = b` based on - * the size of the matrix `A`. For 2x2 and 3x3 systems, specialized solvers are used. For larger systems, - * Gaussian elimination is employed. The matrix `A` and the right-hand side vector `b` are not modified, - * making this function suitable for cases where `A` and `b` need to remain constant. - * - * @tparam N The size of the square matrix `A`. - * @tparam MATRIX_TYPE The type of the matrix `A`. - * @tparam RHS_TYPE The type of the right-hand side vector `b`. - * @tparam SOL_TYPE The type of the solution vector `x`. - * @param[in] A The constant matrix representing the coefficients of the system. - * @param[in] b The constant right-hand side vector. - * @param[out] x The solution vector. The result of solving the system `Ax = b`. - */ -template< std::ptrdiff_t N, - typename MATRIX_TYPE, - typename RHS_TYPE, - typename SOL_TYPE > -GEOS_HOST_DEVICE -inline -void solve( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) -{ - static_assert( N > 0, "N must be greater than 0." ); - internal::checkSizes< N, N >( A ); - internal::checkSizes< N >( b ); - internal::checkSizes< N >( x ); - if constexpr ( N == 2 ) { - internal::solveTwoByTwoSystem( A, b, std::forward(x) ); + internal::solveTwoByTwoSystem( A, b, std::forward< SOL_TYPE >( x ) ); } - else if constexpr( N == 3 ) + else if constexpr ( N == 3 ) { - internal::solveThreeByThreeSystem( A, b, std::forward(x) ); + internal::solveThreeByThreeSystem( A, b, std::forward< SOL_TYPE >( x ) ); } else { - internal::solveGaussianElimination< N >( A, b, std::forward(x) ); + if constexpr ( MODIFY_MATRIX ) + { + internal::solveGaussianElimination< N >( A, b, std::forward< SOL_TYPE >( x ) ); + } + else + { + real64[N][N] A_copy{}; + real64[N] b_copy{}; + + for( std::ptrdiff_t i=0; i < N; ++j ) + { + b_copy[i] = b[i]; + for( std::ptrdiff_t j=0; j < N; ++j ) + { + A_copy[i][j] = A[i][j]; + } + } + internal::solveGaussianElimination< N >( A_copy, b_copy, std::forward< SOL_TYPE >( x ) ); + } } } - }; }; From 026017a39c5498a09590e04a01fef78e5107a078 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Mon, 19 Aug 2024 11:56:45 -0700 Subject: [PATCH 21/42] adjust comments. --- src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index bf714c1303b..a727dea4567 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -229,6 +229,9 @@ void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) * @tparam MATRIX_TYPE The type of the matrix `A`. * @tparam RHS_TYPE The type of the right-hand side vector `b`. * @tparam SOL_TYPE The type of the solution vector `x`. + * @tparam MODIFY_MATRIX Boolean flag indicating whether the input matrix `A` and vector `b` should be modified. + * If `true`, the matrix `A` and vector `b` are modified in place. If `false`, copies of + * `A` and `b` are made, and the original data is left unchanged. * @param[in] A The constant matrix representing the coefficients of the system. * @param[in] b The constant right-hand side vector. * @param[out] x The solution vector. The result of solving the system `Ax = b`. From 640d56b46de90cc5c5c5ac6c671c7ee2fcf05922 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Mon, 19 Aug 2024 21:00:07 -0700 Subject: [PATCH 22/42] fix bugs and add first two unitTests. --- .../denseLinearAlgebra/denseLASolvers.hpp | 82 ++++++------- .../unitTests/CMakeLists.txt | 3 +- .../unitTests/testDenseLASolvers.cpp | 108 ++++++++++++++++++ 3 files changed, 153 insertions(+), 40 deletions(-) create mode 100644 src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index a727dea4567..660b5fc556a 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -21,6 +21,8 @@ #include "common/DataTypes.hpp" #include "denseLinearAlgebra/common/layouts.hpp" +#include "LvArray/src/tensorOps.hpp" +#include "common/logger/Logger.hpp" #include @@ -30,7 +32,7 @@ namespace geos namespace denseLinearAlgebra { -namespace internal +namespace details { /** * @brief Solves a 2x2 linear system A * x = b. @@ -59,12 +61,14 @@ void solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && LvArray::tensorOps::internal::checkSizes< 2 >( b ); LvArray::tensorOps::internal::checkSizes< 2 >( x ); - real64 const detA = A[0][0] * A[1][1] - A[0][1] * A[1][0]; + real64 const detA = LvArray::tensorOps::determinant< 2 >( A ); - GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( detA ), LvArray::NumericLimits< real64 >::epsilon; , "Singular system." ); + GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( detA ), LvArray::NumericLimits< real64 >::epsilon , "Singular system." ); - x[0] = (A[1][1] * b[0] - A[0][1] * b[1] ) / detA; - x[1] = (A[0][0] * b[1] - A[1][0] * b[0] ) / detA; + real64 const invA = 1.0 / detA; + + x[0] = ( A[1][1] * b[0] - A[0][1] * b[1] ) * invA; + x[1] = ( A[0][0] * b[1] - A[1][0] * b[0] ) * invA; } /** @@ -94,27 +98,27 @@ void solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYP LvArray::tensorOps::internal::checkSizes< 3 >( b ); LvArray::tensorOps::internal::checkSizes< 3 >( x ); - real64 const detA = A[0][0] * (A[1][1] * A[2][2] - A[1][2] * A[2][1]) - - A[0][1] * (A[1][0] * A[2][2] - A[1][2] * A[2][0]) + - A[0][2] * (A[1][0] * A[2][1] - A[1][1] * A[2][0]); + real64 const detA = LvArray::tensorOps::determinant< 3 >( A ); + + GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( detA ), LvArray::NumericLimits< real64 >::epsilon, "Singular system." ); - GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( detA ), LvArray::NumericLimits< real64 >::epsilon; , "Singular system." ); + real64 const invA = 1.0 / detA; - real64 const detX0 = b[0] * (A[1][1] * A[2][2] - A[1][2] * A[2][1]) - - b[1] * (A[0][1] * A[2][2] - A[0][2] * A[2][1]) + - b[2] * (A[0][1] * A[1][2] - A[0][2] * A[1][1]); + real64 const detX0 = b[0] * ( A[1][1] * A[2][2] - A[2][1] * A[1][2] ) - + b[1] * ( A[0][1] * A[2][2] - A[0][2] * A[2][1] ) + + b[2] * ( A[0][1] * A[1][2] - A[0][2] * A[1][1] ); - real64 const detX1 = A[0][0] * (b[1] * A[2][2] - b[2] * A[2][1]) - - A[0][1] * (b[0] * A[2][2] - b[2] * A[2][0]) + - A[0][2] * (b[0] * A[1][2] - b[1] * A[1][0]); + real64 const detX1 = A[0][0] * ( b[1] * A[2][2] - b[2] * A[1][2] ) - + A[1][0] * ( b[0] * A[2][2] - b[2] * A[0][2] ) + + A[2][0] * ( b[0] * A[1][2] - b[1] * A[0][2] ); - real64 const detX2 = A[0][0] * (A[1][1] * b[2] - A[1][2] * b[1]) - - A[0][1] * (A[1][0] * b[2] - A[1][2] * b[0]) + - A[0][2] * (A[1][0] * b[1] - A[1][1] * b[0]); + real64 const detX2 = A[0][0] * ( A[1][1] * b[2] - A[2][1] * b[1] ) - + A[1][0] * ( A[0][1] * b[2] - A[2][1] * b[0] ) + + A[2][0] * ( A[0][1] * b[1] - A[1][1] * b[0] ); - x[0] = detX0 / detA; - x[1] = detX1 / detA; - x[2] = detX2 / detA; + x[0] = detX0 * invA; + x[1] = detX1 * invA; + x[2] = detX2 * invA; } /** @@ -128,14 +132,14 @@ void solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYP * @tparam RHS_TYPE The type of the right-hand side vector `b`. * @tparam SOL_TYPE The type of the solution vector `x`. * @param[in] A The upper triangular matrix representing the coefficients of the system. - * @param[in,out] b The right-hand side vector. It is used to compute the solution, but the values are not preserved. + * @param[in] b The right-hand side vector. It is used to compute the solution. * @param[out] x The solution vector. The result of solving the system `Ax = b` using back substitution. */ template< std::ptrdiff_t N, typename MATRIX_TYPE, typename RHS_TYPE, typename SOL_TYPE > -void solveUpperTriangularSystem( MATRIX_TYPE const & A, RHS_TYPE & b, SOL_TYPE && x ) +void solveUpperTriangularSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) { for( std::ptrdiff_t i = N - 1; i >= 0; --i ) { @@ -172,9 +176,9 @@ inline void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) { static_assert( N > 0, "N must be greater than 0." ); - internal::checkSizes< N, N >( matrix ); - internal::checkSizes< N >( b ); - internal::checkSizes< N >( x ); + LvArray::tensorOps::internal::checkSizes< N, N >( A ); + LvArray::tensorOps::internal::checkSizes< N >( b ); + LvArray::tensorOps::internal::checkSizes< N >( x ); // Step 1: Transform into an upper triangular matrix @@ -213,7 +217,7 @@ void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) } // Step 2: Backward substitution - solveUpperTriangularSystem< N >( A, b, std::forward< N >( x ) ) + solveUpperTriangularSystem< N >( A, b, std::forward< N >( x ) ); } }; // internal namespace @@ -232,8 +236,8 @@ void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) * @tparam MODIFY_MATRIX Boolean flag indicating whether the input matrix `A` and vector `b` should be modified. * If `true`, the matrix `A` and vector `b` are modified in place. If `false`, copies of * `A` and `b` are made, and the original data is left unchanged. - * @param[in] A The constant matrix representing the coefficients of the system. - * @param[in] b The constant right-hand side vector. + * @param[in] A The matrix representing the coefficients of the system. + * @param[in] b The right-hand side vector. * @param[out] x The solution vector. The result of solving the system `Ax = b`. */ template< std::ptrdiff_t N, @@ -247,30 +251,30 @@ void solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) { static_assert( N > 0, "N must be greater than 0." ); static_assert( N < 10, "N cannot be larger than 9" ); - internal::checkSizes< N, N >( A ); - internal::checkSizes< N >( b ); - internal::checkSizes< N >( x ); + LvArray::tensorOps::internal::checkSizes< N, N >( A ); + LvArray::tensorOps::internal::checkSizes< N >( b ); + LvArray::tensorOps::internal::checkSizes< N >( x ); if constexpr ( N == 2 ) { - internal::solveTwoByTwoSystem( A, b, std::forward< SOL_TYPE >( x ) ); + details::solveTwoByTwoSystem( A, b, std::forward< SOL_TYPE >( x ) ); } else if constexpr ( N == 3 ) { - internal::solveThreeByThreeSystem( A, b, std::forward< SOL_TYPE >( x ) ); + details::solveThreeByThreeSystem( A, b, std::forward< SOL_TYPE >( x ) ); } else { if constexpr ( MODIFY_MATRIX ) { - internal::solveGaussianElimination< N >( A, b, std::forward< SOL_TYPE >( x ) ); + details::solveGaussianElimination< N >( A, b, std::forward< SOL_TYPE >( x ) ); } else { - real64[N][N] A_copy{}; - real64[N] b_copy{}; + real64 A_copy[N][N]{}; + real64 b_copy[N]{}; - for( std::ptrdiff_t i=0; i < N; ++j ) + for( std::ptrdiff_t i=0; i < N; ++i ) { b_copy[i] = b[i]; for( std::ptrdiff_t j=0; j < N; ++j ) @@ -278,7 +282,7 @@ void solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) A_copy[i][j] = A[i][j]; } } - internal::solveGaussianElimination< N >( A_copy, b_copy, std::forward< SOL_TYPE >( x ) ); + details::solveGaussianElimination< N >( A_copy, b_copy, std::forward< SOL_TYPE >( x ) ); } } } diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/CMakeLists.txt b/src/coreComponents/denseLinearAlgebra/unitTests/CMakeLists.txt index 114dee90aac..5334abc1acb 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/CMakeLists.txt +++ b/src/coreComponents/denseLinearAlgebra/unitTests/CMakeLists.txt @@ -1,6 +1,7 @@ set( serial_tests testBlasLapack.cpp - testSolveLinearSystem.cpp ) + testSolveLinearSystem.cpp + testDenseLASolvers.cpp ) set( dependencyList gtest denseLinearAlgebra ) diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp new file mode 100644 index 00000000000..1cb0a7bd080 --- /dev/null +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp @@ -0,0 +1,108 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 Total, S.A + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2018-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +#include "denseLinearAlgebra/denseLASolvers.hpp" + +// TPL includes +#include + + +using namespace geos; + + +constexpr real64 machinePrecision = 1.0e2 * LvArray::NumericLimits< real64 >::epsilon; + +template< std::ptrdiff_t N > +struct Reference +{}; + +template<> +struct Reference< 2 > +{ + + static constexpr std::ptrdiff_t size() { return 2; } + + static constexpr real64 A[2][2] = { { 2.0, -1.0}, + { 0.0, 1.0 } }; + + static constexpr real64 rhs[2] = {0.0, 1.0}; + + static constexpr real64 solution[2] = {0.5, 1.0}; +}; + +template<> +struct Reference< 3 > +{ + static constexpr std::ptrdiff_t size() { return 3; } + + static constexpr real64 A[3][3] = { { 4.0, 3.0, -2.0}, + { 2.0, -1.0, 5.0 }, + { -1.0, 3.0, -2.0 } }; + + static constexpr real64 rhs[3] = {-8.0, 19.0, -13.0}; + + static constexpr real64 solution[3] = {1.0, -2.0, 3.0}; +}; + +template< typename MATRIX_TYPE, typename VECTOR_TYPE, typename REFERENCE > +void assemble( MATRIX_TYPE & A, VECTOR_TYPE & rhs ) +{ + for( std::ptrdiff_t i=0; i < REFERENCE::size(); ++i ) + { + rhs[i] = REFERENCE::rhs[i]; + for( std::ptrdiff_t j=0; j < REFERENCE::size(); ++j ) + { + A[i][j] = REFERENCE::A[i][j]; + } + } +} + +template< typename REFERENCE > +void test_denseLASolve() +{ + constexpr std::ptrdiff_t N = REFERENCE::size(); + + real64 A[N][N]; + real64 b[N]; + real64 sol[N]; + + assemble< decltype(A), decltype(b), REFERENCE >( A, b ); + + denseLinearAlgebra::solve< N >( A, b, sol ); + + for( std::ptrdiff_t i = 0; i < N; ++i ) + { + EXPECT_NEAR( sol[i], + REFERENCE::solution[i], + machinePrecision ); + } +} + +TEST( denseLASolve, testTwoByTwo ) +{ + test_denseLASolve< Reference< 2 > >(); +} + +TEST( denseLASolve, testThreeByThree ) +{ + test_denseLASolve< Reference< 3 > >(); +} + +int main( int argc, char * * argv ) +{ + ::testing::InitGoogleTest( &argc, argv ); + int const result = RUN_ALL_TESTS(); + return result; +} \ No newline at end of file From 05da4fd8414b69fb9325d4fb645858523a7b33c3 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Mon, 19 Aug 2024 21:57:22 -0700 Subject: [PATCH 23/42] now make system random. --- .../denseLinearAlgebra/denseLASolvers.hpp | 10 +-- .../unitTests/testDenseLASolvers.cpp | 84 ++++++++----------- 2 files changed, 41 insertions(+), 53 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index 660b5fc556a..e62bfa5626a 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -61,9 +61,9 @@ void solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && LvArray::tensorOps::internal::checkSizes< 2 >( b ); LvArray::tensorOps::internal::checkSizes< 2 >( x ); - real64 const detA = LvArray::tensorOps::determinant< 2 >( A ); + real64 const detA = LvArray::tensorOps::determinant< 2 >( A ); - GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( detA ), LvArray::NumericLimits< real64 >::epsilon , "Singular system." ); + GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( detA ), LvArray::NumericLimits< real64 >::epsilon, "Singular system." ); real64 const invA = 1.0 / detA; @@ -98,7 +98,7 @@ void solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYP LvArray::tensorOps::internal::checkSizes< 3 >( b ); LvArray::tensorOps::internal::checkSizes< 3 >( x ); - real64 const detA = LvArray::tensorOps::determinant< 3 >( A ); + real64 const detA = LvArray::tensorOps::determinant< 3 >( A ); GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( detA ), LvArray::NumericLimits< real64 >::epsilon, "Singular system." ); @@ -110,7 +110,7 @@ void solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYP real64 const detX1 = A[0][0] * ( b[1] * A[2][2] - b[2] * A[1][2] ) - A[1][0] * ( b[0] * A[2][2] - b[2] * A[0][2] ) + - A[2][0] * ( b[0] * A[1][2] - b[1] * A[0][2] ); + A[2][0] * ( b[0] * A[1][2] - b[1] * A[0][2] ); real64 const detX2 = A[0][0] * ( A[1][1] * b[2] - A[2][1] * b[1] ) - A[1][0] * ( A[0][1] * b[2] - A[2][1] * b[0] ) + @@ -234,7 +234,7 @@ void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) * @tparam RHS_TYPE The type of the right-hand side vector `b`. * @tparam SOL_TYPE The type of the solution vector `x`. * @tparam MODIFY_MATRIX Boolean flag indicating whether the input matrix `A` and vector `b` should be modified. - * If `true`, the matrix `A` and vector `b` are modified in place. If `false`, copies of + * If `true`, the matrix `A` and vector `b` are modified in place. If `false`, copies of * `A` and `b` are made, and the original data is left unchanged. * @param[in] A The matrix representing the coefficients of the system. * @param[in] b The right-hand side vector. diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp index 1cb0a7bd080..e4137e073d0 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp @@ -18,6 +18,8 @@ // TPL includes #include +#include + using namespace geos; @@ -25,79 +27,65 @@ using namespace geos; constexpr real64 machinePrecision = 1.0e2 * LvArray::NumericLimits< real64 >::epsilon; template< std::ptrdiff_t N > -struct Reference -{}; - -template<> -struct Reference< 2 > +struct LinearSystem { + static constexpr std::ptrdiff_t size() { return N; } - static constexpr std::ptrdiff_t size() { return 2; } - - static constexpr real64 A[2][2] = { { 2.0, -1.0}, - { 0.0, 1.0 } }; - - static constexpr real64 rhs[2] = {0.0, 1.0}; - - static constexpr real64 solution[2] = {0.5, 1.0}; -}; - -template<> -struct Reference< 3 > -{ - static constexpr std::ptrdiff_t size() { return 3; } - - static constexpr real64 A[3][3] = { { 4.0, 3.0, -2.0}, - { 2.0, -1.0, 5.0 }, - { -1.0, 3.0, -2.0 } }; - - static constexpr real64 rhs[3] = {-8.0, 19.0, -13.0}; - - static constexpr real64 solution[3] = {1.0, -2.0, 3.0}; -}; - -template< typename MATRIX_TYPE, typename VECTOR_TYPE, typename REFERENCE > -void assemble( MATRIX_TYPE & A, VECTOR_TYPE & rhs ) -{ - for( std::ptrdiff_t i=0; i < REFERENCE::size(); ++i ) + LinearSystem( short int seed ) { - rhs[i] = REFERENCE::rhs[i]; - for( std::ptrdiff_t j=0; j < REFERENCE::size(); ++j ) + std::mt19937 generator( seed ); + std::uniform_real_distribution< real64 > distribution( -10.0, 10.0 ); + for( ptrdiff_t i=0; i + real64 matrix[N][N]; + real64 solution[N]; + real64 rhs[N]; +}; + +template< typename LINEAR_SYSTEM > void test_denseLASolve() { - constexpr std::ptrdiff_t N = REFERENCE::size(); + constexpr std::ptrdiff_t N = LINEAR_SYSTEM::size(); - real64 A[N][N]; - real64 b[N]; + LINEAR_SYSTEM LS(2024); real64 sol[N]; - assemble< decltype(A), decltype(b), REFERENCE >( A, b ); - - denseLinearAlgebra::solve< N >( A, b, sol ); + denseLinearAlgebra::solve< N >( LS.matrix, LS.rhs, sol ); for( std::ptrdiff_t i = 0; i < N; ++i ) { EXPECT_NEAR( sol[i], - REFERENCE::solution[i], + LS.solution[i], machinePrecision ); } } TEST( denseLASolve, testTwoByTwo ) { - test_denseLASolve< Reference< 2 > >(); + test_denseLASolve< LinearSystem< 2 > >(); } TEST( denseLASolve, testThreeByThree ) { - test_denseLASolve< Reference< 3 > >(); + test_denseLASolve< LinearSystem< 3 > >(); } int main( int argc, char * * argv ) @@ -105,4 +93,4 @@ int main( int argc, char * * argv ) ::testing::InitGoogleTest( &argc, argv ); int const result = RUN_ALL_TESTS(); return result; -} \ No newline at end of file +} From b1d9fe05fc0131db7644b2263592379ff43b27e4 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Tue, 20 Aug 2024 10:28:37 -0700 Subject: [PATCH 24/42] unitTests work fine now. --- .../denseLinearAlgebra/denseLASolvers.hpp | 43 ++++-- .../unitTests/testDenseLASolvers.cpp | 139 +++++++++++++++--- 2 files changed, 145 insertions(+), 37 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index e62bfa5626a..31bb7697803 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -34,6 +34,9 @@ namespace denseLinearAlgebra namespace details { + +constexpr real64 singularMatrixTolerance = 1e2*LvArray::NumericLimits< real64 >::epsilon; + /** * @brief Solves a 2x2 linear system A * x = b. * @@ -49,13 +52,14 @@ namespace details * @param[in] A The 2x2 matrix representing the system of equations. Must have size 2x2. * @param[in] b The 2-element vector representing the right-hand side of the equation. * @param[out] x The 2-element vector that will store the solution to the system. + * @return bool whether the solve succeeded or not. */ template< typename MATRIX_TYPE, typename RHS_TYPE, typename SOL_TYPE > GEOS_HOST_DEVICE inline -void solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) +bool solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) { LvArray::tensorOps::internal::checkSizes< 2, 2 >( A ); LvArray::tensorOps::internal::checkSizes< 2 >( b ); @@ -63,12 +67,15 @@ void solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && real64 const detA = LvArray::tensorOps::determinant< 2 >( A ); - GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( detA ), LvArray::NumericLimits< real64 >::epsilon, "Singular system." ); + if( LvArray::math::abs( detA ) < singularMatrixTolerance ) + return false; real64 const invA = 1.0 / detA; x[0] = ( A[1][1] * b[0] - A[0][1] * b[1] ) * invA; x[1] = ( A[0][0] * b[1] - A[1][0] * b[0] ) * invA; + + return true; } /** @@ -86,13 +93,14 @@ void solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && * @param[in] A The 3x3 matrix representing the system of equations. Must have size 3x3. * @param[in] b The 3-element vector representing the right-hand side of the equation. * @param[out] x The 3-element vector that will store the solution to the system. + * @return bool whether the solve succeeded or not. */ template< typename MATRIX_TYPE, typename RHS_TYPE, typename SOL_TYPE > GEOS_HOST_DEVICE inline -void solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) +bool solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) { LvArray::tensorOps::internal::checkSizes< 3, 3 >( A ); LvArray::tensorOps::internal::checkSizes< 3 >( b ); @@ -100,7 +108,10 @@ void solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYP real64 const detA = LvArray::tensorOps::determinant< 3 >( A ); - GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( detA ), LvArray::NumericLimits< real64 >::epsilon, "Singular system." ); + std::cout << "detA: " << detA << std::endl; + + if( LvArray::math::abs( detA ) < singularMatrixTolerance ) + return false; real64 const invA = 1.0 / detA; @@ -119,6 +130,8 @@ void solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYP x[0] = detX0 * invA; x[1] = detX1 * invA; x[2] = detX2 * invA; + + return true; } /** @@ -166,6 +179,7 @@ void solveUpperTriangularSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_ * @param[in,out] A The matrix to be transformed into an upper triangular matrix. Modified in place. * @param[in,out] b The right-hand side vector. Modified in place to reflect the transformed system. * @param[out] x The solution vector. The result of solving the system `Ax = b`. + * @return bool whether the solve succeeded or not. */ template< std::ptrdiff_t N, typename MATRIX_TYPE, @@ -173,7 +187,7 @@ template< std::ptrdiff_t N, typename SOL_TYPE > GEOS_HOST_DEVICE inline -void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) +bool solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) { static_assert( N > 0, "N must be greater than 0." ); LvArray::tensorOps::internal::checkSizes< N, N >( A ); @@ -202,7 +216,8 @@ void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) } std::swap( b[i], b[max_row] ); - GEOS_ERROR_IF_LT_MSG( LvArray::math::abs( A[i][i] ), LvArray::NumericLimits< real64 >::epsilon, "Singular matrix." ); + if( LvArray::math::abs( A[i][i] ) < singularMatrixTolerance ) + return false; // 1.c Eliminate entries below the pivot for( std::ptrdiff_t k = i + 1; k < N; ++k ) @@ -217,7 +232,9 @@ void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) } // Step 2: Backward substitution - solveUpperTriangularSystem< N >( A, b, std::forward< N >( x ) ); + solveUpperTriangularSystem< N >( A, b, std::forward< SOL_TYPE >( x ) ); + + return true; } }; // internal namespace @@ -239,6 +256,7 @@ void solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) * @param[in] A The matrix representing the coefficients of the system. * @param[in] b The right-hand side vector. * @param[out] x The solution vector. The result of solving the system `Ax = b`. + * @return bool whether the solve succeeded or not. */ template< std::ptrdiff_t N, typename MATRIX_TYPE, @@ -247,7 +265,7 @@ template< std::ptrdiff_t N, bool MODIFY_MATRIX = true > GEOS_HOST_DEVICE inline -void solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) +bool solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) { static_assert( N > 0, "N must be greater than 0." ); static_assert( N < 10, "N cannot be larger than 9" ); @@ -257,17 +275,17 @@ void solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) if constexpr ( N == 2 ) { - details::solveTwoByTwoSystem( A, b, std::forward< SOL_TYPE >( x ) ); + return details::solveTwoByTwoSystem( A, b, std::forward< SOL_TYPE >( x ) ); } else if constexpr ( N == 3 ) { - details::solveThreeByThreeSystem( A, b, std::forward< SOL_TYPE >( x ) ); + return details::solveThreeByThreeSystem( A, b, std::forward< SOL_TYPE >( x ) ); } else { if constexpr ( MODIFY_MATRIX ) { - details::solveGaussianElimination< N >( A, b, std::forward< SOL_TYPE >( x ) ); + return details::solveGaussianElimination< N >( A, b, std::forward< SOL_TYPE >( x ) ); } else { @@ -282,11 +300,10 @@ void solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) A_copy[i][j] = A[i][j]; } } - details::solveGaussianElimination< N >( A_copy, b_copy, std::forward< SOL_TYPE >( x ) ); + return details::solveGaussianElimination< N >( A_copy, b_copy, std::forward< SOL_TYPE >( x ) ); } } } - }; }; diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp index e4137e073d0..59763c33d0c 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp @@ -20,27 +20,43 @@ #include - using namespace geos; constexpr real64 machinePrecision = 1.0e2 * LvArray::NumericLimits< real64 >::epsilon; + template< std::ptrdiff_t N > struct LinearSystem { - static constexpr std::ptrdiff_t size() { return N; } +public: + real64 matrix[N][N]; + real64 solution[N]; + real64 rhs[N]; +}; - LinearSystem( short int seed ) +template< std::ptrdiff_t N > +struct InvertibleLinearSystem : public LinearSystem< N > +{ + using LinearSystem< N >::matrix; + using LinearSystem< N >::solution; + using LinearSystem< N >::rhs; + InvertibleLinearSystem( short int seed ) { - std::mt19937 generator( seed ); + std::mt19937 generator( seed ); std::uniform_real_distribution< real64 > distribution( -10.0, 10.0 ); + std::uniform_real_distribution< real64 > perturbation( -20.0, 20.0 ); for( ptrdiff_t i=0; i +struct SingularLinearSystem : public LinearSystem< N > +{ + using LinearSystem< N >::matrix; + using LinearSystem< N >::solution; + using LinearSystem< N >::rhs; + SingularLinearSystem( short int seed ) + { + std::mt19937 generator( seed ); + std::uniform_real_distribution< real64 > distribution( -10.0, 10.0 ); + for( ptrdiff_t i=0; i -void test_denseLASolve() +template< typename N > +class DenseLinearSolverTest : public ::testing::Test { - constexpr std::ptrdiff_t N = LINEAR_SYSTEM::size(); +public: - LINEAR_SYSTEM LS(2024); - real64 sol[N]; + static constexpr std::ptrdiff_t size = N::value; - denseLinearAlgebra::solve< N >( LS.matrix, LS.rhs, sol ); + DenseLinearSolverTest() = default; + ~DenseLinearSolverTest() override = default; - for( std::ptrdiff_t i = 0; i < N; ++i ) + void test_solve() { - EXPECT_NEAR( sol[i], - LS.solution[i], - machinePrecision ); + InvertibleLinearSystem< size > LS( 2024 ); + real64 sol[size]; + + bool const success = denseLinearAlgebra::solve< size >( LS.matrix, LS.rhs, sol ); + + EXPECT_TRUE( success ); + + for( std::ptrdiff_t i = 0; i < size; ++i ) + { + EXPECT_NEAR( sol[i], + LS.solution[i], + machinePrecision ); + } } -} + void test_singularSystem() + { + SingularLinearSystem< size > LS( 2024 ); + real64 sol[size]; + + bool const success = denseLinearAlgebra::solve< size >( LS.matrix, LS.rhs, sol ); + + EXPECT_FALSE( success ); + } + +}; -TEST( denseLASolve, testTwoByTwo ) +using Dimensions = ::testing::Types< std::integral_constant< std::ptrdiff_t, 2 >, + std::integral_constant< std::ptrdiff_t, 3 >, + std::integral_constant< std::ptrdiff_t, 4 >, + std::integral_constant< std::ptrdiff_t, 5 >, + std::integral_constant< std::ptrdiff_t, 6 >, + std::integral_constant< std::ptrdiff_t, 7 >, + std::integral_constant< std::ptrdiff_t, 8 >, + std::integral_constant< std::ptrdiff_t, 9 > >; + +class NameGenerator { - test_denseLASolve< LinearSystem< 2 > >(); -} +public: + template< typename T > + static std::string GetName( int ) + { + if constexpr (T::value == 2) return "TwoByTwo"; + if constexpr (T::value == 3) return "ThreeByThree"; + if constexpr (T::value == 4) return "FourByFour"; + if constexpr (T::value == 5) return "FiveByFive"; + if constexpr (T::value == 6) return "SixBySix"; + if constexpr (T::value == 7) return "SevenBySeven"; + if constexpr (T::value == 8) return "EightByEight"; + if constexpr (T::value == 9) return "NineByNine"; + } +}; + +TYPED_TEST_SUITE( DenseLinearSolverTest, Dimensions, NameGenerator ); -TEST( denseLASolve, testThreeByThree ) +TYPED_TEST( DenseLinearSolverTest, testDenseLA ) { - test_denseLASolve< LinearSystem< 3 > >(); + this->test_solve(); + this->test_singularSystem(); } int main( int argc, char * * argv ) From fcf8d6fe6bd35078cc47347d6bdc6c5020b46118 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Tue, 20 Aug 2024 10:30:42 -0700 Subject: [PATCH 25/42] clean up --- src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index 31bb7697803..c0f0e01d05c 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -108,8 +108,6 @@ bool solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYP real64 const detA = LvArray::tensorOps::determinant< 3 >( A ); - std::cout << "detA: " << detA << std::endl; - if( LvArray::math::abs( detA ) < singularMatrixTolerance ) return false; @@ -194,7 +192,6 @@ bool solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) LvArray::tensorOps::internal::checkSizes< N >( b ); LvArray::tensorOps::internal::checkSizes< N >( x ); - // Step 1: Transform into an upper triangular matrix // 1.a. Find the pivot From ba99762812b6412f13e4c7e166046506cb000ef3 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Tue, 20 Aug 2024 10:44:51 -0700 Subject: [PATCH 26/42] small fixes. --- .../denseLinearAlgebra/unitTests/testDenseLASolvers.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp index 59763c33d0c..cd4889049ce 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp @@ -52,12 +52,9 @@ struct InvertibleLinearSystem : public LinearSystem< N > for( ptrdiff_t j=0; j Date: Tue, 20 Aug 2024 10:48:34 -0700 Subject: [PATCH 27/42] Update src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp --- src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index c0f0e01d05c..296b3d4b7d7 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -234,7 +234,7 @@ bool solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) return true; } -}; // internal namespace +}; // details namespace /** * @brief Solves a linear system using the most appropriate method based on the size of the system. From b48de388e22edc2eebba6829450658519d89d75a Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Tue, 20 Aug 2024 15:39:45 -0700 Subject: [PATCH 28/42] add test utils. --- .../unitTests/testDenseLASolvers.cpp | 59 ++++++++++++++----- .../unitTests/testUtils.hpp | 34 +++++++++++ 2 files changed, 79 insertions(+), 14 deletions(-) create mode 100644 src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp index cd4889049ce..c08e1ea3445 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp @@ -14,17 +14,24 @@ */ #include "denseLinearAlgebra/denseLASolvers.hpp" +#include "common/GEOS_RAJA_Interface.hpp" +#include "testUtils.hpp" // TPL includes #include #include -using namespace geos; +namespace geos +{ +namespace denseLinearAlgebra +{ -constexpr real64 machinePrecision = 1.0e2 * LvArray::NumericLimits< real64 >::epsilon; +namespace testing +{ +constexpr real64 machinePrecision = 1.0e2 * LvArray::NumericLimits< real64 >::epsilon; template< std::ptrdiff_t N > struct LinearSystem @@ -117,27 +124,44 @@ class DenseLinearSolverTest : public ::testing::Test void test_solve() { InvertibleLinearSystem< size > LS( 2024 ); - real64 sol[size]; - bool const success = denseLinearAlgebra::solve< size >( LS.matrix, LS.rhs, sol ); + forAll< parallelDevicePolicy<> >( 1, GEOS_HOST_DEVICE [=]( int ) + { + real64 sol[size]; + real64 matrix[size][size]; + real64 rhs[size]; - EXPECT_TRUE( success ); + LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); + LvArray::tensorOps::copy< size >( rhs, LS.rhs ); + bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); - for( std::ptrdiff_t i = 0; i < size; ++i ) - { - EXPECT_NEAR( sol[i], - LS.solution[i], - machinePrecision ); - } + EXPECT_TRUE( success ); + + for( std::ptrdiff_t i = 0; i < size; ++i ) + { + PORTABLE_EXPECT_NEAR( sol[i], + LS.solution[i], + machinePrecision ); + } + } ); } void test_singularSystem() { SingularLinearSystem< size > LS( 2024 ); - real64 sol[size]; - bool const success = denseLinearAlgebra::solve< size >( LS.matrix, LS.rhs, sol ); + forAll< parallelDevicePolicy<> >( 1, GEOS_HOST_DEVICE [=]( int ) + { + + real64 sol[size]; + real64 matrix[size][size]; + real64 rhs[size]; + + LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); + LvArray::tensorOps::copy< size >( rhs, LS.rhs ); + bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); - EXPECT_FALSE( success ); + EXPECT_FALSE( success ); + } ); } }; @@ -182,3 +206,10 @@ int main( int argc, char * * argv ) int const result = RUN_ALL_TESTS(); return result; } + + +} // testing + +} // denseLinearAlgebra + +} // namespace geos \ No newline at end of file diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp b/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp new file mode 100644 index 00000000000..3da0632f7c5 --- /dev/null +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp @@ -0,0 +1,34 @@ + +#include "common/GeosxMacros.hpp" + +// TPL includes +#include + + +namespace geos +{ +namespace denseLinearAlgebra +{ +namespace testing +{ + + +#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) +#define PORTABLE_EXPECT_EQ( L, R ) GEOS_ERROR_IF_NE( L, R ) +#define PORTABLE_EXPECT_NEAR( L, R, EPSILON ) LVARRAY_ERROR_IF_GE_MSG( LvArray::math::abs( ( L ) -( R ) ), EPSILON, \ + STRINGIZE( L ) " = " << ( L ) << "\n" << STRINGIZE( R ) " = " << ( R ) ); +#define PORTABLE_EXPECT_TRUE( value ) GEOS_ERROR_IF( value, "should be true" ); +#define PORTABLE_EXPECT_FALSE( value ) GEOS_ERROR_IF( !value, "should be false" ); +#else +#define PORTABLE_EXPECT_EQ( L, R ) EXPECT_EQ( L, R ) +#define PORTABLE_EXPECT_NEAR( L, R, EPSILON ) EXPECT_LE( LvArray::math::abs( ( L ) -( R ) ), EPSILON ) << \ + STRINGIZE( L ) " = " << ( L ) << "\n" << STRINGIZE( R ) " = " << ( R ); +#define PORTABLE_EXPECT_TRUE( value ) EXPECT_TRUE( value ) +#define PORTABLE_EXPECT_FALSE( value ) EXPECT_FALSE( value ) +#endif + +} //namespace testing + +} // namespace denseLinearAlgebra + +} // namespace geos From 987caf7611166ed8003ab4f53501ffeeb44bbfb1 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Tue, 20 Aug 2024 16:35:58 -0700 Subject: [PATCH 29/42] use GEOS_DEVICE_COMPILE macro instead --- .../unitTests/testDenseLASolvers.cpp | 60 +++++++++---------- .../unitTests/testUtils.hpp | 8 +-- 2 files changed, 32 insertions(+), 36 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp index c08e1ea3445..2c3dc24d867 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp @@ -24,10 +24,8 @@ namespace geos { - namespace denseLinearAlgebra { - namespace testing { @@ -75,7 +73,6 @@ struct InvertibleLinearSystem : public LinearSystem< N > } } }; - template< std::ptrdiff_t N > struct SingularLinearSystem : public LinearSystem< N > { @@ -126,42 +123,42 @@ class DenseLinearSolverTest : public ::testing::Test InvertibleLinearSystem< size > LS( 2024 ); forAll< parallelDevicePolicy<> >( 1, GEOS_HOST_DEVICE [=]( int ) - { - real64 sol[size]; - real64 matrix[size][size]; - real64 rhs[size]; - - LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); - LvArray::tensorOps::copy< size >( rhs, LS.rhs ); - bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); - - EXPECT_TRUE( success ); - - for( std::ptrdiff_t i = 0; i < size; ++i ) - { - PORTABLE_EXPECT_NEAR( sol[i], - LS.solution[i], - machinePrecision ); - } - } ); + { + real64 sol[size]; + real64 matrix[size][size]; + real64 rhs[size]; + + LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); + LvArray::tensorOps::copy< size >( rhs, LS.rhs ); + bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); + + EXPECT_TRUE( success ); + + for( std::ptrdiff_t i = 0; i < size; ++i ) + { + PORTABLE_EXPECT_NEAR( sol[i], + LS.solution[i], + machinePrecision ); + } + } ); } void test_singularSystem() { SingularLinearSystem< size > LS( 2024 ); forAll< parallelDevicePolicy<> >( 1, GEOS_HOST_DEVICE [=]( int ) - { + { - real64 sol[size]; - real64 matrix[size][size]; - real64 rhs[size]; + real64 sol[size]; + real64 matrix[size][size]; + real64 rhs[size]; - LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); - LvArray::tensorOps::copy< size >( rhs, LS.rhs ); - bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); + LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); + LvArray::tensorOps::copy< size >( rhs, LS.rhs ); + bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); - EXPECT_FALSE( success ); - } ); + EXPECT_FALSE( success ); + } ); } }; @@ -207,9 +204,8 @@ int main( int argc, char * * argv ) return result; } - } // testing } // denseLinearAlgebra -} // namespace geos \ No newline at end of file +} // namespace geos diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp b/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp index 3da0632f7c5..e28f68ac555 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp @@ -8,23 +8,23 @@ namespace geos { namespace denseLinearAlgebra -{ +{ namespace testing { -#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) +#if defined(GEOS_DEVICE_COMPILE) #define PORTABLE_EXPECT_EQ( L, R ) GEOS_ERROR_IF_NE( L, R ) #define PORTABLE_EXPECT_NEAR( L, R, EPSILON ) LVARRAY_ERROR_IF_GE_MSG( LvArray::math::abs( ( L ) -( R ) ), EPSILON, \ STRINGIZE( L ) " = " << ( L ) << "\n" << STRINGIZE( R ) " = " << ( R ) ); #define PORTABLE_EXPECT_TRUE( value ) GEOS_ERROR_IF( value, "should be true" ); -#define PORTABLE_EXPECT_FALSE( value ) GEOS_ERROR_IF( !value, "should be false" ); +#define PORTABLE_EXPECT_FALSE( value ) GEOS_ERROR_IF( !value, "should be false" ); #else #define PORTABLE_EXPECT_EQ( L, R ) EXPECT_EQ( L, R ) #define PORTABLE_EXPECT_NEAR( L, R, EPSILON ) EXPECT_LE( LvArray::math::abs( ( L ) -( R ) ), EPSILON ) << \ STRINGIZE( L ) " = " << ( L ) << "\n" << STRINGIZE( R ) " = " << ( R ); #define PORTABLE_EXPECT_TRUE( value ) EXPECT_TRUE( value ) -#define PORTABLE_EXPECT_FALSE( value ) EXPECT_FALSE( value ) +#define PORTABLE_EXPECT_FALSE( value ) EXPECT_FALSE( value ) #endif } //namespace testing From 1d2e95c98c5f4e2ffd096bc8568e969f0181200f Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Tue, 20 Aug 2024 16:38:30 -0700 Subject: [PATCH 30/42] remove commas. --- src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index 296b3d4b7d7..8b4143f439a 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -234,7 +234,7 @@ bool solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) return true; } -}; // details namespace +} // details namespace /** * @brief Solves a linear system using the most appropriate method based on the size of the system. @@ -301,9 +301,10 @@ bool solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) } } } -}; -}; +} // denseLinearAlgebra + +} // geos #endif /*GEOS_DENSELINEARALGEBRA_DENSELASOLVERS_HPP_*/ From 691afbbf1617bfcbed63f8d7f27ea260fdfbca4d Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Tue, 20 Aug 2024 16:40:57 -0700 Subject: [PATCH 31/42] modify tolerance. --- .../denseLinearAlgebra/unitTests/testDenseLASolvers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp index 2c3dc24d867..bd4f8df752f 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp @@ -29,7 +29,7 @@ namespace denseLinearAlgebra namespace testing { -constexpr real64 machinePrecision = 1.0e2 * LvArray::NumericLimits< real64 >::epsilon; +constexpr real64 machinePrecision = 1.0e3 * LvArray::NumericLimits< real64 >::epsilon; template< std::ptrdiff_t N > struct LinearSystem From 9c4594aedf647955c096a81965ad7bafed492282 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Tue, 20 Aug 2024 16:55:54 -0700 Subject: [PATCH 32/42] uncrustify --- .../unitTests/testDenseLASolvers.cpp | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp index bd4f8df752f..d98aa85c9ae 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp @@ -122,43 +122,43 @@ class DenseLinearSolverTest : public ::testing::Test { InvertibleLinearSystem< size > LS( 2024 ); - forAll< parallelDevicePolicy<> >( 1, GEOS_HOST_DEVICE [=]( int ) - { - real64 sol[size]; - real64 matrix[size][size]; - real64 rhs[size]; - - LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); - LvArray::tensorOps::copy< size >( rhs, LS.rhs ); - bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); - - EXPECT_TRUE( success ); - - for( std::ptrdiff_t i = 0; i < size; ++i ) - { - PORTABLE_EXPECT_NEAR( sol[i], - LS.solution[i], - machinePrecision ); - } - } ); + forAll< parallelDevicePolicy<> >( 1, [=] GEOS_HOST_DEVICE ( int ) + { + real64 sol[size]; + real64 matrix[size][size]; + real64 rhs[size]; + + LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); + LvArray::tensorOps::copy< size >( rhs, LS.rhs ); + bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); + + EXPECT_TRUE( success ); + + for( std::ptrdiff_t i = 0; i < size; ++i ) + { + PORTABLE_EXPECT_NEAR( sol[i], + LS.solution[i], + machinePrecision ); + } + } ); } void test_singularSystem() { SingularLinearSystem< size > LS( 2024 ); - forAll< parallelDevicePolicy<> >( 1, GEOS_HOST_DEVICE [=]( int ) - { + forAll< parallelDevicePolicy<> >( 1, [=] GEOS_HOST_DEVICE ( int ) + { - real64 sol[size]; - real64 matrix[size][size]; - real64 rhs[size]; + real64 sol[size]; + real64 matrix[size][size]; + real64 rhs[size]; - LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); - LvArray::tensorOps::copy< size >( rhs, LS.rhs ); - bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); + LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); + LvArray::tensorOps::copy< size >( rhs, LS.rhs ); + bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); - EXPECT_FALSE( success ); - } ); + EXPECT_FALSE( success ); + } ); } }; From a710414242ce39697c4ba577a0bcd21b4467a550 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Tue, 20 Aug 2024 17:05:06 -0700 Subject: [PATCH 33/42] portable bool check. --- .../denseLinearAlgebra/unitTests/testDenseLASolvers.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp index d98aa85c9ae..83e7684e249 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp @@ -132,7 +132,7 @@ class DenseLinearSolverTest : public ::testing::Test LvArray::tensorOps::copy< size >( rhs, LS.rhs ); bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); - EXPECT_TRUE( success ); + PORTABLE_EXPECT_TRUE( success ); for( std::ptrdiff_t i = 0; i < size; ++i ) { @@ -157,7 +157,7 @@ class DenseLinearSolverTest : public ::testing::Test LvArray::tensorOps::copy< size >( rhs, LS.rhs ); bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); - EXPECT_FALSE( success ); + PORTABLE_EXPECT_FALSE( success ); } ); } From 66b1bde23db2e1f140d117c94b5f5c9af097c02e Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Tue, 20 Aug 2024 17:09:46 -0700 Subject: [PATCH 34/42] forgotten GEOS_HOST_DEVICE --- src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index 8b4143f439a..adc3cd2e4d1 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -150,6 +150,8 @@ template< std::ptrdiff_t N, typename MATRIX_TYPE, typename RHS_TYPE, typename SOL_TYPE > +GEOS_HOST_DEVICE +inline void solveUpperTriangularSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) { for( std::ptrdiff_t i = N - 1; i >= 0; --i ) From 0f9d1284dab7440b2404a3c9885422ceaff0582a Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Tue, 20 Aug 2024 17:34:38 -0700 Subject: [PATCH 35/42] remove std::swap --- .../denseLinearAlgebra/denseLASolvers.hpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index adc3cd2e4d1..3594a374dc4 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -202,7 +202,7 @@ bool solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) std::ptrdiff_t max_row = i; for( std::ptrdiff_t k = i + 1; k < N; ++k ) { - if( std::abs( A[k][i] ) > std::abs( A[max_row][i] )) + if( LvArray::math::abs( A[k][i] ) > LvArray::math::abs( A[max_row][i] )) { max_row = k; } @@ -211,9 +211,16 @@ bool solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) // 1.b. Swap rows for( std::ptrdiff_t k = i; k < N; ++k ) { - std::swap( A[i][k], A[max_row][k] ); + // std::swap( A[i][k], A[max_row][k] ); + real64 const temp = A[max_row][k]; + A[max_row][k] = A[i][k]; + A[i][k] = temp; } - std::swap( b[i], b[max_row] ); + // std::swap( b[i], b[max_row] ); cannot be done on device + real64 const temp = b[i]; + b[i] = b[max_row]; + b[max_row] = temp; + if( LvArray::math::abs( A[i][i] ) < singularMatrixTolerance ) return false; From 71d48a383d5605913cbc2ff2034e02ece525c84f Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Wed, 21 Aug 2024 10:54:54 -0700 Subject: [PATCH 36/42] use int instead of bool to avoid cuda error. --- .../denseLinearAlgebra/denseLASolvers.hpp | 36 ++++++------ .../unitTests/testDenseLASolvers.cpp | 56 ++++++++++++++++--- .../unitTests/testUtils.hpp | 4 +- 3 files changed, 67 insertions(+), 29 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index 3594a374dc4..b0bf28fb7ca 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -52,14 +52,14 @@ constexpr real64 singularMatrixTolerance = 1e2*LvArray::NumericLimits< real64 >: * @param[in] A The 2x2 matrix representing the system of equations. Must have size 2x2. * @param[in] b The 2-element vector representing the right-hand side of the equation. * @param[out] x The 2-element vector that will store the solution to the system. - * @return bool whether the solve succeeded or not. + * @return int that sepcifies whether the solve succeeded (1) or not (0). */ template< typename MATRIX_TYPE, typename RHS_TYPE, typename SOL_TYPE > GEOS_HOST_DEVICE inline -bool solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) +int solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) { LvArray::tensorOps::internal::checkSizes< 2, 2 >( A ); LvArray::tensorOps::internal::checkSizes< 2 >( b ); @@ -68,14 +68,14 @@ bool solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && real64 const detA = LvArray::tensorOps::determinant< 2 >( A ); if( LvArray::math::abs( detA ) < singularMatrixTolerance ) - return false; + return 0; real64 const invA = 1.0 / detA; x[0] = ( A[1][1] * b[0] - A[0][1] * b[1] ) * invA; x[1] = ( A[0][0] * b[1] - A[1][0] * b[0] ) * invA; - return true; + return 1; } /** @@ -93,14 +93,14 @@ bool solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && * @param[in] A The 3x3 matrix representing the system of equations. Must have size 3x3. * @param[in] b The 3-element vector representing the right-hand side of the equation. * @param[out] x The 3-element vector that will store the solution to the system. - * @return bool whether the solve succeeded or not. + * @return int that sepcifies whether the solve succeeded (1) or not (0). */ template< typename MATRIX_TYPE, typename RHS_TYPE, typename SOL_TYPE > GEOS_HOST_DEVICE inline -bool solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) +int solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) { LvArray::tensorOps::internal::checkSizes< 3, 3 >( A ); LvArray::tensorOps::internal::checkSizes< 3 >( b ); @@ -109,7 +109,7 @@ bool solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYP real64 const detA = LvArray::tensorOps::determinant< 3 >( A ); if( LvArray::math::abs( detA ) < singularMatrixTolerance ) - return false; + return 0; real64 const invA = 1.0 / detA; @@ -129,7 +129,7 @@ bool solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYP x[1] = detX1 * invA; x[2] = detX2 * invA; - return true; + return 1; } /** @@ -179,7 +179,7 @@ void solveUpperTriangularSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_ * @param[in,out] A The matrix to be transformed into an upper triangular matrix. Modified in place. * @param[in,out] b The right-hand side vector. Modified in place to reflect the transformed system. * @param[out] x The solution vector. The result of solving the system `Ax = b`. - * @return bool whether the solve succeeded or not. + * @return int that sepcifies whether the solve succeeded (1) or not (0). */ template< std::ptrdiff_t N, typename MATRIX_TYPE, @@ -187,7 +187,7 @@ template< std::ptrdiff_t N, typename SOL_TYPE > GEOS_HOST_DEVICE inline -bool solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) +int solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) { static_assert( N > 0, "N must be greater than 0." ); LvArray::tensorOps::internal::checkSizes< N, N >( A ); @@ -220,10 +220,10 @@ bool solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) real64 const temp = b[i]; b[i] = b[max_row]; b[max_row] = temp; - + if( LvArray::math::abs( A[i][i] ) < singularMatrixTolerance ) - return false; + return 0; // 1.c Eliminate entries below the pivot for( std::ptrdiff_t k = i + 1; k < N; ++k ) @@ -240,7 +240,7 @@ bool solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) // Step 2: Backward substitution solveUpperTriangularSystem< N >( A, b, std::forward< SOL_TYPE >( x ) ); - return true; + return 1; } } // details namespace @@ -256,22 +256,22 @@ bool solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) * @tparam MATRIX_TYPE The type of the matrix `A`. * @tparam RHS_TYPE The type of the right-hand side vector `b`. * @tparam SOL_TYPE The type of the solution vector `x`. - * @tparam MODIFY_MATRIX Boolean flag indicating whether the input matrix `A` and vector `b` should be modified. - * If `true`, the matrix `A` and vector `b` are modified in place. If `false`, copies of + * @tparam MODIFY_MATRIX intean flag indicating whether the input matrix `A` and vector `b` should be modified. + * If `1`, the matrix `A` and vector `b` are modified in place. If `0`, copies of * `A` and `b` are made, and the original data is left unchanged. * @param[in] A The matrix representing the coefficients of the system. * @param[in] b The right-hand side vector. * @param[out] x The solution vector. The result of solving the system `Ax = b`. - * @return bool whether the solve succeeded or not. + * @return int that sepcifies whether the solve succeeded (1) or not (0). */ template< std::ptrdiff_t N, typename MATRIX_TYPE, typename RHS_TYPE, typename SOL_TYPE, - bool MODIFY_MATRIX = true > + int MODIFY_MATRIX = 1 > GEOS_HOST_DEVICE inline -bool solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) +int solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) { static_assert( N > 0, "N must be greater than 0." ); static_assert( N < 10, "N cannot be larger than 9" ); diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp index 83e7684e249..b0cd4c1eb4e 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp @@ -32,7 +32,7 @@ namespace testing constexpr real64 machinePrecision = 1.0e3 * LvArray::NumericLimits< real64 >::epsilon; template< std::ptrdiff_t N > -struct LinearSystem +class LinearSystem { public: real64 matrix[N][N]; @@ -41,11 +41,28 @@ struct LinearSystem }; template< std::ptrdiff_t N > -struct InvertibleLinearSystem : public LinearSystem< N > +class InvertibleLinearSystem : public LinearSystem< N > { +public: using LinearSystem< N >::matrix; using LinearSystem< N >::solution; using LinearSystem< N >::rhs; + + /// Default copy constructor + InvertibleLinearSystem( InvertibleLinearSystem const & ) = default; + + /// Default move constructor + InvertibleLinearSystem( InvertibleLinearSystem && ) = default; + + /// Deleted default constructor + InvertibleLinearSystem() = delete; + + /// Deleted copy assignment operator + InvertibleLinearSystem & operator=( InvertibleLinearSystem const & ) = delete; + + /// Deleted move assignment operator + InvertibleLinearSystem & operator=( InvertibleLinearSystem && ) = delete; + InvertibleLinearSystem( short int seed ) { std::mt19937 generator( seed ); @@ -73,12 +90,30 @@ struct InvertibleLinearSystem : public LinearSystem< N > } } }; + template< std::ptrdiff_t N > -struct SingularLinearSystem : public LinearSystem< N > +class SingularLinearSystem : public LinearSystem< N > { +public: using LinearSystem< N >::matrix; using LinearSystem< N >::solution; using LinearSystem< N >::rhs; + + /// Default copy constructor + SingularLinearSystem( SingularLinearSystem const & ) = default; + + /// Default move constructor + SingularLinearSystem( SingularLinearSystem && ) = default; + + /// Deleted default constructor + SingularLinearSystem() = delete; + + /// Deleted copy assignment operator + SingularLinearSystem & operator=( SingularLinearSystem const & ) = delete; + + /// Deleted move assignment operator + SingularLinearSystem & operator=( SingularLinearSystem && ) = delete; + SingularLinearSystem( short int seed ) { std::mt19937 generator( seed ); @@ -122,15 +157,17 @@ class DenseLinearSolverTest : public ::testing::Test { InvertibleLinearSystem< size > LS( 2024 ); + // GEOS_UNUSED_VAR(LS); + forAll< parallelDevicePolicy<> >( 1, [=] GEOS_HOST_DEVICE ( int ) { - real64 sol[size]; - real64 matrix[size][size]; - real64 rhs[size]; + real64 sol[size]{}; + real64 matrix[size][size]{}; + real64 rhs[size]{}; LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); LvArray::tensorOps::copy< size >( rhs, LS.rhs ); - bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); + int const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); PORTABLE_EXPECT_TRUE( success ); @@ -155,7 +192,7 @@ class DenseLinearSolverTest : public ::testing::Test LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); LvArray::tensorOps::copy< size >( rhs, LS.rhs ); - bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); + int const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); PORTABLE_EXPECT_FALSE( success ); } ); @@ -172,6 +209,7 @@ using Dimensions = ::testing::Types< std::integral_constant< std::ptrdiff_t, 2 > std::integral_constant< std::ptrdiff_t, 8 >, std::integral_constant< std::ptrdiff_t, 9 > >; + class NameGenerator { public: @@ -194,7 +232,7 @@ TYPED_TEST_SUITE( DenseLinearSolverTest, Dimensions, NameGenerator ); TYPED_TEST( DenseLinearSolverTest, testDenseLA ) { this->test_solve(); - this->test_singularSystem(); + // this->test_singularSystem(); } int main( int argc, char * * argv ) diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp b/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp index e28f68ac555..82a94ca86f3 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp @@ -17,8 +17,8 @@ namespace testing #define PORTABLE_EXPECT_EQ( L, R ) GEOS_ERROR_IF_NE( L, R ) #define PORTABLE_EXPECT_NEAR( L, R, EPSILON ) LVARRAY_ERROR_IF_GE_MSG( LvArray::math::abs( ( L ) -( R ) ), EPSILON, \ STRINGIZE( L ) " = " << ( L ) << "\n" << STRINGIZE( R ) " = " << ( R ) ); -#define PORTABLE_EXPECT_TRUE( value ) GEOS_ERROR_IF( value, "should be true" ); -#define PORTABLE_EXPECT_FALSE( value ) GEOS_ERROR_IF( !value, "should be false" ); +#define PORTABLE_EXPECT_TRUE( value ) LVARRAY_ERROR_IF( value==0, "should be true" ) +#define PORTABLE_EXPECT_FALSE( value ) LVARRAY_ERROR_IF( value==1, "should be false" ) #else #define PORTABLE_EXPECT_EQ( L, R ) EXPECT_EQ( L, R ) #define PORTABLE_EXPECT_NEAR( L, R, EPSILON ) EXPECT_LE( LvArray::math::abs( ( L ) -( R ) ), EPSILON ) << \ From b529c54261a6c79f11d53ea7dc17bc8978221416 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Wed, 21 Aug 2024 11:38:38 -0700 Subject: [PATCH 37/42] revert to bool. --- .../denseLinearAlgebra/denseLASolvers.hpp | 38 ++++++++--------- .../unitTests/testDenseLASolvers.cpp | 42 +++---------------- .../unitTests/testUtils.hpp | 4 +- 3 files changed, 27 insertions(+), 57 deletions(-) diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp index b0bf28fb7ca..d45ae76accb 100644 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp @@ -52,14 +52,14 @@ constexpr real64 singularMatrixTolerance = 1e2*LvArray::NumericLimits< real64 >: * @param[in] A The 2x2 matrix representing the system of equations. Must have size 2x2. * @param[in] b The 2-element vector representing the right-hand side of the equation. * @param[out] x The 2-element vector that will store the solution to the system. - * @return int that sepcifies whether the solve succeeded (1) or not (0). + * @return bool that sepcifies whether the solve succeeded (1) or not (0). */ template< typename MATRIX_TYPE, typename RHS_TYPE, typename SOL_TYPE > GEOS_HOST_DEVICE inline -int solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) +bool solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) { LvArray::tensorOps::internal::checkSizes< 2, 2 >( A ); LvArray::tensorOps::internal::checkSizes< 2 >( b ); @@ -68,14 +68,14 @@ int solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && real64 const detA = LvArray::tensorOps::determinant< 2 >( A ); if( LvArray::math::abs( detA ) < singularMatrixTolerance ) - return 0; + return false; real64 const invA = 1.0 / detA; x[0] = ( A[1][1] * b[0] - A[0][1] * b[1] ) * invA; x[1] = ( A[0][0] * b[1] - A[1][0] * b[0] ) * invA; - return 1; + return true; } /** @@ -93,14 +93,14 @@ int solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && * @param[in] A The 3x3 matrix representing the system of equations. Must have size 3x3. * @param[in] b The 3-element vector representing the right-hand side of the equation. * @param[out] x The 3-element vector that will store the solution to the system. - * @return int that sepcifies whether the solve succeeded (1) or not (0). + * @return bool that sepcifies whether the solve succeeded (1) or not (0). */ template< typename MATRIX_TYPE, typename RHS_TYPE, typename SOL_TYPE > GEOS_HOST_DEVICE inline -int solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) +bool solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) { LvArray::tensorOps::internal::checkSizes< 3, 3 >( A ); LvArray::tensorOps::internal::checkSizes< 3 >( b ); @@ -109,7 +109,7 @@ int solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE real64 const detA = LvArray::tensorOps::determinant< 3 >( A ); if( LvArray::math::abs( detA ) < singularMatrixTolerance ) - return 0; + return false; real64 const invA = 1.0 / detA; @@ -129,7 +129,7 @@ int solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE x[1] = detX1 * invA; x[2] = detX2 * invA; - return 1; + return true; } /** @@ -169,17 +169,17 @@ void solveUpperTriangularSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_ * @brief Solves a linear system using Gaussian elimination. * * This function performs Gaussian elimination on the given matrix `A` and right-hand side vector `b`. - * It transforms the matrix `A` into an upper triangular matrix and then solves for the solution `x` + * It transforms the matrix `A` boolo an upper triangular matrix and then solves for the solution `x` * using back substitution. * * @tparam N The size of the square matrix `A`. * @tparam MATRIX_TYPE The type of the matrix `A`. * @tparam RHS_TYPE The type of the right-hand side vector `b`. * @tparam SOL_TYPE The type of the solution vector `x`. - * @param[in,out] A The matrix to be transformed into an upper triangular matrix. Modified in place. + * @param[in,out] A The matrix to be transformed boolo an upper triangular matrix. Modified in place. * @param[in,out] b The right-hand side vector. Modified in place to reflect the transformed system. * @param[out] x The solution vector. The result of solving the system `Ax = b`. - * @return int that sepcifies whether the solve succeeded (1) or not (0). + * @return bool that sepcifies whether the solve succeeded (1) or not (0). */ template< std::ptrdiff_t N, typename MATRIX_TYPE, @@ -187,14 +187,14 @@ template< std::ptrdiff_t N, typename SOL_TYPE > GEOS_HOST_DEVICE inline -int solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) +bool solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) { static_assert( N > 0, "N must be greater than 0." ); LvArray::tensorOps::internal::checkSizes< N, N >( A ); LvArray::tensorOps::internal::checkSizes< N >( b ); LvArray::tensorOps::internal::checkSizes< N >( x ); - // Step 1: Transform into an upper triangular matrix + // Step 1: Transform boolo an upper triangular matrix // 1.a. Find the pivot for( std::ptrdiff_t i = 0; i < N; ++i ) @@ -223,7 +223,7 @@ int solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) if( LvArray::math::abs( A[i][i] ) < singularMatrixTolerance ) - return 0; + return false; // 1.c Eliminate entries below the pivot for( std::ptrdiff_t k = i + 1; k < N; ++k ) @@ -240,7 +240,7 @@ int solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) // Step 2: Backward substitution solveUpperTriangularSystem< N >( A, b, std::forward< SOL_TYPE >( x ) ); - return 1; + return true; } } // details namespace @@ -256,22 +256,22 @@ int solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) * @tparam MATRIX_TYPE The type of the matrix `A`. * @tparam RHS_TYPE The type of the right-hand side vector `b`. * @tparam SOL_TYPE The type of the solution vector `x`. - * @tparam MODIFY_MATRIX intean flag indicating whether the input matrix `A` and vector `b` should be modified. + * @tparam MODIFY_MATRIX boolean flag indicating whether the input matrix `A` and vector `b` should be modified. * If `1`, the matrix `A` and vector `b` are modified in place. If `0`, copies of * `A` and `b` are made, and the original data is left unchanged. * @param[in] A The matrix representing the coefficients of the system. * @param[in] b The right-hand side vector. * @param[out] x The solution vector. The result of solving the system `Ax = b`. - * @return int that sepcifies whether the solve succeeded (1) or not (0). + * @return bool that sepcifies whether the solve succeeded (1) or not (0). */ template< std::ptrdiff_t N, typename MATRIX_TYPE, typename RHS_TYPE, typename SOL_TYPE, - int MODIFY_MATRIX = 1 > + bool MODIFY_MATRIX = 1 > GEOS_HOST_DEVICE inline -int solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) +bool solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) { static_assert( N > 0, "N must be greater than 0." ); static_assert( N < 10, "N cannot be larger than 9" ); diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp index b0cd4c1eb4e..6f8bbd08bbd 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp @@ -48,21 +48,6 @@ class InvertibleLinearSystem : public LinearSystem< N > using LinearSystem< N >::solution; using LinearSystem< N >::rhs; - /// Default copy constructor - InvertibleLinearSystem( InvertibleLinearSystem const & ) = default; - - /// Default move constructor - InvertibleLinearSystem( InvertibleLinearSystem && ) = default; - - /// Deleted default constructor - InvertibleLinearSystem() = delete; - - /// Deleted copy assignment operator - InvertibleLinearSystem & operator=( InvertibleLinearSystem const & ) = delete; - - /// Deleted move assignment operator - InvertibleLinearSystem & operator=( InvertibleLinearSystem && ) = delete; - InvertibleLinearSystem( short int seed ) { std::mt19937 generator( seed ); @@ -99,21 +84,6 @@ class SingularLinearSystem : public LinearSystem< N > using LinearSystem< N >::solution; using LinearSystem< N >::rhs; - /// Default copy constructor - SingularLinearSystem( SingularLinearSystem const & ) = default; - - /// Default move constructor - SingularLinearSystem( SingularLinearSystem && ) = default; - - /// Deleted default constructor - SingularLinearSystem() = delete; - - /// Deleted copy assignment operator - SingularLinearSystem & operator=( SingularLinearSystem const & ) = delete; - - /// Deleted move assignment operator - SingularLinearSystem & operator=( SingularLinearSystem && ) = delete; - SingularLinearSystem( short int seed ) { std::mt19937 generator( seed ); @@ -167,7 +137,7 @@ class DenseLinearSolverTest : public ::testing::Test LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); LvArray::tensorOps::copy< size >( rhs, LS.rhs ); - int const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); + bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); PORTABLE_EXPECT_TRUE( success ); @@ -186,13 +156,13 @@ class DenseLinearSolverTest : public ::testing::Test forAll< parallelDevicePolicy<> >( 1, [=] GEOS_HOST_DEVICE ( int ) { - real64 sol[size]; - real64 matrix[size][size]; - real64 rhs[size]; + real64 sol[size]{}; + real64 matrix[size][size]{}; + real64 rhs[size]{}; LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); LvArray::tensorOps::copy< size >( rhs, LS.rhs ); - int const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); + bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); PORTABLE_EXPECT_FALSE( success ); } ); @@ -232,7 +202,7 @@ TYPED_TEST_SUITE( DenseLinearSolverTest, Dimensions, NameGenerator ); TYPED_TEST( DenseLinearSolverTest, testDenseLA ) { this->test_solve(); - // this->test_singularSystem(); + this->test_singularSystem(); } int main( int argc, char * * argv ) diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp b/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp index 82a94ca86f3..17f093a569b 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp +++ b/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp @@ -17,8 +17,8 @@ namespace testing #define PORTABLE_EXPECT_EQ( L, R ) GEOS_ERROR_IF_NE( L, R ) #define PORTABLE_EXPECT_NEAR( L, R, EPSILON ) LVARRAY_ERROR_IF_GE_MSG( LvArray::math::abs( ( L ) -( R ) ), EPSILON, \ STRINGIZE( L ) " = " << ( L ) << "\n" << STRINGIZE( R ) " = " << ( R ) ); -#define PORTABLE_EXPECT_TRUE( value ) LVARRAY_ERROR_IF( value==0, "should be true" ) -#define PORTABLE_EXPECT_FALSE( value ) LVARRAY_ERROR_IF( value==1, "should be false" ) +#define PORTABLE_EXPECT_TRUE( value ) GEOS_ERROR_IF( !value, "should be true" ) +#define PORTABLE_EXPECT_FALSE( value ) GEOS_ERROR_IF( value, "should be false" ) #else #define PORTABLE_EXPECT_EQ( L, R ) EXPECT_EQ( L, R ) #define PORTABLE_EXPECT_NEAR( L, R, EPSILON ) EXPECT_LE( LvArray::math::abs( ( L ) -( R ) ), EPSILON ) << \ From ab375a4de6d4d81c6f3b574a7e092f501675449c Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Wed, 21 Aug 2024 12:29:55 -0700 Subject: [PATCH 38/42] Fix prerequisites. --- src/docs/sphinx/buildGuide/Prerequisites.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/docs/sphinx/buildGuide/Prerequisites.rst b/src/docs/sphinx/buildGuide/Prerequisites.rst index 78251f997d5..9bbe5ee6174 100644 --- a/src/docs/sphinx/buildGuide/Prerequisites.rst +++ b/src/docs/sphinx/buildGuide/Prerequisites.rst @@ -10,10 +10,10 @@ List of prerequisites Minimal requirements: -- `CMake `_ build system generator (3.17+). +- `CMake `_ build system generator (3.23.1+). - build tools (`GNU make `_ or `ninja `_ on Linux, XCode on MacOS). -- a C++ compiler with full c++17 standard support (`gcc `_ 8.3+ or `clang `_ 10.0+ are recommended). -- `python `_ (2.7+ or 3.6+). +- a C++ compiler with full c++17 standard support (`gcc `_ 12+ or `clang `_ 13.0+ are recommended). +- `python `_ 3.9-3.11 (versions 3.12+ are untested). - :code:`zlib`, :code:`blas` and :code:`lapack` libraries - any compatible MPI runtime and compilers (if building with MPI) From 4234a8079c67709851c7516e3378cd3bf6f9e05a Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Wed, 21 Aug 2024 13:48:54 -0700 Subject: [PATCH 39/42] Modify build guide. --- src/docs/sphinx/QuickStart.rst | 80 +++++++++++++++++++++++----------- 1 file changed, 55 insertions(+), 25 deletions(-) diff --git a/src/docs/sphinx/QuickStart.rst b/src/docs/sphinx/QuickStart.rst index 71b94c08e02..d966a415142 100644 --- a/src/docs/sphinx/QuickStart.rst +++ b/src/docs/sphinx/QuickStart.rst @@ -218,8 +218,8 @@ If you are using an older version, you may need to add ``git lfs pull`` after `` The clone ``https://github.com/GEOS-DEV/GEOS.git`` becomes ``git clone git@github.com:GEOS-DEV/GEOS.git``. You may also be willing to insert your credentials in the command line (less secure) ``git clone https://${USER}:${TOKEN}@github.com/GEOS-DEV/GEOS.git``. -Configuration -================ +Configuration +============= At a minimum, you will need a relatively recent compiler suite installed on your system (e.g. `GCC `_, `Clang `_) as well as `CMake `_. If you want to run jobs using MPI-based parallelism, you will also need an MPI implementation (e.g. `OpenMPI `_, `MVAPICH `_). @@ -237,6 +237,8 @@ If something goes wrong, the first thing the support team will ask you for is th Here, you may need to replace ``cpp`` with the full path to the C++ compiler you would like to use, depending on how your path and any aliases are configured. +Defining a host-config file +--------------------------- GEOS compilations are driven by a cmake ``host-config`` file, which tells the build system about the compilers you are using, where various packages reside, and what options you want to enable. We have created a number of default hostconfig files for common systems. You should browse them to see if any are close to your needs: @@ -301,55 +303,83 @@ The final line is related to our unit test suite. See the :ref:`BuildGuide` for Compilation ================== -We will begin by compiling the TPLs, followed by the main code. -If you work on an HPC system with other GEOS developers, check with them to see if the TPLs have already been compiled in a shared directory. -If this is the case, you can skip ahead to just compiling the main code. -If you are working on your own machine, you will need to compile both. +The configuration process for both the third-party libraries (TPLs) and GEOS is managed through a Python script called ``config-build.py``. This script simplifies and automates the setup by configuring the build ad install directories and by running CMake. +The ``config-build.py`` script has several command-line options that can be visualized by using the ``-h`` option. -We strongly suggest that GEOS and TPLs be built with the same hostconfig file. -Below, we assume that you keep it in, say, ``GEOS/host-configs/your-platform.cmake``, but this is up to you. +.. code-block:: sh + + cd thirdPartyLibs + python scripts/config-build.py -h -We begin with the third-party libraries, and use a python ``config-build.py`` script to configure and build all of the TPLs. -Note that we will request a Release build type, which will enable various optimizations. -The other option is a Debug build, which allows for debugging but will be much slower in production mode. -The TPLS will then be built in a build directory named consistently with your hostconfig file. +Here, we will only use some basic options and rely on default values for many others. + +.. note:: + + It is strongly recommended that GEOS and TPLs be configured using the same host configuration file. Below, we assume that you keep this file in, for example, ``GEOS/host-configs/your-platform.cmake``, but the exact location is up to you. + +Compiling the TPLs +------------------- + +.. note:: + + If you are working on an HPC system with other GEOS developers, check with them to see if the TPLs have already been compiled in a shared directory. If this is the case, you can skip ahead to just compiling the main code. + If you are working on your own machine, you will need to configure and compile both the TPLs and the main code. + +We begin by configuring the third-party libraries (TPLs) using the ``config-build.py`` script. This script sets up the build directory and runs CMake to generate the necessary build files. .. code-block:: sh cd thirdPartyLibs python scripts/config-build.py -hc ../GEOS/host-configs/your-platform.cmake -bt Release + +The TPLs will be configured in a build directory named consistently with your host configuration file, i.e., ``build-your-platform-release``. + +.. code-block:: sh + cd build-your-platform-release make -Note that building all of the TPLs can take quite a while, so you may want to go get a cup of coffee at this point. -Also note that you should *not* use a parallel ``make -j N`` command to try and speed up the build time. +.. note:: + + Building all of the TPLs can take quite a while, so you may want to go get a cup of coffee at this point. + Also note that you should *not* use a parallel ``make -j N`` command to try and speed up the build time. -The next step is to compile the main code. -Again, the ``config-build.py`` sets up cmake for you, so the process is very similar. +Compiling GEOS +------------------- + +Once the TPLs have been compiler, the next step is to compile the main code. The ``config-build.py`` script is used to configure the build directory. Before running the configuration script, ensure that the path to the TPLs is correctly set in the host configuration file by setting + +.. code-block:: sh + set(GEOS_TPL_DIR "/path/to/your/TPL/installation/dir" CACHE PATH "") + +If you have followed these instructions, the TPLs are installed at the default location, i.e. ``/path/to/your/TPL/thirdPartyLibs/install-your-platform-release``. .. code-block:: sh cd ../../GEOS python scripts/config-build.py -hc host-configs/your-platform.cmake -bt Release - cd build-your-platform-release - make -j4 - make install -The host-config file is the place to set all relevant configuration options. -Note that the path to the previously installed third party libraries is typically specified within this file. An alternative is to set the path ``GEOS_TPL_DIR`` via a cmake command line option, e.g. - .. code-block:: sh python scripts/config-build.py -hc host-configs/your-platform.cmake -bt Release -D GEOS_TPL_DIR=/full/path/to/thirdPartyLibs -We highly recommend using full paths, rather than relative paths, whenever possible. +.. note:: + + We highly recommend using full paths, rather than relative paths, whenever possible. + +Once the configuration process is completed, we proceed with the compilation of the main code and the instalation of geos. + +.. code-block:: sh + + cd build-your-platform-release + make -j4 + make install + The parallel ``make -j 4`` will use four processes for compilation, which can substantially speed up the build if you have a multi-processor machine. You can adjust this value to match the number of processors available on your machine. The ``make install`` command then installs GEOS to a default location unless otherwise specified. - - If all goes well, a ``geosx`` executable should now be available: .. code-block:: sh From b4865e3a56921abe91016fc227c26e01d1c076d2 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Wed, 21 Aug 2024 13:57:00 -0700 Subject: [PATCH 40/42] add nte about folders being generated. --- src/docs/sphinx/QuickStart.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/docs/sphinx/QuickStart.rst b/src/docs/sphinx/QuickStart.rst index d966a415142..5b86a947870 100644 --- a/src/docs/sphinx/QuickStart.rst +++ b/src/docs/sphinx/QuickStart.rst @@ -303,16 +303,17 @@ The final line is related to our unit test suite. See the :ref:`BuildGuide` for Compilation ================== -The configuration process for both the third-party libraries (TPLs) and GEOS is managed through a Python script called ``config-build.py``. This script simplifies and automates the setup by configuring the build ad install directories and by running CMake. -The ``config-build.py`` script has several command-line options that can be visualized by using the ``-h`` option. +The configuration process for both the third-party libraries (TPLs) and GEOS is managed through a Python script called ``config-build.py``. This script simplifies and automates the setup by configuring the build ad install directories and by running CMake based on the options set in the host-config file +which is passed as a command-lne argument. The ``config-build.py`` script has several command-line options. Here, we will only use some basic options and rely on default values for many others. During this build process there wil be automatically generated build and install directories for both the TPLs and the main code, +with names consistent with the name specified in the host-config by the variable ``CONFIG_NAME``, i.e. ``build-your-platform-release`` and ``install-your-platform-release``. + +All options can be visualized by running .. code-block:: sh cd thirdPartyLibs python scripts/config-build.py -h -Here, we will only use some basic options and rely on default values for many others. - .. note:: It is strongly recommended that GEOS and TPLs be configured using the same host configuration file. Below, we assume that you keep this file in, for example, ``GEOS/host-configs/your-platform.cmake``, but the exact location is up to you. From 94d83d41d11102302c2b38009df1ac8858f21072 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Wed, 21 Aug 2024 14:09:12 -0700 Subject: [PATCH 41/42] remove unwanted changes. --- .../denseLinearAlgebra/CMakeLists.txt | 1 - .../unitTests/CMakeLists.txt | 3 +- .../unitTests/testDenseLASolvers.cpp | 219 ------------------ src/docs/sphinx/QuickStart.rst | 2 +- 4 files changed, 2 insertions(+), 223 deletions(-) delete mode 100644 src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp diff --git a/src/coreComponents/denseLinearAlgebra/CMakeLists.txt b/src/coreComponents/denseLinearAlgebra/CMakeLists.txt index 55380d8c4a5..791767bc5c6 100644 --- a/src/coreComponents/denseLinearAlgebra/CMakeLists.txt +++ b/src/coreComponents/denseLinearAlgebra/CMakeLists.txt @@ -1,7 +1,6 @@ # Specify all headers set( denseLinearAlgebra_headers common/layouts.hpp - denseLASolvers.hpp interfaces/blaslapack/BlasLapackFunctions.h interfaces/blaslapack/BlasLapackLA.hpp ) diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/CMakeLists.txt b/src/coreComponents/denseLinearAlgebra/unitTests/CMakeLists.txt index 5334abc1acb..114dee90aac 100644 --- a/src/coreComponents/denseLinearAlgebra/unitTests/CMakeLists.txt +++ b/src/coreComponents/denseLinearAlgebra/unitTests/CMakeLists.txt @@ -1,7 +1,6 @@ set( serial_tests testBlasLapack.cpp - testSolveLinearSystem.cpp - testDenseLASolvers.cpp ) + testSolveLinearSystem.cpp ) set( dependencyList gtest denseLinearAlgebra ) diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp b/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp deleted file mode 100644 index 6f8bbd08bbd..00000000000 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testDenseLASolvers.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/* - * ------------------------------------------------------------------------------------------------------------ - * SPDX-License-Identifier: LGPL-2.1-only - * - * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC - * Copyright (c) 2018-2024 Total, S.A - * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University - * Copyright (c) 2018-2024 Chevron - * Copyright (c) 2019- GEOS/GEOSX Contributors - * All rights reserved - * - * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. - * ------------------------------------------------------------------------------------------------------------ - */ - -#include "denseLinearAlgebra/denseLASolvers.hpp" -#include "common/GEOS_RAJA_Interface.hpp" -#include "testUtils.hpp" - -// TPL includes -#include - -#include - -namespace geos -{ -namespace denseLinearAlgebra -{ -namespace testing -{ - -constexpr real64 machinePrecision = 1.0e3 * LvArray::NumericLimits< real64 >::epsilon; - -template< std::ptrdiff_t N > -class LinearSystem -{ -public: - real64 matrix[N][N]; - real64 solution[N]; - real64 rhs[N]; -}; - -template< std::ptrdiff_t N > -class InvertibleLinearSystem : public LinearSystem< N > -{ -public: - using LinearSystem< N >::matrix; - using LinearSystem< N >::solution; - using LinearSystem< N >::rhs; - - InvertibleLinearSystem( short int seed ) - { - std::mt19937 generator( seed ); - std::uniform_real_distribution< real64 > distribution( -10.0, 10.0 ); - std::uniform_real_distribution< real64 > perturbation( -20.0, 20.0 ); - for( ptrdiff_t i=0; i -class SingularLinearSystem : public LinearSystem< N > -{ -public: - using LinearSystem< N >::matrix; - using LinearSystem< N >::solution; - using LinearSystem< N >::rhs; - - SingularLinearSystem( short int seed ) - { - std::mt19937 generator( seed ); - std::uniform_real_distribution< real64 > distribution( -10.0, 10.0 ); - for( ptrdiff_t i=0; i -class DenseLinearSolverTest : public ::testing::Test -{ -public: - - static constexpr std::ptrdiff_t size = N::value; - - DenseLinearSolverTest() = default; - ~DenseLinearSolverTest() override = default; - - void test_solve() - { - InvertibleLinearSystem< size > LS( 2024 ); - - // GEOS_UNUSED_VAR(LS); - - forAll< parallelDevicePolicy<> >( 1, [=] GEOS_HOST_DEVICE ( int ) - { - real64 sol[size]{}; - real64 matrix[size][size]{}; - real64 rhs[size]{}; - - LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); - LvArray::tensorOps::copy< size >( rhs, LS.rhs ); - bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); - - PORTABLE_EXPECT_TRUE( success ); - - for( std::ptrdiff_t i = 0; i < size; ++i ) - { - PORTABLE_EXPECT_NEAR( sol[i], - LS.solution[i], - machinePrecision ); - } - } ); - } - void test_singularSystem() - { - SingularLinearSystem< size > LS( 2024 ); - - forAll< parallelDevicePolicy<> >( 1, [=] GEOS_HOST_DEVICE ( int ) - { - - real64 sol[size]{}; - real64 matrix[size][size]{}; - real64 rhs[size]{}; - - LvArray::tensorOps::copy< size, size >( matrix, LS.matrix ); - LvArray::tensorOps::copy< size >( rhs, LS.rhs ); - bool const success = denseLinearAlgebra::solve< size >( matrix, rhs, sol ); - - PORTABLE_EXPECT_FALSE( success ); - } ); - } - -}; - -using Dimensions = ::testing::Types< std::integral_constant< std::ptrdiff_t, 2 >, - std::integral_constant< std::ptrdiff_t, 3 >, - std::integral_constant< std::ptrdiff_t, 4 >, - std::integral_constant< std::ptrdiff_t, 5 >, - std::integral_constant< std::ptrdiff_t, 6 >, - std::integral_constant< std::ptrdiff_t, 7 >, - std::integral_constant< std::ptrdiff_t, 8 >, - std::integral_constant< std::ptrdiff_t, 9 > >; - - -class NameGenerator -{ -public: - template< typename T > - static std::string GetName( int ) - { - if constexpr (T::value == 2) return "TwoByTwo"; - if constexpr (T::value == 3) return "ThreeByThree"; - if constexpr (T::value == 4) return "FourByFour"; - if constexpr (T::value == 5) return "FiveByFive"; - if constexpr (T::value == 6) return "SixBySix"; - if constexpr (T::value == 7) return "SevenBySeven"; - if constexpr (T::value == 8) return "EightByEight"; - if constexpr (T::value == 9) return "NineByNine"; - } -}; - -TYPED_TEST_SUITE( DenseLinearSolverTest, Dimensions, NameGenerator ); - -TYPED_TEST( DenseLinearSolverTest, testDenseLA ) -{ - this->test_solve(); - this->test_singularSystem(); -} - -int main( int argc, char * * argv ) -{ - ::testing::InitGoogleTest( &argc, argv ); - int const result = RUN_ALL_TESTS(); - return result; -} - -} // testing - -} // denseLinearAlgebra - -} // namespace geos diff --git a/src/docs/sphinx/QuickStart.rst b/src/docs/sphinx/QuickStart.rst index 5b86a947870..093bbba0b2a 100644 --- a/src/docs/sphinx/QuickStart.rst +++ b/src/docs/sphinx/QuickStart.rst @@ -381,7 +381,7 @@ The parallel ``make -j 4`` will use four processes for compilation, which can su You can adjust this value to match the number of processors available on your machine. The ``make install`` command then installs GEOS to a default location unless otherwise specified. -If all goes well, a ``geosx`` executable should now be available: +If all goes well, a ``geosx`` executable should now be available .. code-block:: sh From a83d507291eec003a84c10939692719373de3cd5 Mon Sep 17 00:00:00 2001 From: Matteo Cusini Date: Wed, 21 Aug 2024 14:10:07 -0700 Subject: [PATCH 42/42] more unwanted. --- .../denseLinearAlgebra/denseLASolvers.hpp | 319 ------------------ .../unitTests/testUtils.hpp | 34 -- 2 files changed, 353 deletions(-) delete mode 100644 src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp delete mode 100644 src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp diff --git a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp b/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp deleted file mode 100644 index d45ae76accb..00000000000 --- a/src/coreComponents/denseLinearAlgebra/denseLASolvers.hpp +++ /dev/null @@ -1,319 +0,0 @@ -/* - * ------------------------------------------------------------------------------------------------------------ - * SPDX-License-Identifier: LGPL-2.1-only - * - * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC - * Copyright (c) 2018-2024 Total, S.A - * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University - * Copyright (c) 2018-2024 Chevron - * Copyright (c) 2019- GEOS/GEOSX Contributors - * All rights reserved - * - * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. - * ------------------------------------------------------------------------------------------------------------ - */ - -/** - * @file denseLASolvers.hpp - */ -#ifndef GEOS_DENSELINEARALGEBRA_DENSELASOLVERS_HPP_ -#define GEOS_DENSELINEARALGEBRA_DENSELASOLVERS_HPP_ - -#include "common/DataTypes.hpp" -#include "denseLinearAlgebra/common/layouts.hpp" -#include "LvArray/src/tensorOps.hpp" -#include "common/logger/Logger.hpp" - -#include - -namespace geos -{ - -namespace denseLinearAlgebra -{ - -namespace details -{ - -constexpr real64 singularMatrixTolerance = 1e2*LvArray::NumericLimits< real64 >::epsilon; - -/** - * @brief Solves a 2x2 linear system A * x = b. - * - * This function solves a linear system of the form A * x = b, where A is a 2x2 matrix, - * b is a 2x1 vector, and x is the solution vector. The function checks the sizes - * of the inputs to ensure they conform to the expected dimensions. It also checks that - * the determinant of matrix A is not near zero to avoid solving a singular system. - * - * @tparam MATRIX_TYPE The type of the matrix A. Must support indexing with `A[i][j]`. - * @tparam RHS_TYPE The type of the right-hand side vector b. Must support indexing with `b[i]`. - * @tparam SOL_TYPE The type of the solution vector x. Must support indexing with `x[i]`. - * - * @param[in] A The 2x2 matrix representing the system of equations. Must have size 2x2. - * @param[in] b The 2-element vector representing the right-hand side of the equation. - * @param[out] x The 2-element vector that will store the solution to the system. - * @return bool that sepcifies whether the solve succeeded (1) or not (0). - */ -template< typename MATRIX_TYPE, - typename RHS_TYPE, - typename SOL_TYPE > -GEOS_HOST_DEVICE -inline -bool solveTwoByTwoSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) -{ - LvArray::tensorOps::internal::checkSizes< 2, 2 >( A ); - LvArray::tensorOps::internal::checkSizes< 2 >( b ); - LvArray::tensorOps::internal::checkSizes< 2 >( x ); - - real64 const detA = LvArray::tensorOps::determinant< 2 >( A ); - - if( LvArray::math::abs( detA ) < singularMatrixTolerance ) - return false; - - real64 const invA = 1.0 / detA; - - x[0] = ( A[1][1] * b[0] - A[0][1] * b[1] ) * invA; - x[1] = ( A[0][0] * b[1] - A[1][0] * b[0] ) * invA; - - return true; -} - -/** - * @brief Solves a 3x3 linear system A * x = b. - * - * This function solves a linear system of the form A * x = b, where A is a 3x3 matrix, - * b is a 3x1 vector, and x is the solution vector. The function checks the sizes - * of the inputs to ensure they conform to the expected dimensions. It also checks that - * the determinant of matrix A is not near zero to avoid solving a singular system. - * - * @tparam MATRIX_TYPE The type of the matrix A. Must support indexing with `A[i][j]`. - * @tparam RHS_TYPE The type of the right-hand side vector b. Must support indexing with `b[i]`. - * @tparam SOL_TYPE The type of the solution vector x. Must support indexing with `x[i]`. - * - * @param[in] A The 3x3 matrix representing the system of equations. Must have size 3x3. - * @param[in] b The 3-element vector representing the right-hand side of the equation. - * @param[out] x The 3-element vector that will store the solution to the system. - * @return bool that sepcifies whether the solve succeeded (1) or not (0). - */ -template< typename MATRIX_TYPE, - typename RHS_TYPE, - typename SOL_TYPE > -GEOS_HOST_DEVICE -inline -bool solveThreeByThreeSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) -{ - LvArray::tensorOps::internal::checkSizes< 3, 3 >( A ); - LvArray::tensorOps::internal::checkSizes< 3 >( b ); - LvArray::tensorOps::internal::checkSizes< 3 >( x ); - - real64 const detA = LvArray::tensorOps::determinant< 3 >( A ); - - if( LvArray::math::abs( detA ) < singularMatrixTolerance ) - return false; - - real64 const invA = 1.0 / detA; - - real64 const detX0 = b[0] * ( A[1][1] * A[2][2] - A[2][1] * A[1][2] ) - - b[1] * ( A[0][1] * A[2][2] - A[0][2] * A[2][1] ) + - b[2] * ( A[0][1] * A[1][2] - A[0][2] * A[1][1] ); - - real64 const detX1 = A[0][0] * ( b[1] * A[2][2] - b[2] * A[1][2] ) - - A[1][0] * ( b[0] * A[2][2] - b[2] * A[0][2] ) + - A[2][0] * ( b[0] * A[1][2] - b[1] * A[0][2] ); - - real64 const detX2 = A[0][0] * ( A[1][1] * b[2] - A[2][1] * b[1] ) - - A[1][0] * ( A[0][1] * b[2] - A[2][1] * b[0] ) + - A[2][0] * ( A[0][1] * b[1] - A[1][1] * b[0] ); - - x[0] = detX0 * invA; - x[1] = detX1 * invA; - x[2] = detX2 * invA; - - return true; -} - -/** - * @brief Solves a linear system where the matrix is upper triangular using back substitution. - * - * This function solves the linear system `Ax = b`, where `A` is an upper triangular matrix, using - * back substitution. The solution `x` is computed and stored in the provided output vector. - * - * @tparam N The size of the square matrix `A`. - * @tparam MATRIX_TYPE The type of the matrix `A`. - * @tparam RHS_TYPE The type of the right-hand side vector `b`. - * @tparam SOL_TYPE The type of the solution vector `x`. - * @param[in] A The upper triangular matrix representing the coefficients of the system. - * @param[in] b The right-hand side vector. It is used to compute the solution. - * @param[out] x The solution vector. The result of solving the system `Ax = b` using back substitution. - */ -template< std::ptrdiff_t N, - typename MATRIX_TYPE, - typename RHS_TYPE, - typename SOL_TYPE > -GEOS_HOST_DEVICE -inline -void solveUpperTriangularSystem( MATRIX_TYPE const & A, RHS_TYPE const & b, SOL_TYPE && x ) -{ - for( std::ptrdiff_t i = N - 1; i >= 0; --i ) - { - real64 sum = b[i]; - for( std::ptrdiff_t j = i + 1; j < N; ++j ) - { - sum -= A[i][j] * x[j]; - } - x[i] = sum / A[i][i]; - } -} - -/** - * @brief Solves a linear system using Gaussian elimination. - * - * This function performs Gaussian elimination on the given matrix `A` and right-hand side vector `b`. - * It transforms the matrix `A` boolo an upper triangular matrix and then solves for the solution `x` - * using back substitution. - * - * @tparam N The size of the square matrix `A`. - * @tparam MATRIX_TYPE The type of the matrix `A`. - * @tparam RHS_TYPE The type of the right-hand side vector `b`. - * @tparam SOL_TYPE The type of the solution vector `x`. - * @param[in,out] A The matrix to be transformed boolo an upper triangular matrix. Modified in place. - * @param[in,out] b The right-hand side vector. Modified in place to reflect the transformed system. - * @param[out] x The solution vector. The result of solving the system `Ax = b`. - * @return bool that sepcifies whether the solve succeeded (1) or not (0). - */ -template< std::ptrdiff_t N, - typename MATRIX_TYPE, - typename RHS_TYPE, - typename SOL_TYPE > -GEOS_HOST_DEVICE -inline -bool solveGaussianElimination( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) -{ - static_assert( N > 0, "N must be greater than 0." ); - LvArray::tensorOps::internal::checkSizes< N, N >( A ); - LvArray::tensorOps::internal::checkSizes< N >( b ); - LvArray::tensorOps::internal::checkSizes< N >( x ); - - // Step 1: Transform boolo an upper triangular matrix - - // 1.a. Find the pivot - for( std::ptrdiff_t i = 0; i < N; ++i ) - { - std::ptrdiff_t max_row = i; - for( std::ptrdiff_t k = i + 1; k < N; ++k ) - { - if( LvArray::math::abs( A[k][i] ) > LvArray::math::abs( A[max_row][i] )) - { - max_row = k; - } - } - - // 1.b. Swap rows - for( std::ptrdiff_t k = i; k < N; ++k ) - { - // std::swap( A[i][k], A[max_row][k] ); - real64 const temp = A[max_row][k]; - A[max_row][k] = A[i][k]; - A[i][k] = temp; - } - // std::swap( b[i], b[max_row] ); cannot be done on device - real64 const temp = b[i]; - b[i] = b[max_row]; - b[max_row] = temp; - - - if( LvArray::math::abs( A[i][i] ) < singularMatrixTolerance ) - return false; - - // 1.c Eliminate entries below the pivot - for( std::ptrdiff_t k = i + 1; k < N; ++k ) - { - real64 const scaling = A[k][i] / A[i][i]; - for( std::ptrdiff_t j = i; j < N; ++j ) - { - A[k][j] -= scaling * A[i][j]; - } - b[k] -= scaling * b[i]; - } - } - - // Step 2: Backward substitution - solveUpperTriangularSystem< N >( A, b, std::forward< SOL_TYPE >( x ) ); - - return true; -} - -} // details namespace - -/** - * @brief Solves a linear system using the most appropriate method based on the size of the system. - * - * This function determines the appropriate method for solving a linear system `Ax = b` based on - * the size of the matrix `A`. For 2x2 and 3x3 systems, specialized solvers are used. For larger systems, - * Gaussian elimination is employed. The matrix and the rhs are modified by the function. - * - * @tparam N The size of the square matrix `A`. - * @tparam MATRIX_TYPE The type of the matrix `A`. - * @tparam RHS_TYPE The type of the right-hand side vector `b`. - * @tparam SOL_TYPE The type of the solution vector `x`. - * @tparam MODIFY_MATRIX boolean flag indicating whether the input matrix `A` and vector `b` should be modified. - * If `1`, the matrix `A` and vector `b` are modified in place. If `0`, copies of - * `A` and `b` are made, and the original data is left unchanged. - * @param[in] A The matrix representing the coefficients of the system. - * @param[in] b The right-hand side vector. - * @param[out] x The solution vector. The result of solving the system `Ax = b`. - * @return bool that sepcifies whether the solve succeeded (1) or not (0). - */ -template< std::ptrdiff_t N, - typename MATRIX_TYPE, - typename RHS_TYPE, - typename SOL_TYPE, - bool MODIFY_MATRIX = 1 > -GEOS_HOST_DEVICE -inline -bool solve( MATRIX_TYPE & A, RHS_TYPE & b, SOL_TYPE && x ) -{ - static_assert( N > 0, "N must be greater than 0." ); - static_assert( N < 10, "N cannot be larger than 9" ); - LvArray::tensorOps::internal::checkSizes< N, N >( A ); - LvArray::tensorOps::internal::checkSizes< N >( b ); - LvArray::tensorOps::internal::checkSizes< N >( x ); - - if constexpr ( N == 2 ) - { - return details::solveTwoByTwoSystem( A, b, std::forward< SOL_TYPE >( x ) ); - } - else if constexpr ( N == 3 ) - { - return details::solveThreeByThreeSystem( A, b, std::forward< SOL_TYPE >( x ) ); - } - else - { - if constexpr ( MODIFY_MATRIX ) - { - return details::solveGaussianElimination< N >( A, b, std::forward< SOL_TYPE >( x ) ); - } - else - { - real64 A_copy[N][N]{}; - real64 b_copy[N]{}; - - for( std::ptrdiff_t i=0; i < N; ++i ) - { - b_copy[i] = b[i]; - for( std::ptrdiff_t j=0; j < N; ++j ) - { - A_copy[i][j] = A[i][j]; - } - } - return details::solveGaussianElimination< N >( A_copy, b_copy, std::forward< SOL_TYPE >( x ) ); - } - } -} - -} // denseLinearAlgebra - -} // geos - - -#endif /*GEOS_DENSELINEARALGEBRA_DENSELASOLVERS_HPP_*/ diff --git a/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp b/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp deleted file mode 100644 index 17f093a569b..00000000000 --- a/src/coreComponents/denseLinearAlgebra/unitTests/testUtils.hpp +++ /dev/null @@ -1,34 +0,0 @@ - -#include "common/GeosxMacros.hpp" - -// TPL includes -#include - - -namespace geos -{ -namespace denseLinearAlgebra -{ -namespace testing -{ - - -#if defined(GEOS_DEVICE_COMPILE) -#define PORTABLE_EXPECT_EQ( L, R ) GEOS_ERROR_IF_NE( L, R ) -#define PORTABLE_EXPECT_NEAR( L, R, EPSILON ) LVARRAY_ERROR_IF_GE_MSG( LvArray::math::abs( ( L ) -( R ) ), EPSILON, \ - STRINGIZE( L ) " = " << ( L ) << "\n" << STRINGIZE( R ) " = " << ( R ) ); -#define PORTABLE_EXPECT_TRUE( value ) GEOS_ERROR_IF( !value, "should be true" ) -#define PORTABLE_EXPECT_FALSE( value ) GEOS_ERROR_IF( value, "should be false" ) -#else -#define PORTABLE_EXPECT_EQ( L, R ) EXPECT_EQ( L, R ) -#define PORTABLE_EXPECT_NEAR( L, R, EPSILON ) EXPECT_LE( LvArray::math::abs( ( L ) -( R ) ), EPSILON ) << \ - STRINGIZE( L ) " = " << ( L ) << "\n" << STRINGIZE( R ) " = " << ( R ); -#define PORTABLE_EXPECT_TRUE( value ) EXPECT_TRUE( value ) -#define PORTABLE_EXPECT_FALSE( value ) EXPECT_FALSE( value ) -#endif - -} //namespace testing - -} // namespace denseLinearAlgebra - -} // namespace geos

N&c9*%^kG@xJBHftZ2 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