diff --git a/.integrated_tests.yaml b/.integrated_tests.yaml index 1cd1ea2f3be..2d289765a28 100644 --- a/.integrated_tests.yaml +++ b/.integrated_tests.yaml @@ -1,6 +1,6 @@ baselines: bucket: geosx - baseline: integratedTests/baseline_integratedTests-pr3356-8134-d7ab233 + baseline: integratedTests/baseline_integratedTests-pr2878-8188-ed2ded2 allow_fail: all: '' diff --git a/BASELINE_NOTES.md b/BASELINE_NOTES.md index eec7a739852..65cd8d82bd9 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 #2878 (2024-10-17) +===================== +Sorted region cellBlocks names alphabetically. Therefore affected ordering of: faceManager/elemSubRegionList, nodeManager/elemList, nodeManager/elemSubRegionList, SurfaceElementSubRegion::fractureElementsToCellSubRegions, field::perforation::reservoirElementSubregion. + PR #3364( 2024-10-15) ===================== Enable reservoir+wells+contact mechanics. Rebaseline needed because of 'allowNegativePressure' flag added for wells. diff --git a/examples/GPU/beamBending.xml b/examples/GPU/beamBending.xml index 85f7acfb6ae..755d34970e4 100644 --- a/examples/GPU/beamBending.xml +++ b/examples/GPU/beamBending.xml @@ -77,7 +77,7 @@ diff --git a/examples/advanced_xml_features/included/included_b.xml b/examples/advanced_xml_features/included/included_b.xml index bc052d6a51e..ba2aa87baed 100644 --- a/examples/advanced_xml_features/included/included_b.xml +++ b/examples/advanced_xml_features/included/included_b.xml @@ -30,7 +30,7 @@ diff --git a/examples/advanced_xml_features/parameters_example.xml b/examples/advanced_xml_features/parameters_example.xml index 7124be3aa8f..fa31e5d4bd3 100644 --- a/examples/advanced_xml_features/parameters_example.xml +++ b/examples/advanced_xml_features/parameters_example.xml @@ -96,7 +96,7 @@ XML Units: diff --git a/examples/advanced_xml_features/symbolic_math_example.xml b/examples/advanced_xml_features/symbolic_math_example.xml index a0a71b65547..e4d3f4942dd 100644 --- a/examples/advanced_xml_features/symbolic_math_example.xml +++ b/examples/advanced_xml_features/symbolic_math_example.xml @@ -106,7 +106,7 @@ XML Symbolic Math: diff --git a/examples/pygeosxExamples/modifyBoundaryCondition/pkn_example.xml b/examples/pygeosxExamples/modifyBoundaryCondition/pkn_example.xml index 57f6d330ce2..94db4f07eb6 100644 --- a/examples/pygeosxExamples/modifyBoundaryCondition/pkn_example.xml +++ b/examples/pygeosxExamples/modifyBoundaryCondition/pkn_example.xml @@ -70,7 +70,7 @@ diff --git a/examples/sedovKernelTest.xml b/examples/sedovKernelTest.xml index 99b79f3d217..9d56d5b7bf7 100644 --- a/examples/sedovKernelTest.xml +++ b/examples/sedovKernelTest.xml @@ -68,7 +68,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/2ph_cap_1d_ihu.xml b/inputFiles/compositionalMultiphaseFlow/2ph_cap_1d_ihu.xml index 8ca061df0c1..07a0f5d4731 100644 --- a/inputFiles/compositionalMultiphaseFlow/2ph_cap_1d_ihu.xml +++ b/inputFiles/compositionalMultiphaseFlow/2ph_cap_1d_ihu.xml @@ -69,7 +69,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/4comp_2ph_1d.xml b/inputFiles/compositionalMultiphaseFlow/4comp_2ph_1d.xml index 389f0e2a0af..bfe1ffb2914 100644 --- a/inputFiles/compositionalMultiphaseFlow/4comp_2ph_1d.xml +++ b/inputFiles/compositionalMultiphaseFlow/4comp_2ph_1d.xml @@ -72,7 +72,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/4comp_2ph_cap_1d.xml b/inputFiles/compositionalMultiphaseFlow/4comp_2ph_cap_1d.xml index 9072e840981..82da5163ad0 100644 --- a/inputFiles/compositionalMultiphaseFlow/4comp_2ph_cap_1d.xml +++ b/inputFiles/compositionalMultiphaseFlow/4comp_2ph_cap_1d.xml @@ -85,7 +85,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE10/deadOilSpe10Layers84_85_base_direct.xml b/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE10/deadOilSpe10Layers84_85_base_direct.xml index 796794b741d..b5f3dc74977 100644 --- a/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE10/deadOilSpe10Layers84_85_base_direct.xml +++ b/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE10/deadOilSpe10Layers84_85_base_direct.xml @@ -67,7 +67,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE10/deadOilSpe10Layers84_85_base_iterative.xml b/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE10/deadOilSpe10Layers84_85_base_iterative.xml index 68a933abd5a..5ca7d741433 100644 --- a/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE10/deadOilSpe10Layers84_85_base_iterative.xml +++ b/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE10/deadOilSpe10Layers84_85_base_iterative.xml @@ -66,7 +66,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/benchmarks/buckleyLeverettProblem/buckleyLeverett_base.xml b/inputFiles/compositionalMultiphaseFlow/benchmarks/buckleyLeverettProblem/buckleyLeverett_base.xml index ae3ddb8c7b1..a715c16b3a2 100644 --- a/inputFiles/compositionalMultiphaseFlow/benchmarks/buckleyLeverettProblem/buckleyLeverett_base.xml +++ b/inputFiles/compositionalMultiphaseFlow/benchmarks/buckleyLeverettProblem/buckleyLeverett_base.xml @@ -37,7 +37,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/c1-ppu/grav_seg_c1ppu_base.xml b/inputFiles/compositionalMultiphaseFlow/c1-ppu/grav_seg_c1ppu_base.xml index 89e2c9149b6..0ddb4a08cb2 100644 --- a/inputFiles/compositionalMultiphaseFlow/c1-ppu/grav_seg_c1ppu_base.xml +++ b/inputFiles/compositionalMultiphaseFlow/c1-ppu/grav_seg_c1ppu_base.xml @@ -44,7 +44,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/co2_flux_3d.xml b/inputFiles/compositionalMultiphaseFlow/co2_flux_3d.xml index d693f1542e3..8e18675a646 100644 --- a/inputFiles/compositionalMultiphaseFlow/co2_flux_3d.xml +++ b/inputFiles/compositionalMultiphaseFlow/co2_flux_3d.xml @@ -112,7 +112,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/co2_hybrid_1d.xml b/inputFiles/compositionalMultiphaseFlow/co2_hybrid_1d.xml index b5ea99f5ff5..99e5d1ad3b0 100644 --- a/inputFiles/compositionalMultiphaseFlow/co2_hybrid_1d.xml +++ b/inputFiles/compositionalMultiphaseFlow/co2_hybrid_1d.xml @@ -75,7 +75,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/dbc/bottom_layer_SPE10/bottom_layer_SPE10_base.xml b/inputFiles/compositionalMultiphaseFlow/dbc/bottom_layer_SPE10/bottom_layer_SPE10_base.xml index 9a7515aa2e8..a1d89df6bd9 100755 --- a/inputFiles/compositionalMultiphaseFlow/dbc/bottom_layer_SPE10/bottom_layer_SPE10_base.xml +++ b/inputFiles/compositionalMultiphaseFlow/dbc/bottom_layer_SPE10/bottom_layer_SPE10_base.xml @@ -11,7 +11,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/dbc/buckleyLeverett_1d/buckleyLeverett_1d.xml b/inputFiles/compositionalMultiphaseFlow/dbc/buckleyLeverett_1d/buckleyLeverett_1d.xml index b7978a7ba52..c2cb4574d62 100755 --- a/inputFiles/compositionalMultiphaseFlow/dbc/buckleyLeverett_1d/buckleyLeverett_1d.xml +++ b/inputFiles/compositionalMultiphaseFlow/dbc/buckleyLeverett_1d/buckleyLeverett_1d.xml @@ -41,7 +41,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/dbc/buckleyLeverett_1d/buckleyLeverett_1d_DBC.xml b/inputFiles/compositionalMultiphaseFlow/dbc/buckleyLeverett_1d/buckleyLeverett_1d_DBC.xml index 980fd46f7b9..38eef01c374 100755 --- a/inputFiles/compositionalMultiphaseFlow/dbc/buckleyLeverett_1d/buckleyLeverett_1d_DBC.xml +++ b/inputFiles/compositionalMultiphaseFlow/dbc/buckleyLeverett_1d/buckleyLeverett_1d_DBC.xml @@ -47,7 +47,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/dbc/grav_seg_1d/grav_seg_1d.xml b/inputFiles/compositionalMultiphaseFlow/dbc/grav_seg_1d/grav_seg_1d.xml index 8da5b23a782..2fd8219bf3c 100755 --- a/inputFiles/compositionalMultiphaseFlow/dbc/grav_seg_1d/grav_seg_1d.xml +++ b/inputFiles/compositionalMultiphaseFlow/dbc/grav_seg_1d/grav_seg_1d.xml @@ -44,7 +44,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/dbc/grav_seg_1d/grav_seg_1d_DBC.xml b/inputFiles/compositionalMultiphaseFlow/dbc/grav_seg_1d/grav_seg_1d_DBC.xml index 283c3f5623c..ad39d37d01f 100755 --- a/inputFiles/compositionalMultiphaseFlow/dbc/grav_seg_1d/grav_seg_1d_DBC.xml +++ b/inputFiles/compositionalMultiphaseFlow/dbc/grav_seg_1d/grav_seg_1d_DBC.xml @@ -50,7 +50,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_baker_1d.xml b/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_baker_1d.xml index 30eb6334ce6..5c4ec705a2f 100644 --- a/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_baker_1d.xml +++ b/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_baker_1d.xml @@ -83,7 +83,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_corey_1d.xml b/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_corey_1d.xml index 6699f0dc120..660102cec84 100644 --- a/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_corey_1d.xml +++ b/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_corey_1d.xml @@ -78,7 +78,7 @@ diff --git a/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_corey_1d_fractured.xml b/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_corey_1d_fractured.xml index 2d0b2693a80..d8ec1d272af 100644 --- a/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_corey_1d_fractured.xml +++ b/inputFiles/compositionalMultiphaseFlow/deadoil_3ph_corey_1d_fractured.xml @@ -110,7 +110,7 @@ diff --git a/inputFiles/compositionalMultiphaseWell/benchmarks/Class09Pb3/class09_pb3_drainageOnly_direct_base.xml b/inputFiles/compositionalMultiphaseWell/benchmarks/Class09Pb3/class09_pb3_drainageOnly_direct_base.xml index 56d39f42bfb..fba559385dc 100644 --- a/inputFiles/compositionalMultiphaseWell/benchmarks/Class09Pb3/class09_pb3_drainageOnly_direct_base.xml +++ b/inputFiles/compositionalMultiphaseWell/benchmarks/Class09Pb3/class09_pb3_drainageOnly_direct_base.xml @@ -51,7 +51,7 @@ - diff --git a/inputFiles/compositionalMultiphaseWell/staircase_co2_wells_hybrid_3d.xml b/inputFiles/compositionalMultiphaseWell/staircase_co2_wells_hybrid_3d.xml index e508462a7e5..16d7a6fc1c7 100644 --- a/inputFiles/compositionalMultiphaseWell/staircase_co2_wells_hybrid_3d.xml +++ b/inputFiles/compositionalMultiphaseWell/staircase_co2_wells_hybrid_3d.xml @@ -117,7 +117,7 @@ @@ -133,4 +133,3 @@ boundaryConditionTypes="{ 1, 0, 2, 2, 1, 1 }" - diff --git a/inputFiles/materialPointMethod/particleRepartition/mpm_particleRepartition.xml b/inputFiles/materialPointMethod/particleRepartition/mpm_particleRepartition.xml index ea4fe422923..685e4c3479e 100644 --- a/inputFiles/materialPointMethod/particleRepartition/mpm_particleRepartition.xml +++ b/inputFiles/materialPointMethod/particleRepartition/mpm_particleRepartition.xml @@ -29,7 +29,7 @@ srun -n 4 /usr/workspace/homel1/GEOS/build-quartz-gcc@12-release/bin/geosx -i mp @@ -119,4 +119,3 @@ boundaryConditionTypes="{ 0, 0, 0, 0, 0, 0 }" - diff --git a/inputFiles/materialPointMethod/singleParticle/mpm_singleParticle.xml b/inputFiles/materialPointMethod/singleParticle/mpm_singleParticle.xml index bb795ae6e7f..4fa388009a5 100644 --- a/inputFiles/materialPointMethod/singleParticle/mpm_singleParticle.xml +++ b/inputFiles/materialPointMethod/singleParticle/mpm_singleParticle.xml @@ -29,7 +29,7 @@ srun -n 1 /usr/workspace/homel1/GEOS/build-quartz-gcc@12-release/bin/geosx -i mp @@ -119,4 +119,3 @@ boundaryConditionTypes="{ 0, 0, 0, 0, 0, 0 }" - diff --git a/inputFiles/meshGeneration/multiBodyMeshGen_base.xml b/inputFiles/meshGeneration/multiBodyMeshGen_base.xml index e714f179254..51477c54cb9 100644 --- a/inputFiles/meshGeneration/multiBodyMeshGen_base.xml +++ b/inputFiles/meshGeneration/multiBodyMeshGen_base.xml @@ -41,7 +41,7 @@ diff --git a/inputFiles/multiphaseFlowFractures/deadOil_fractureMatrixFlow_edfm_base.xml b/inputFiles/multiphaseFlowFractures/deadOil_fractureMatrixFlow_edfm_base.xml index 0243011b1b0..2ac98ea35b3 100644 --- a/inputFiles/multiphaseFlowFractures/deadOil_fractureMatrixFlow_edfm_base.xml +++ b/inputFiles/multiphaseFlowFractures/deadOil_fractureMatrixFlow_edfm_base.xml @@ -90,7 +90,7 @@ diff --git a/inputFiles/phaseField/PhaseFieldFracture_DamageAndLoad.xml b/inputFiles/phaseField/PhaseFieldFracture_DamageAndLoad.xml index c24b08aa8c9..14b6d92f8a3 100644 --- a/inputFiles/phaseField/PhaseFieldFracture_DamageAndLoad.xml +++ b/inputFiles/phaseField/PhaseFieldFracture_DamageAndLoad.xml @@ -103,7 +103,7 @@ diff --git a/inputFiles/phaseField/PhaseFieldFracture_DamageOnly.xml b/inputFiles/phaseField/PhaseFieldFracture_DamageOnly.xml index e7bcab72523..99064e92686 100644 --- a/inputFiles/phaseField/PhaseFieldFracture_DamageOnly.xml +++ b/inputFiles/phaseField/PhaseFieldFracture_DamageOnly.xml @@ -105,7 +105,7 @@ diff --git a/inputFiles/phaseField/PhaseFieldFracture_Nucleation_base.xml b/inputFiles/phaseField/PhaseFieldFracture_Nucleation_base.xml index c961f5c52b3..e339684d116 100644 --- a/inputFiles/phaseField/PhaseFieldFracture_Nucleation_base.xml +++ b/inputFiles/phaseField/PhaseFieldFracture_Nucleation_base.xml @@ -67,7 +67,7 @@ diff --git a/inputFiles/phaseField/PhaseFieldFracture_SpectralSplit.xml b/inputFiles/phaseField/PhaseFieldFracture_SpectralSplit.xml index 2cb24468fd0..f7423b48112 100644 --- a/inputFiles/phaseField/PhaseFieldFracture_SpectralSplit.xml +++ b/inputFiles/phaseField/PhaseFieldFracture_SpectralSplit.xml @@ -116,7 +116,7 @@ diff --git a/inputFiles/phaseField/PhaseFieldFracture_VolDevSplit.xml b/inputFiles/phaseField/PhaseFieldFracture_VolDevSplit.xml index e077817c194..26893feb2ce 100644 --- a/inputFiles/phaseField/PhaseFieldFracture_VolDevSplit.xml +++ b/inputFiles/phaseField/PhaseFieldFracture_VolDevSplit.xml @@ -116,7 +116,7 @@ diff --git a/inputFiles/poromechanics/PoroDelftEggWellbore_base.xml b/inputFiles/poromechanics/PoroDelftEggWellbore_base.xml index 4379c94dcca..60fef34af70 100644 --- a/inputFiles/poromechanics/PoroDelftEggWellbore_base.xml +++ b/inputFiles/poromechanics/PoroDelftEggWellbore_base.xml @@ -52,7 +52,7 @@ diff --git a/inputFiles/poromechanics/PoroDruckerPragerWellbore_base.xml b/inputFiles/poromechanics/PoroDruckerPragerWellbore_base.xml index 6072828be93..2fe870777b9 100644 --- a/inputFiles/poromechanics/PoroDruckerPragerWellbore_base.xml +++ b/inputFiles/poromechanics/PoroDruckerPragerWellbore_base.xml @@ -55,7 +55,7 @@ diff --git a/inputFiles/poromechanics/PoroElasticWellbore_base.xml b/inputFiles/poromechanics/PoroElasticWellbore_base.xml index 0c1bd27ae74..635883163d1 100644 --- a/inputFiles/poromechanics/PoroElasticWellbore_base.xml +++ b/inputFiles/poromechanics/PoroElasticWellbore_base.xml @@ -50,7 +50,7 @@ diff --git a/inputFiles/poromechanics/PoroElastic_Mandel_base.xml b/inputFiles/poromechanics/PoroElastic_Mandel_base.xml index a2c25d2aa1b..d1eb25f9673 100644 --- a/inputFiles/poromechanics/PoroElastic_Mandel_base.xml +++ b/inputFiles/poromechanics/PoroElastic_Mandel_base.xml @@ -21,7 +21,7 @@ diff --git a/inputFiles/poromechanics/PoroElastic_Terzaghi_base_direct.xml b/inputFiles/poromechanics/PoroElastic_Terzaghi_base_direct.xml index aa69acd04fc..b22a64ab20a 100644 --- a/inputFiles/poromechanics/PoroElastic_Terzaghi_base_direct.xml +++ b/inputFiles/poromechanics/PoroElastic_Terzaghi_base_direct.xml @@ -47,7 +47,7 @@ diff --git a/inputFiles/poromechanics/PoroElastic_Terzaghi_base_iterative.xml b/inputFiles/poromechanics/PoroElastic_Terzaghi_base_iterative.xml index 90909cbfa39..f266af73a19 100644 --- a/inputFiles/poromechanics/PoroElastic_Terzaghi_base_iterative.xml +++ b/inputFiles/poromechanics/PoroElastic_Terzaghi_base_iterative.xml @@ -48,7 +48,7 @@ diff --git a/inputFiles/poromechanics/PoroElastic_deadoil_3ph_baker_2d_base.xml b/inputFiles/poromechanics/PoroElastic_deadoil_3ph_baker_2d_base.xml index 0d408a2dc4e..94bb5973bb2 100644 --- a/inputFiles/poromechanics/PoroElastic_deadoil_3ph_baker_2d_base.xml +++ b/inputFiles/poromechanics/PoroElastic_deadoil_3ph_baker_2d_base.xml @@ -82,7 +82,7 @@ diff --git a/inputFiles/poromechanics/PoroElastic_gravity.xml b/inputFiles/poromechanics/PoroElastic_gravity.xml index ce1a82c80c6..91c9e679224 100644 --- a/inputFiles/poromechanics/PoroElastic_gravity.xml +++ b/inputFiles/poromechanics/PoroElastic_gravity.xml @@ -81,7 +81,7 @@ diff --git a/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_base.xml b/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_base.xml index 26c4b973932..85b5592eb52 100644 --- a/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_base.xml +++ b/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_base.xml @@ -79,7 +79,7 @@ diff --git a/inputFiles/poromechanics/PoroModifiedCamClayWellbore_base.xml b/inputFiles/poromechanics/PoroModifiedCamClayWellbore_base.xml index 39e5a33f29a..5d9149bf22e 100644 --- a/inputFiles/poromechanics/PoroModifiedCamClayWellbore_base.xml +++ b/inputFiles/poromechanics/PoroModifiedCamClayWellbore_base.xml @@ -52,7 +52,7 @@ diff --git a/inputFiles/poromechanics/PoroViscoDruckerPrager_base.xml b/inputFiles/poromechanics/PoroViscoDruckerPrager_base.xml index 301b0a41e88..58b27c73122 100644 --- a/inputFiles/poromechanics/PoroViscoDruckerPrager_base.xml +++ b/inputFiles/poromechanics/PoroViscoDruckerPrager_base.xml @@ -55,7 +55,7 @@ diff --git a/inputFiles/poromechanics/PoroViscoExtendedDruckerPrager_base.xml b/inputFiles/poromechanics/PoroViscoExtendedDruckerPrager_base.xml index c55ea123b70..7e066c4bf0d 100644 --- a/inputFiles/poromechanics/PoroViscoExtendedDruckerPrager_base.xml +++ b/inputFiles/poromechanics/PoroViscoExtendedDruckerPrager_base.xml @@ -56,7 +56,7 @@ diff --git a/inputFiles/poromechanics/PoroViscoModifiedCamClay_base.xml b/inputFiles/poromechanics/PoroViscoModifiedCamClay_base.xml index e571c953761..405d4bb3f01 100644 --- a/inputFiles/poromechanics/PoroViscoModifiedCamClay_base.xml +++ b/inputFiles/poromechanics/PoroViscoModifiedCamClay_base.xml @@ -56,7 +56,7 @@ diff --git a/inputFiles/poromechanics/faultPoroelastic_base.xml b/inputFiles/poromechanics/faultPoroelastic_base.xml index 5c69d115a5b..6b69e6836c1 100755 --- a/inputFiles/poromechanics/faultPoroelastic_base.xml +++ b/inputFiles/poromechanics/faultPoroelastic_base.xml @@ -5,7 +5,7 @@ diff --git a/inputFiles/poromechanics/nonlinearAcceleration/smallEggModel/smallEggModel.xml b/inputFiles/poromechanics/nonlinearAcceleration/smallEggModel/smallEggModel.xml index 0ab2e1e9527..277776298a8 100755 --- a/inputFiles/poromechanics/nonlinearAcceleration/smallEggModel/smallEggModel.xml +++ b/inputFiles/poromechanics/nonlinearAcceleration/smallEggModel/smallEggModel.xml @@ -154,22 +154,22 @@ diff --git a/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml b/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml index 7c53d0d4981..133e70876ff 100644 --- a/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml +++ b/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml @@ -82,7 +82,7 @@ diff --git a/inputFiles/relpermDriver/testRelpermDriverBCStoneII.xml b/inputFiles/relpermDriver/testRelpermDriverBCStoneII.xml index ab0c4abaaa7..80c5ab16abb 100644 --- a/inputFiles/relpermDriver/testRelpermDriverBCStoneII.xml +++ b/inputFiles/relpermDriver/testRelpermDriverBCStoneII.xml @@ -47,7 +47,7 @@ diff --git a/inputFiles/relpermDriver/testRelpermDriverTableHyst2ph.xml b/inputFiles/relpermDriver/testRelpermDriverTableHyst2ph.xml index 000003049c7..60614391abf 100644 --- a/inputFiles/relpermDriver/testRelpermDriverTableHyst2ph.xml +++ b/inputFiles/relpermDriver/testRelpermDriverTableHyst2ph.xml @@ -46,7 +46,7 @@ diff --git a/inputFiles/simplePDE/10x10x10Hex_LaplaceFEM_smoke.xml b/inputFiles/simplePDE/10x10x10Hex_LaplaceFEM_smoke.xml index eb35e4b7ccc..0709dcbfcb8 100644 --- a/inputFiles/simplePDE/10x10x10Hex_LaplaceFEM_smoke.xml +++ b/inputFiles/simplePDE/10x10x10Hex_LaplaceFEM_smoke.xml @@ -22,7 +22,7 @@ diff --git a/inputFiles/simplePDE/10x10x10Hex_LaplaceVEM_smoke.xml b/inputFiles/simplePDE/10x10x10Hex_LaplaceVEM_smoke.xml index b05378fb3ed..1c5cd08d1de 100644 --- a/inputFiles/simplePDE/10x10x10Hex_LaplaceVEM_smoke.xml +++ b/inputFiles/simplePDE/10x10x10Hex_LaplaceVEM_smoke.xml @@ -22,7 +22,7 @@ diff --git a/inputFiles/simplePDE/10x5x15Wedges_LaplaceVEM_smoke.xml b/inputFiles/simplePDE/10x5x15Wedges_LaplaceVEM_smoke.xml index 220b273e56c..fbb1ebddd32 100644 --- a/inputFiles/simplePDE/10x5x15Wedges_LaplaceVEM_smoke.xml +++ b/inputFiles/simplePDE/10x5x15Wedges_LaplaceVEM_smoke.xml @@ -22,7 +22,7 @@ diff --git a/inputFiles/simplePDE/15x5x10Tets_LaplaceVEM_smoke.xml b/inputFiles/simplePDE/15x5x10Tets_LaplaceVEM_smoke.xml index 76594883a4c..0cda8414a01 100644 --- a/inputFiles/simplePDE/15x5x10Tets_LaplaceVEM_smoke.xml +++ b/inputFiles/simplePDE/15x5x10Tets_LaplaceVEM_smoke.xml @@ -22,7 +22,7 @@ diff --git a/inputFiles/simplePDE/50x10x5Hex_LaplaceFEM_smoke.xml b/inputFiles/simplePDE/50x10x5Hex_LaplaceFEM_smoke.xml index aff5d97ec10..49913b72224 100644 --- a/inputFiles/simplePDE/50x10x5Hex_LaplaceFEM_smoke.xml +++ b/inputFiles/simplePDE/50x10x5Hex_LaplaceFEM_smoke.xml @@ -22,7 +22,7 @@ diff --git a/inputFiles/simplePDE/hybridHexPrism_LaplaceVEM_smoke.xml b/inputFiles/simplePDE/hybridHexPrism_LaplaceVEM_smoke.xml index 85f31ec5340..80e6b4d50b7 100644 --- a/inputFiles/simplePDE/hybridHexPrism_LaplaceVEM_smoke.xml +++ b/inputFiles/simplePDE/hybridHexPrism_LaplaceVEM_smoke.xml @@ -29,4 +29,3 @@ - diff --git a/inputFiles/singlePhaseFlow/3D_10x10x10_compressible_base.xml b/inputFiles/singlePhaseFlow/3D_10x10x10_compressible_base.xml index 502b8a22bd9..d9157d9b2b0 100644 --- a/inputFiles/singlePhaseFlow/3D_10x10x10_compressible_base.xml +++ b/inputFiles/singlePhaseFlow/3D_10x10x10_compressible_base.xml @@ -50,7 +50,7 @@ diff --git a/inputFiles/singlePhaseFlow/3D_10x10x10_thermalCompressible_base.xml b/inputFiles/singlePhaseFlow/3D_10x10x10_thermalCompressible_base.xml index 6de1ae4dfdf..1e529f1a41e 100644 --- a/inputFiles/singlePhaseFlow/3D_10x10x10_thermalCompressible_base.xml +++ b/inputFiles/singlePhaseFlow/3D_10x10x10_thermalCompressible_base.xml @@ -39,7 +39,7 @@ diff --git a/inputFiles/singlePhaseFlow/FieldCaseTutorial3_base.xml b/inputFiles/singlePhaseFlow/FieldCaseTutorial3_base.xml index d9efb08892d..6de436890ed 100644 --- a/inputFiles/singlePhaseFlow/FieldCaseTutorial3_base.xml +++ b/inputFiles/singlePhaseFlow/FieldCaseTutorial3_base.xml @@ -5,12 +5,12 @@ diff --git a/inputFiles/singlePhaseFlow/compressible_1d.xml b/inputFiles/singlePhaseFlow/compressible_1d.xml index 168809613cb..d4a937ad4b3 100644 --- a/inputFiles/singlePhaseFlow/compressible_1d.xml +++ b/inputFiles/singlePhaseFlow/compressible_1d.xml @@ -70,7 +70,7 @@ diff --git a/inputFiles/singlePhaseFlow/incompressible_1d.xml b/inputFiles/singlePhaseFlow/incompressible_1d.xml index e4f37618cd2..670099cebbf 100644 --- a/inputFiles/singlePhaseFlow/incompressible_1d.xml +++ b/inputFiles/singlePhaseFlow/incompressible_1d.xml @@ -69,7 +69,7 @@ diff --git a/inputFiles/singlePhaseFlow/incompressible_pebi3d.xml b/inputFiles/singlePhaseFlow/incompressible_pebi3d.xml index 90842777527..162b2667e51 100644 --- a/inputFiles/singlePhaseFlow/incompressible_pebi3d.xml +++ b/inputFiles/singlePhaseFlow/incompressible_pebi3d.xml @@ -68,7 +68,7 @@ diff --git a/inputFiles/singlePhaseFlow/sourceFlux_1d.xml b/inputFiles/singlePhaseFlow/sourceFlux_1d.xml index 8fdf76542f5..2cae841d4da 100644 --- a/inputFiles/singlePhaseFlow/sourceFlux_1d.xml +++ b/inputFiles/singlePhaseFlow/sourceFlux_1d.xml @@ -68,7 +68,7 @@ diff --git a/inputFiles/singlePhaseFlow/sourceFlux_2d.xml b/inputFiles/singlePhaseFlow/sourceFlux_2d.xml index a455b137720..4a0d5cf3a28 100644 --- a/inputFiles/singlePhaseFlow/sourceFlux_2d.xml +++ b/inputFiles/singlePhaseFlow/sourceFlux_2d.xml @@ -94,7 +94,7 @@ diff --git a/inputFiles/singlePhaseFlow/staircase_3d.xml b/inputFiles/singlePhaseFlow/staircase_3d.xml index 199f1a726ea..2722e20c150 100644 --- a/inputFiles/singlePhaseFlow/staircase_3d.xml +++ b/inputFiles/singlePhaseFlow/staircase_3d.xml @@ -1,6 +1,7 @@ - + diff --git a/inputFiles/singlePhaseFlow/thermalCompressible_2d_smoke.xml b/inputFiles/singlePhaseFlow/thermalCompressible_2d_smoke.xml index e4ec4ed0475..89d35398376 100644 --- a/inputFiles/singlePhaseFlow/thermalCompressible_2d_smoke.xml +++ b/inputFiles/singlePhaseFlow/thermalCompressible_2d_smoke.xml @@ -8,7 +8,7 @@ diff --git a/inputFiles/singlePhaseFlow/thermalCompressible_temperatureDependentSinglePhaseThermalConductivity_benchmark.xml b/inputFiles/singlePhaseFlow/thermalCompressible_temperatureDependentSinglePhaseThermalConductivity_benchmark.xml index a526d78f438..fcac937bf47 100644 --- a/inputFiles/singlePhaseFlow/thermalCompressible_temperatureDependentSinglePhaseThermalConductivity_benchmark.xml +++ b/inputFiles/singlePhaseFlow/thermalCompressible_temperatureDependentSinglePhaseThermalConductivity_benchmark.xml @@ -8,7 +8,7 @@ diff --git a/inputFiles/singlePhaseFlow/thermalCompressible_temperatureDependentSinglePhaseThermalConductivity_smoke.xml b/inputFiles/singlePhaseFlow/thermalCompressible_temperatureDependentSinglePhaseThermalConductivity_smoke.xml index ca969a98c99..195ceabe14c 100644 --- a/inputFiles/singlePhaseFlow/thermalCompressible_temperatureDependentSinglePhaseThermalConductivity_smoke.xml +++ b/inputFiles/singlePhaseFlow/thermalCompressible_temperatureDependentSinglePhaseThermalConductivity_smoke.xml @@ -8,7 +8,7 @@ diff --git a/inputFiles/singlePhaseFlowFractures/fractureFlowWithGravity_conforming_2d_smoke.xml b/inputFiles/singlePhaseFlowFractures/fractureFlowWithGravity_conforming_2d_smoke.xml index f9ce504d5d7..9dbce69a6a6 100644 --- a/inputFiles/singlePhaseFlowFractures/fractureFlowWithGravity_conforming_2d_smoke.xml +++ b/inputFiles/singlePhaseFlowFractures/fractureFlowWithGravity_conforming_2d_smoke.xml @@ -84,7 +84,7 @@ - + diff --git a/inputFiles/solidMechanics/ExtendedDruckerPragerWellbore_base.xml b/inputFiles/solidMechanics/ExtendedDruckerPragerWellbore_base.xml index a2e0bd5cd8e..9881628d292 100644 --- a/inputFiles/solidMechanics/ExtendedDruckerPragerWellbore_base.xml +++ b/inputFiles/solidMechanics/ExtendedDruckerPragerWellbore_base.xml @@ -32,7 +32,7 @@ diff --git a/inputFiles/solidMechanics/KirschProblem_base.xml b/inputFiles/solidMechanics/KirschProblem_base.xml index 11eee1612ca..c0f724d29b0 100755 --- a/inputFiles/solidMechanics/KirschProblem_base.xml +++ b/inputFiles/solidMechanics/KirschProblem_base.xml @@ -17,7 +17,7 @@ diff --git a/inputFiles/solidMechanics/ModifiedCamClayWellbore_base.xml b/inputFiles/solidMechanics/ModifiedCamClayWellbore_base.xml index 1e216ebc48d..81ac82e3f23 100644 --- a/inputFiles/solidMechanics/ModifiedCamClayWellbore_base.xml +++ b/inputFiles/solidMechanics/ModifiedCamClayWellbore_base.xml @@ -31,7 +31,7 @@ diff --git a/inputFiles/solidMechanics/OpenWellbore.xml b/inputFiles/solidMechanics/OpenWellbore.xml index 8c7c591862d..a6dfa394f5f 100644 --- a/inputFiles/solidMechanics/OpenWellbore.xml +++ b/inputFiles/solidMechanics/OpenWellbore.xml @@ -79,7 +79,7 @@ diff --git a/inputFiles/solidMechanics/beamBending_base.xml b/inputFiles/solidMechanics/beamBending_base.xml index 7dabd0f8933..764cb822641 100644 --- a/inputFiles/solidMechanics/beamBending_base.xml +++ b/inputFiles/solidMechanics/beamBending_base.xml @@ -42,7 +42,7 @@ diff --git a/inputFiles/solidMechanics/beamBending_hybridHexPrism_smoke.xml b/inputFiles/solidMechanics/beamBending_hybridHexPrism_smoke.xml index 0c23d01b854..f0f5db09631 100644 --- a/inputFiles/solidMechanics/beamBending_hybridHexPrism_smoke.xml +++ b/inputFiles/solidMechanics/beamBending_hybridHexPrism_smoke.xml @@ -28,7 +28,7 @@ diff --git a/inputFiles/solidMechanics/benchmarks/SSLE-QS-small.xml b/inputFiles/solidMechanics/benchmarks/SSLE-QS-small.xml index 4df98119448..486f533a5bc 100644 --- a/inputFiles/solidMechanics/benchmarks/SSLE-QS-small.xml +++ b/inputFiles/solidMechanics/benchmarks/SSLE-QS-small.xml @@ -51,7 +51,7 @@ diff --git a/inputFiles/solidMechanics/benchmarks/SSLE-io.xml b/inputFiles/solidMechanics/benchmarks/SSLE-io.xml index 8a64bd59e77..5c0ecc605cf 100644 --- a/inputFiles/solidMechanics/benchmarks/SSLE-io.xml +++ b/inputFiles/solidMechanics/benchmarks/SSLE-io.xml @@ -112,7 +112,7 @@ diff --git a/inputFiles/solidMechanics/benchmarks/VerticalElasticWellbore.xml b/inputFiles/solidMechanics/benchmarks/VerticalElasticWellbore.xml index 35f4635aeb4..e17d1caa837 100644 --- a/inputFiles/solidMechanics/benchmarks/VerticalElasticWellbore.xml +++ b/inputFiles/solidMechanics/benchmarks/VerticalElasticWellbore.xml @@ -79,7 +79,7 @@ diff --git a/inputFiles/solidMechanics/elasticHollowCylinder_isotropic_smoke.xml b/inputFiles/solidMechanics/elasticHollowCylinder_isotropic_smoke.xml index 4882dd593b6..f43377dcb0b 100644 --- a/inputFiles/solidMechanics/elasticHollowCylinder_isotropic_smoke.xml +++ b/inputFiles/solidMechanics/elasticHollowCylinder_isotropic_smoke.xml @@ -10,7 +10,7 @@ diff --git a/inputFiles/solidMechanics/elasticHollowCylinder_orthotropic_smoke.xml b/inputFiles/solidMechanics/elasticHollowCylinder_orthotropic_smoke.xml index ede5290a53c..69b254072cc 100644 --- a/inputFiles/solidMechanics/elasticHollowCylinder_orthotropic_smoke.xml +++ b/inputFiles/solidMechanics/elasticHollowCylinder_orthotropic_smoke.xml @@ -10,7 +10,7 @@ diff --git a/inputFiles/solidMechanics/elasticHollowCylinder_transverseIsotropic_smoke.xml b/inputFiles/solidMechanics/elasticHollowCylinder_transverseIsotropic_smoke.xml index 96433871e09..522d21d57d6 100644 --- a/inputFiles/solidMechanics/elasticHollowCylinder_transverseIsotropic_smoke.xml +++ b/inputFiles/solidMechanics/elasticHollowCylinder_transverseIsotropic_smoke.xml @@ -10,7 +10,7 @@ diff --git a/inputFiles/solidMechanics/mechanicsWithHeterogeneousMaterials.xml b/inputFiles/solidMechanics/mechanicsWithHeterogeneousMaterials.xml index a13c81842e1..d1dfd7352b2 100644 --- a/inputFiles/solidMechanics/mechanicsWithHeterogeneousMaterials.xml +++ b/inputFiles/solidMechanics/mechanicsWithHeterogeneousMaterials.xml @@ -63,7 +63,7 @@ diff --git a/inputFiles/solidMechanics/plasticCubeReset.xml b/inputFiles/solidMechanics/plasticCubeReset.xml index 78007a7ef20..8f923860899 100644 --- a/inputFiles/solidMechanics/plasticCubeReset.xml +++ b/inputFiles/solidMechanics/plasticCubeReset.xml @@ -19,7 +19,7 @@ @@ -160,4 +160,3 @@ name="restartOutput"/> - diff --git a/inputFiles/solidMechanics/sedov_base.xml b/inputFiles/solidMechanics/sedov_base.xml index 49419832a75..fef292ad48d 100644 --- a/inputFiles/solidMechanics/sedov_base.xml +++ b/inputFiles/solidMechanics/sedov_base.xml @@ -12,7 +12,7 @@ diff --git a/inputFiles/solidMechanics/solidMechBlock.xml b/inputFiles/solidMechanics/solidMechBlock.xml index d3daec92f13..0aaf2aa0255 100644 --- a/inputFiles/solidMechanics/solidMechBlock.xml +++ b/inputFiles/solidMechanics/solidMechBlock.xml @@ -67,7 +67,7 @@ diff --git a/inputFiles/solidMechanics/viscoExtendedDruckerPrager_relaxation_base.xml b/inputFiles/solidMechanics/viscoExtendedDruckerPrager_relaxation_base.xml index a646a550529..c2e2dbf4da0 100644 --- a/inputFiles/solidMechanics/viscoExtendedDruckerPrager_relaxation_base.xml +++ b/inputFiles/solidMechanics/viscoExtendedDruckerPrager_relaxation_base.xml @@ -38,8 +38,7 @@ diff --git a/inputFiles/surfaceGeneration/DryFrac_StaticPenny_PrismElem.xml b/inputFiles/surfaceGeneration/DryFrac_StaticPenny_PrismElem.xml index ffc25136a86..f398d7beb79 100644 --- a/inputFiles/surfaceGeneration/DryFrac_StaticPenny_PrismElem.xml +++ b/inputFiles/surfaceGeneration/DryFrac_StaticPenny_PrismElem.xml @@ -84,7 +84,7 @@ diff --git a/inputFiles/thermalMultiphaseFlow/co2_thermal_obl_3d.xml b/inputFiles/thermalMultiphaseFlow/co2_thermal_obl_3d.xml index 60556a4bbe8..1fe5b4a1b17 100644 --- a/inputFiles/thermalMultiphaseFlow/co2_thermal_obl_3d.xml +++ b/inputFiles/thermalMultiphaseFlow/co2_thermal_obl_3d.xml @@ -78,7 +78,7 @@ diff --git a/inputFiles/thermalSinglePhaseFlowFractures/egsCollab_thermalFlow/egsCollab_thermalFlow_initialCond_base.xml b/inputFiles/thermalSinglePhaseFlowFractures/egsCollab_thermalFlow/egsCollab_thermalFlow_initialCond_base.xml index 0ec3e35393b..e0d4cb7f585 100644 --- a/inputFiles/thermalSinglePhaseFlowFractures/egsCollab_thermalFlow/egsCollab_thermalFlow_initialCond_base.xml +++ b/inputFiles/thermalSinglePhaseFlowFractures/egsCollab_thermalFlow/egsCollab_thermalFlow_initialCond_base.xml @@ -10,7 +10,7 @@ diff --git a/inputFiles/triaxialDriver/triaxialDriver_base.xml b/inputFiles/triaxialDriver/triaxialDriver_base.xml index 3fb0f62fe84..efd380e39d5 100644 --- a/inputFiles/triaxialDriver/triaxialDriver_base.xml +++ b/inputFiles/triaxialDriver/triaxialDriver_base.xml @@ -139,7 +139,7 @@ diff --git a/inputFiles/wavePropagation/acous3D_Q3_firstOrder_small_base.xml b/inputFiles/wavePropagation/acous3D_Q3_firstOrder_small_base.xml index cb071a26703..e68f1e00460 100644 --- a/inputFiles/wavePropagation/acous3D_Q3_firstOrder_small_base.xml +++ b/inputFiles/wavePropagation/acous3D_Q3_firstOrder_small_base.xml @@ -32,7 +32,7 @@ diff --git a/inputFiles/wavePropagation/acous3D_Q3_small_base.xml b/inputFiles/wavePropagation/acous3D_Q3_small_base.xml index 26f0631f8fa..ee89af2f316 100644 --- a/inputFiles/wavePropagation/acous3D_Q3_small_base.xml +++ b/inputFiles/wavePropagation/acous3D_Q3_small_base.xml @@ -31,7 +31,7 @@ diff --git a/inputFiles/wavePropagation/acous3D_Q5_firstOrder_small_base.xml b/inputFiles/wavePropagation/acous3D_Q5_firstOrder_small_base.xml index 32018f54c95..4fd8f1f781e 100644 --- a/inputFiles/wavePropagation/acous3D_Q5_firstOrder_small_base.xml +++ b/inputFiles/wavePropagation/acous3D_Q5_firstOrder_small_base.xml @@ -32,7 +32,7 @@ diff --git a/inputFiles/wavePropagation/acous3D_Q5_small_base.xml b/inputFiles/wavePropagation/acous3D_Q5_small_base.xml index 0ad60b621bf..f6a8afffb11 100644 --- a/inputFiles/wavePropagation/acous3D_Q5_small_base.xml +++ b/inputFiles/wavePropagation/acous3D_Q5_small_base.xml @@ -31,7 +31,7 @@ diff --git a/inputFiles/wavePropagation/acous3D_firstOrder_small_base.xml b/inputFiles/wavePropagation/acous3D_firstOrder_small_base.xml index 90e96ffc053..8bfdbe6f218 100644 --- a/inputFiles/wavePropagation/acous3D_firstOrder_small_base.xml +++ b/inputFiles/wavePropagation/acous3D_firstOrder_small_base.xml @@ -32,7 +32,7 @@ diff --git a/inputFiles/wavePropagation/acous3D_small_base.xml b/inputFiles/wavePropagation/acous3D_small_base.xml index 694ced3e1e0..7a57de721cf 100644 --- a/inputFiles/wavePropagation/acous3D_small_base.xml +++ b/inputFiles/wavePropagation/acous3D_small_base.xml @@ -31,7 +31,7 @@ diff --git a/inputFiles/wavePropagation/acous3D_vti_smoke.xml b/inputFiles/wavePropagation/acous3D_vti_smoke.xml index ef9127fe278..4305ac12319 100644 --- a/inputFiles/wavePropagation/acous3D_vti_smoke.xml +++ b/inputFiles/wavePropagation/acous3D_vti_smoke.xml @@ -114,7 +114,7 @@ diff --git a/inputFiles/wavePropagation/benchmarks/acous3D_benchmark_base.xml b/inputFiles/wavePropagation/benchmarks/acous3D_benchmark_base.xml index d8a475ea54f..15372829ea5 100644 --- a/inputFiles/wavePropagation/benchmarks/acous3D_benchmark_base.xml +++ b/inputFiles/wavePropagation/benchmarks/acous3D_benchmark_base.xml @@ -69,7 +69,7 @@ diff --git a/inputFiles/wavePropagation/benchmarks/elas3D_benchmark_base.xml b/inputFiles/wavePropagation/benchmarks/elas3D_benchmark_base.xml index fc3b967238b..aacd50aca96 100644 --- a/inputFiles/wavePropagation/benchmarks/elas3D_benchmark_base.xml +++ b/inputFiles/wavePropagation/benchmarks/elas3D_benchmark_base.xml @@ -98,7 +98,7 @@ @@ -241,4 +241,3 @@ - diff --git a/inputFiles/wavePropagation/elas3D_DAS_smoke.xml b/inputFiles/wavePropagation/elas3D_DAS_smoke.xml index 916d9a8fc38..cac61db881f 100644 --- a/inputFiles/wavePropagation/elas3D_DAS_smoke.xml +++ b/inputFiles/wavePropagation/elas3D_DAS_smoke.xml @@ -72,7 +72,7 @@ diff --git a/inputFiles/wavePropagation/elas3D_Q3_firstOrder_small_base.xml b/inputFiles/wavePropagation/elas3D_Q3_firstOrder_small_base.xml index 9c833d44be1..aacb0be1d1b 100644 --- a/inputFiles/wavePropagation/elas3D_Q3_firstOrder_small_base.xml +++ b/inputFiles/wavePropagation/elas3D_Q3_firstOrder_small_base.xml @@ -32,7 +32,7 @@ diff --git a/inputFiles/wavePropagation/elas3D_Q3_small_base.xml b/inputFiles/wavePropagation/elas3D_Q3_small_base.xml index c8e1063beb9..13d6a186dbf 100644 --- a/inputFiles/wavePropagation/elas3D_Q3_small_base.xml +++ b/inputFiles/wavePropagation/elas3D_Q3_small_base.xml @@ -81,7 +81,7 @@ diff --git a/inputFiles/wavePropagation/elas3D_Q5_firstOrder_small_base.xml b/inputFiles/wavePropagation/elas3D_Q5_firstOrder_small_base.xml index b360569bb0e..0ce1207ed0b 100644 --- a/inputFiles/wavePropagation/elas3D_Q5_firstOrder_small_base.xml +++ b/inputFiles/wavePropagation/elas3D_Q5_firstOrder_small_base.xml @@ -32,7 +32,7 @@ diff --git a/inputFiles/wavePropagation/elas3D_Q5_small_base.xml b/inputFiles/wavePropagation/elas3D_Q5_small_base.xml index 67e137325f8..0afb065f3c3 100644 --- a/inputFiles/wavePropagation/elas3D_Q5_small_base.xml +++ b/inputFiles/wavePropagation/elas3D_Q5_small_base.xml @@ -81,7 +81,7 @@ diff --git a/inputFiles/wavePropagation/elas3D_firstOrder_small_base.xml b/inputFiles/wavePropagation/elas3D_firstOrder_small_base.xml index 7c3fa5783a6..565d48b0115 100644 --- a/inputFiles/wavePropagation/elas3D_firstOrder_small_base.xml +++ b/inputFiles/wavePropagation/elas3D_firstOrder_small_base.xml @@ -32,7 +32,7 @@ diff --git a/inputFiles/wavePropagation/elas3D_small_base.xml b/inputFiles/wavePropagation/elas3D_small_base.xml index 2f79d894055..3233345e59a 100644 --- a/inputFiles/wavePropagation/elas3D_small_base.xml +++ b/inputFiles/wavePropagation/elas3D_small_base.xml @@ -88,7 +88,7 @@ diff --git a/inputFiles/wellbore/DeviatedElasticWellbore_base.xml b/inputFiles/wellbore/DeviatedElasticWellbore_base.xml index 5327562a25b..00fe17cc3e7 100644 --- a/inputFiles/wellbore/DeviatedElasticWellbore_base.xml +++ b/inputFiles/wellbore/DeviatedElasticWellbore_base.xml @@ -42,7 +42,7 @@ diff --git a/inputFiles/wellbore/DeviatedPoroElasticWellbore_Drilling_base.xml b/inputFiles/wellbore/DeviatedPoroElasticWellbore_Drilling_base.xml index 787e7e42b5b..c769ceac580 100644 --- a/inputFiles/wellbore/DeviatedPoroElasticWellbore_Drilling_base.xml +++ b/inputFiles/wellbore/DeviatedPoroElasticWellbore_Drilling_base.xml @@ -45,7 +45,7 @@ diff --git a/inputFiles/wellbore/DeviatedPoroElasticWellbore_Injection_base.xml b/inputFiles/wellbore/DeviatedPoroElasticWellbore_Injection_base.xml index dbe2957d719..d329375d8ca 100644 --- a/inputFiles/wellbore/DeviatedPoroElasticWellbore_Injection_base.xml +++ b/inputFiles/wellbore/DeviatedPoroElasticWellbore_Injection_base.xml @@ -41,7 +41,7 @@ diff --git a/inputFiles/wellbore/ThermoPoroElasticWellbore_base.xml b/inputFiles/wellbore/ThermoPoroElasticWellbore_base.xml index 5e4420a8cc4..44cd4c3e971 100644 --- a/inputFiles/wellbore/ThermoPoroElasticWellbore_base.xml +++ b/inputFiles/wellbore/ThermoPoroElasticWellbore_base.xml @@ -50,7 +50,7 @@ diff --git a/src/coreComponents/codingUtilities/RTTypes.cpp b/src/coreComponents/codingUtilities/RTTypes.cpp index f84818cb937..6fbf864d253 100644 --- a/src/coreComponents/codingUtilities/RTTypes.cpp +++ b/src/coreComponents/codingUtilities/RTTypes.cpp @@ -179,8 +179,9 @@ rtTypes::RegexMapType rtTypes::createBasicTypesRegexMap() string_view const groupNameDesc = "Input value must be a string that cannot be empty and contains only upper/lower letters, digits, and the characters . - _"; string_view const groupNameRegex = "[a-zA-Z0-9.\\-_]+"; - string_view const groupNameRefDesc = "Input value must be a string that can contain only upper/lower letters, digits, and the characters . - _ / *"; - string_view const groupNameRefRegex = "[a-zA-Z0-9.\\-_/*]*"; + // to reference groups, we need to support the / for paths, and * [ ] for fnmatch patterns. + string_view const groupNameRefDesc = "Input value must be a string that can contain only upper/lower letters, digits, and the characters . - _ / * [ ]"; + string_view const groupNameRefRegex = "[a-zA-Z0-9.\\-_/*\\[\\]]*"; // Build master list of regexes diff --git a/src/coreComponents/common/format/StringUtilities.cpp b/src/coreComponents/common/format/StringUtilities.cpp index e9bffe8c0f8..cd13ba3919e 100644 --- a/src/coreComponents/common/format/StringUtilities.cpp +++ b/src/coreComponents/common/format/StringUtilities.cpp @@ -57,10 +57,10 @@ string_view trimSpaces( string_view str ) } -string removeStringAndFollowingContent( string const & str, - string const & strToRemove ) +string removeStringAndFollowingContent( string_view const str, + string_view const strToRemove ) { - string newStr = str; + string_view newStr = str; // check if the line contains the string to remove std::size_t const pos = newStr.find( strToRemove ); @@ -70,7 +70,7 @@ string removeStringAndFollowingContent( string const & str, // remove the character and everything afterwards newStr = newStr.substr( 0, pos ); } - return newStr; + return string( newStr ); } // put definition here so we can control the allowable values of T and diff --git a/src/coreComponents/common/format/StringUtilities.hpp b/src/coreComponents/common/format/StringUtilities.hpp index d8a2ace618a..8f083816c86 100644 --- a/src/coreComponents/common/format/StringUtilities.hpp +++ b/src/coreComponents/common/format/StringUtilities.hpp @@ -39,11 +39,11 @@ string toLower( string const & input ); /** * @brief Join strings or other printable objects with a delimiter. - * @tparam IT type of iterator into the range of objects to join - * @tparam S type of delimiter, usually char, char const * or string - * @param first iterator to start of the range - * @param last iterator past-the-end of the range - * @param delim delimiter used to glue together strings + * @tparam IT type of iterator into the range of objects to join + * @tparam S type of delimiter, usually char, char const * or string + * @param first iterator to start of the range + * @param last iterator past-the-end of the range + * @param delim delimiter used to glue together strings * @return a string containing input values concatenated with a delimiter */ template< typename IT, typename S = char > @@ -66,14 +66,57 @@ 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 the type of delimiter, usually char, char const * or string - * @param cont the container to join + * @param container the container to join * @param delim delimiter used to glue together strings * @return a string containing input values concatenated with a delimiter */ template< typename CONTAINER, typename S = char > -string join( CONTAINER const & cont, S const & delim = S() ) +string join( CONTAINER const & container, S const & delim = S() ) +{ + return join( std::begin( container ), std::end( container ), delim ); +} + +/** + * @brief Join strings or other printable objects returned by a formatter functor. + * @tparam IT type of iterator into the range of objects to join + * @tparam S type of delimiter, usually char, char const * or string + * @tparam LAMBDA type of formatter functor, usually `[]( auto it ) -> string` + * @param formattingFunc formatter function to get a formattable value from a IT iterator + * @param first iterator to start of the range + * @param last iterator past-the-end of the range + * @param delim delimiter used to glue together strings + * @return a string containing input values concatenated with a delimiter + */ +template< typename IT, typename S, typename LAMBDA > +string joinLamda( IT first, IT last, S const & delim, LAMBDA formattingFunc ) +{ + if( first == last ) + { + return {}; + } + std::ostringstream oss; + oss << formattingFunc( first ); + while( ++first != last ) + { + oss << delim << formattingFunc( first ); + } + return oss.str(); +} + +/** + * @brief Join strings or other printable objects returned by a formatter functor. + * @tparam CONTAINER type of container to join + * @tparam S type of delimiter, usually char, char const * or string + * @tparam LAMBDA type of formatter functor, usually `[]( auto it ) -> string` + * @param formattingFunc formatter function to get a formattable value from an iterator of the container + * @param container container to join + * @param delim delimiter used to glue together strings + * @return a string containing input values concatenated with a delimiter + */ +template< typename CONTAINER, typename S, typename LAMBDA > +string joinLamda( CONTAINER const & container, S const & delim, LAMBDA formattingFunc ) { - return join( std::begin( cont ), std::end( cont ), delim ); + return joinLamda( std::begin( container ), std::end( container ), delim, formattingFunc ); } /** @@ -181,8 +224,8 @@ string_view trimSpaces( string_view str ); * @param[in] strToRemove the string to search for in the line * @return the new (truncated) string */ -string removeStringAndFollowingContent( string const & str, - string const & strToRemove ); +string removeStringAndFollowingContent( string_view str, + string_view strToRemove ); /** * @brief Take a string, and return a array1d with the cast values diff --git a/src/coreComponents/constitutive/docs/Constitutive.rst b/src/coreComponents/constitutive/docs/Constitutive.rst index 61108c5525d..d1441d78d7b 100644 --- a/src/coreComponents/constitutive/docs/Constitutive.rst +++ b/src/coreComponents/constitutive/docs/Constitutive.rst @@ -51,7 +51,7 @@ A typical ```` and ```` block will look like: diff --git a/src/coreComponents/mesh/CMakeLists.txt b/src/coreComponents/mesh/CMakeLists.txt index 481ef6f243e..f6fbb61e2e3 100644 --- a/src/coreComponents/mesh/CMakeLists.txt +++ b/src/coreComponents/mesh/CMakeLists.txt @@ -2,6 +2,7 @@ set( mesh_headers BufferOps.hpp CellElementRegion.hpp + CellElementRegionSelector.hpp CellElementSubRegion.hpp DomainPartition.hpp EdgeManager.hpp @@ -87,6 +88,7 @@ set( mesh_headers set( mesh_sources BufferOps.cpp CellElementRegion.cpp + CellElementRegionSelector.cpp CellElementSubRegion.cpp DomainPartition.cpp EdgeManager.cpp diff --git a/src/coreComponents/mesh/CellElementRegion.cpp b/src/coreComponents/mesh/CellElementRegion.cpp index e72550b1fc1..da3aabb63b3 100644 --- a/src/coreComponents/mesh/CellElementRegion.cpp +++ b/src/coreComponents/mesh/CellElementRegion.cpp @@ -17,6 +17,8 @@ #include "CellElementSubRegion.hpp" #include "mesh/generators/CellBlockABC.hpp" +#include + namespace geos { using namespace dataRepository; @@ -24,9 +26,24 @@ using namespace dataRepository; CellElementRegion::CellElementRegion( string const & name, Group * const parent ): ElementRegionBase( name, parent ) { + std::vector< string > elementNames; + for( int i = 0; i < numElementTypes(); ++i ) + { + if( getElementDim( (ElementType)i ) == 3 ) + { + elementNames.push_back( getElementTypeName( (ElementType)i ) ); + } + } + registerWrapper( viewKeyStruct::sourceCellBlockNamesString(), &m_cellBlockNames ). setRTTypeName( rtTypes::CustomTypes::groupNameRefArray ). - setInputFlag( InputFlags::REQUIRED ); + setInputFlag( InputFlags::REQUIRED ). + setDescription( GEOS_FMT( "List of the desired cell-blocks qualifiers to contain in this {}. Qualifiers can be either cell-block " + "names, region attribute values, or fnmatch pattern." + "The form of loaded cell-block names is of \"regionAttribute_elementType\", so \"1_tetrahedra\" " + " contains the tetrahedric elements for which the regionAttribute is 1.\n" + "The element types are: {}.", + catalogName(), stringutilities::join( elementNames, ", " ) ) ); registerWrapper( viewKeyStruct::coarseningRatioString(), &m_coarseningRatio ). setInputFlag( InputFlags::OPTIONAL ). @@ -38,13 +55,22 @@ CellElementRegion::~CellElementRegion() void CellElementRegion::generateMesh( Group const & cellBlocks ) { - Group & elementSubRegions = this->getGroup( viewKeyStruct::elementSubRegions() ); - - for( string const & cellBlockName : this->m_cellBlockNames ) + GEOS_THROW_IF( m_cellBlockNames.empty(), + GEOS_FMT( "{}: No cellBlock selected in this region.", + getDataContext() ), + InputError ); + Group & subRegions = this->getGroup( viewKeyStruct::elementSubRegions() ); + for( string const & cbName : m_cellBlockNames ) { - CellElementSubRegion & subRegion = elementSubRegions.registerGroup< CellElementSubRegion >( cellBlockName ); - CellBlockABC const & source = cellBlocks.getGroup< CellBlockABC >( subRegion.getName() ); - subRegion.copyFromCellBlock( source ); + CellBlockABC const * cellBlock = cellBlocks.getGroupPointer< CellBlockABC >( cbName ); + GEOS_THROW_IF( cellBlock == nullptr, + GEOS_FMT( "{}: No cellBlock named '{}' found.\nAvailable cellBlock list: {{ {} }}\nNo CellElementRegionSelector has been used to verify the cellBlock selection.", + getDataContext(), cbName, stringutilities::join( m_cellBlockNames, ", " ) ), + InputError ); + + // subRegion name must be the same as the cell-block (so we can match them and reference them in errors). + CellElementSubRegion & subRegion = subRegions.registerGroup< CellElementSubRegion >( cbName ); + subRegion.copyFromCellBlock( *cellBlock ); } } diff --git a/src/coreComponents/mesh/CellElementRegion.hpp b/src/coreComponents/mesh/CellElementRegion.hpp index 8316e9e3b67..e2156ceb805 100644 --- a/src/coreComponents/mesh/CellElementRegion.hpp +++ b/src/coreComponents/mesh/CellElementRegion.hpp @@ -85,16 +85,15 @@ class CellElementRegion : public ElementRegionBase /** - * @brief Getter for m_cellBlockNames - * @return The array of cell block names. + * @return List of user-requested mesh cellBlocks names. + * @note the list may be incomplete / illegible if CellElementRegionSelectorhas not been used on + * the instance. */ arrayView1d< string const > getCellBlockNames() const - { - return m_cellBlockNames.toViewConst(); - } + { return m_cellBlockNames.toViewConst(); } /** - * @brief Add a cellBlockRegion name to the list. + * @brief Select a cellBlock by its name for generateMesh(). * @param cellBlockName string containing the cell block region name. */ void addCellBlockName( string const & cellBlockName ) @@ -103,17 +102,25 @@ class CellElementRegion : public ElementRegionBase } /** - * @brief Add an array cellBlockRegion name to the list. + * @brief Select cellBlocks by their names for generateMesh(). * @param cellBlockNames array of string containing the cell block region names. */ - void addCellBlockNames( arrayView1d< string const > const & cellBlockNames ) + template< typename StringContainerType > + void setCellBlockNames( StringContainerType const & cellBlockNames ) { + m_cellBlockNames.clear(); for( auto const & name: cellBlockNames ) { m_cellBlockNames.emplace_back( name ); } } + /** + * @brief register every cellBlocks that is requested in the cellBlockNames list. + * @note Assume that the cellBlockNames list is filled valid `cellBlocks` names + * (use CellElementRegionSelector to verify & fill this list after the user-requests). + * @param cellBlocks Cell blocks from where the mesh is extracted. + */ virtual void generateMesh( Group const & cellBlocks ) override; ///@} @@ -127,19 +134,26 @@ class CellElementRegion : public ElementRegionBase /// @return String key for the coarsening ratio static constexpr char const * coarseningRatioString() {return "coarseningRatio"; } - /// @return String key for the cell block names + /// @return String key for the user-requested mesh cellBlocks qualifiers: cellblock names, cellblock match patterns, attribute values. static constexpr char const * sourceCellBlockNamesString() {return "cellBlocks"; } }; - private: - // Cell block names + /// @brief List of user-requested mesh cellBlocks qualifiers: cellblock names, cellblock match patterns, attribute values. string_array m_cellBlockNames; - // Coarsening ratio + /// @brief Coarsening ratio real64 m_coarseningRatio; + + /** + * @return all cell-block names entries from m_cellBlockAttributeValues, + * m_cellBlockMatchPatterns and m_cellBlockNames. + * @param cellBlocks the input mesh cell-block list + */ + std::set< string > computeSelectedCellBlocks( std::set< string > const & cellBlocksNames ) const; + }; } /* namespace geos */ diff --git a/src/coreComponents/mesh/CellElementRegionSelector.cpp b/src/coreComponents/mesh/CellElementRegionSelector.cpp new file mode 100644 index 00000000000..80047d71c79 --- /dev/null +++ b/src/coreComponents/mesh/CellElementRegionSelector.cpp @@ -0,0 +1,193 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 "mesh/CellElementRegionSelector.hpp" + +#include +#include + + +namespace geos +{ +using namespace dataRepository; +using ViewKeys = CellElementRegion::viewKeyStruct; + + +CellElementRegionSelector::CellElementRegionSelector( + Group const & cellBlocks, + std::map< integer, std::set< string > > const & regionsCellBlocks ) +{ + // The owners lists need to be initialized so we will be able to verify later that it is not empty. + + cellBlocks.forSubGroups< CellBlockABC >( [&] ( CellBlockABC const & cellBlock ) + { + string const name = cellBlock.getName(); + m_cellBlocksOwners.emplace( name, std::vector< CellElementRegion const * >() ); + } ); + + for( auto const & regionCellBlocks : regionsCellBlocks ) + { + string const regionAttributeStr = std::to_string( regionCellBlocks.first ); + m_regionAttributesCellBlocks.emplace( regionAttributeStr, regionCellBlocks.second ); + m_regionAttributesOwners.emplace( regionAttributeStr, std::vector< CellElementRegion const * >() ); + } +} + + +std::set< string > +CellElementRegionSelector::getMatchingCellblocks( CellElementRegion const & region, + string_view matchPattern ) const +{ + std::set< string > matchedCellBlocks; + bool matching = false; + for( auto const & [cellBlockName, owners] : m_cellBlocksOwners ) + { + // if the pattern matches the tested cellBlock name + if( fnmatch( matchPattern.data(), cellBlockName.c_str(), 0 ) == 0 ) + { + matching = true; + matchedCellBlocks.emplace( cellBlockName ); + } + } + + GEOS_THROW_IF( !matching, + GEOS_FMT( "{}: No cellBlock name is satisfying the qualifier '{}'.\n" + "Available cellBlock list: {{ {} }}\nAvailable region attribute list: {{ {} }}", + region.getWrapperDataContext( ViewKeys::sourceCellBlockNamesString() ), + matchPattern, + stringutilities::joinLamda( m_regionAttributesOwners, ", ", + []( auto pair ) { return pair->first; } ), + stringutilities::joinLamda( m_cellBlocksOwners, ", ", + []( auto pair ) { return pair->first; } ) ), + InputError ); + return matchedCellBlocks; +} + +void +CellElementRegionSelector::verifyRequestedCellBlocks( CellElementRegion const & region, + std::set< string > const & cellBlockNames ) const +{ + for( string const & requestedCellBlockName : cellBlockNames ) + { + // if cell block does not exist in the mesh + GEOS_THROW_IF( m_cellBlocksOwners.count( requestedCellBlockName ) == 0, + GEOS_FMT( "{}: No cellBlock named '{}'.\nAvailable cellBlock list: {{ {} }}", + region.getWrapperDataContext( ViewKeys::sourceCellBlockNamesString() ), + requestedCellBlockName, + stringutilities::joinLamda( m_cellBlocksOwners, ", ", + []( auto pair ) { return pair->first; } ) ), + InputError ); + } +} + + +void +CellElementRegionSelector::registerRegionSelection( CellElementRegion const & region, + std::set< string > const & cellBlockNames, + std::set< string > const & attributeValues ) +{ + for( string attributeValue : attributeValues ) + { + m_regionAttributesOwners[attributeValue].push_back( ®ion ); + } + + for( string const & cellBlockName : cellBlockNames ) + { + m_cellBlocksOwners[cellBlockName].push_back( ®ion ); + } +} + + +std::set< string > CellElementRegionSelector::buildCellBlocksSelection( CellElementRegion const & region ) +{ + std::set< string > cellBlocksSelection; + std::set< string > regionAttributeSelection; + + auto const qualifiers = region.getCellBlockNames(); + for( string const & qualifier : qualifiers ) + { + auto const regionCellBlocks = m_regionAttributesCellBlocks.find( qualifier ); + if( regionCellBlocks != m_regionAttributesCellBlocks.end() ) + { // if the qualifier is a region attribute value, let's select it + regionAttributeSelection.emplace( regionCellBlocks->first ); + for( string const & cellBlock : regionCellBlocks->second ) + { + cellBlocksSelection.emplace( cellBlock ); + } + } + else + { // the qualifier is a match pattern, or a simple cellblock name, let's select all matching cell-blocks + std::set< string > const matchedCellBlocks = getMatchingCellblocks( region, qualifier ); + cellBlocksSelection.insert( matchedCellBlocks.begin(), matchedCellBlocks.end() ); + } + } + + verifyRequestedCellBlocks( region, cellBlocksSelection ); + registerRegionSelection( region, cellBlocksSelection, regionAttributeSelection ); + + return cellBlocksSelection; +} + +void CellElementRegionSelector::checkSelectionConsistency() const +{ + auto const getRegionStr = []( auto regionPtrIterator ) -> string { + return GEOS_FMT( "- {}", (*regionPtrIterator)->getDataContext() ); + }; + + auto const checkOwnerCount = [&]( string_view qualifierType, + auto const & qualifiersOwners, + auto & orphanList ) { + // Search of never or multiple selected attribute values + std::vector< string > multipleRefsErrors; + for( auto const & [qualifier, owningRegions] : qualifiersOwners ) + { + if( owningRegions.size() == 0 ) + { + orphanList.insert( qualifier ); + } + else if( owningRegions.size() > 1 ) + { + multipleRefsErrors.push_back( + GEOS_FMT( "The {} '{}' has been referenced in multiple {}:\n{}", + qualifierType, qualifier, CellElementRegion::catalogName(), + stringutilities::joinLamda( owningRegions, '\n', getRegionStr ) ) ); + } + } + GEOS_THROW_IF( !multipleRefsErrors.empty(), stringutilities::join( multipleRefsErrors, "\n\n" ), InputError ); + }; + + std::set< string > orphanRegionAttributes; + std::set< string > orphanCellBlockNames; + checkOwnerCount( "region attribute", m_regionAttributesOwners, orphanRegionAttributes ); + checkOwnerCount( "cell-block", m_cellBlocksOwners, orphanCellBlockNames ); + + if( !orphanCellBlockNames.empty() ) + { + std::ostringstream oss; + if( !orphanRegionAttributes.empty() ) + { + oss << GEOS_FMT( "The region attributes {{ {} }} has not been referenced in any {}.\n", + stringutilities::join( orphanRegionAttributes, ", " ), + CellElementRegion::catalogName() ); + } + oss << GEOS_FMT( "The following cell-blocks has not been referenced in any region: {{ {} }}.\n", + stringutilities::join( orphanCellBlockNames, ", " ) ); + oss << GEOS_FMT( "Please add it in an existing {} (through the '{}' attribute), or consider creating a new one to describe your model.", + CellElementRegion::catalogName(), ViewKeys::sourceCellBlockNamesString() ); + GEOS_THROW( oss.str(), InputError ); + } +} + + +} /* namespace geos */ diff --git a/src/coreComponents/mesh/CellElementRegionSelector.hpp b/src/coreComponents/mesh/CellElementRegionSelector.hpp new file mode 100644 index 00000000000..962f99aca1b --- /dev/null +++ b/src/coreComponents/mesh/CellElementRegionSelector.hpp @@ -0,0 +1,124 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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 CellElementRegionSelector.hpp + */ + +#ifndef GEOS_MESH_CELLELEMENTREGIONSELECTOR_HPP_ +#define GEOS_MESH_CELLELEMENTREGIONSELECTOR_HPP_ + +#include "mesh/CellElementRegion.hpp" + +namespace geos +{ + +/** + * @class CellElementRegionSelector + * + * CellElementRegionSelector allows a CellElementRegion to safely select cell-blocks according to the user input. + * It handles all user input checks and throws an exception in the event of inconsistency. + */ +class CellElementRegionSelector +{ +public: + + /** + * @brief Construct a new CellElementRegionSelector. + * @param cellBlocks a Group containing all the available cell-blocks. + * @param cellBlocksRegion A map of the cellblocks name lists for each region attributes value. + */ + CellElementRegionSelector( dataRepository::Group const & cellBlocks, + std::map< integer, std::set< string > > const & cellBlocksRegion ); + + /** + * @brief Select the mesh cell-blocks for the specified region following the user inputs. + * @throw an InputError if the user setting are inconsistant. + * @param region the region for which we want to select the cell-blocks. + * @return the selected cell-blocks names. + */ + std::set< string > buildCellBlocksSelection( CellElementRegion const & region ); + + /** + * @throw An InputError if region cell-blocks selections is inconsistent: + * - cell-block is in more than one region, + * - orphan cell-block + * @todo For now, multiple regions per cell is not supported (ElementRegionManager::getCellBlockToSubRegionMap()). + * We could refactor the CellElementRegion & Mesh classes so regions are mapped to cell-blocks IN the mesh (and potentially + * to multiple regions per cell). So, for external meshes, the cell-blocks would no longer be exposed to the final user. + */ + void checkSelectionConsistency() const; + +private: + + /// @brief The separator between the regionAttribute value and the type of the shape in a given cellBlock. + static constexpr string_view cellBlockTypeSeparator = "_"; + + /// @brief A map that link every cell-block name to the CellElementRegion(s) that references it. + std::map< string, std::vector< CellElementRegion const * > > m_cellBlocksOwners; + + /// @brief A map that link every region attribute values to the CellElementRegion(s) that references it. + std::map< string, std::vector< CellElementRegion const * > > m_regionAttributesOwners; + + /** + * @brief A map of the cellblocks name lists for each region attributes value. Internal attribute type + * is integer to facilitate comparison with cellBlock qualifiers. + */ + std::map< string, std::set< string > const & > m_regionAttributesCellBlocks; + + /** + * @return A set of the FNMatch pattern from the provided lists. + * @param region The region for which we collect the match-patterns. + * @param requestedAttributeValues The user requested attribute values. They will get converted to + * match-pattern that select the coresponding cell-blocks. + * @param requestedMatchPatterns The match patterns that the user requested explicitely. + * @throw An InputError if the attribute values does not exist in the mesh. + */ + std::set< string > buildMatchPatterns( CellElementRegion const & region, + std::set< string > const & attributeValues, + std::set< string > const & matchPatterns ) const; + + /** + * @return A set of the cell-blocks that the provided match-patterns select. + * @param region The region for which we collect the cell-blocks. + * @param matchPatterns The FNMatch pattern + * @throw An InputError if a FNMatch pattern does not select any cell-block. + */ + std::set< string > getMatchingCellblocks( CellElementRegion const & region, + string_view matchPattern ) const; + + /** + * @brief A set of the cell-blocks that the provided match-patterns select. + * @param region The region for which we collect the cell-blocks. + * @param matchPatterns The FNMatch pattern set. + * @throw An InputError if a FNMatch pattern does not select any cell-block. + */ + void verifyRequestedCellBlocks( CellElementRegion const & region, + std::set< string > const & cellBlockNames ) const; + + /** + * @brief Effectively select the specified cell-blocks & region attribute for the specified region. + * @param region The region for which when want to select cell-blocks + * @param attributeValues The attribute values we want to select (can be empty). + * @param cellBlockNames The cell-block names we want to select (can be empty). + */ + void registerRegionSelection( CellElementRegion const & region, + std::set< string > const & cellBlockNames, + std::set< string > const & attributeValues ); + +}; + +} /* namespace geos */ + +#endif /* GEOS_MESH_CELLELEMENTREGIONSELECTOR_HPP_ */ diff --git a/src/coreComponents/mesh/ElementRegionManager.cpp b/src/coreComponents/mesh/ElementRegionManager.cpp index a03a70a4075..6f3669a0a19 100644 --- a/src/coreComponents/mesh/ElementRegionManager.cpp +++ b/src/coreComponents/mesh/ElementRegionManager.cpp @@ -28,6 +28,7 @@ #include "mesh/utilities/MeshMapUtilities.hpp" #include "schema/schemaUtilities.hpp" #include "mesh/generators/LineBlockABC.hpp" +#include "mesh/CellElementRegionSelector.hpp" namespace geos { @@ -77,7 +78,6 @@ Group * ElementRegionManager::createChild( string const & childKey, string const Group & elementRegions = this->getGroup( ElementRegionManager::groupKeyStruct::elementRegionsGroup() ); return &elementRegions.registerGroup( childName, CatalogInterface::factory( childKey, childName, &elementRegions ) ); - } void ElementRegionManager::expandObjectCatalogs() @@ -120,12 +120,23 @@ void ElementRegionManager::setSchemaDeviations( xmlWrapper::xmlNode schemaRoot, } } + void ElementRegionManager::generateMesh( CellBlockManagerABC const & cellBlockManager ) { - this->forElementRegions< CellElementRegion >( [&]( CellElementRegion & elemRegion ) - { - elemRegion.generateMesh( cellBlockManager.getCellBlocks() ); - } ); + { // cellBlocks loading + Group const & cellBlocks = cellBlockManager.getCellBlocks(); + CellElementRegionSelector cellBlockSelector{ cellBlocks, + cellBlockManager.getRegionAttributesCellBlocks() }; + this->forElementRegions< CellElementRegion >( [&]( CellElementRegion & elemRegion ) + { + elemRegion.setCellBlockNames( cellBlockSelector.buildCellBlocksSelection( elemRegion ) ); + elemRegion.generateMesh( cellBlocks ); + } ); + // selecting all cellblocks is mandatory + cellBlockSelector.checkSelectionConsistency(); + } + + this->forElementRegions< SurfaceElementRegion >( [&]( SurfaceElementRegion & elemRegion ) { elemRegion.generateMesh( cellBlockManager.getFaceBlocks() ); @@ -151,7 +162,6 @@ void ElementRegionManager::generateMesh( CellBlockManagerABC const & cellBlockMa tmp, relation ); } ); - } void ElementRegionManager::generateWells( CellBlockManagerABC const & cellBlockManager, diff --git a/src/coreComponents/mesh/ElementRegionManager.hpp b/src/coreComponents/mesh/ElementRegionManager.hpp index 573749ada07..1f3ab30a0c9 100644 --- a/src/coreComponents/mesh/ElementRegionManager.hpp +++ b/src/coreComponents/mesh/ElementRegionManager.hpp @@ -144,7 +144,7 @@ class ElementRegionManager : public ObjectManagerBase } /** - * @brief Generate the mesh. + * @brief Generate the mesh. Produce an error if a required cellBlock doesn't exist in the source mesh. * @param [in,out] cellBlockManager Reference to the abstract cell block manager. */ void generateMesh( CellBlockManagerABC const & cellBlockManager ); @@ -1186,8 +1186,6 @@ class ElementRegionManager : public ObjectManagerBase * @return reference to this object */ ElementRegionManager & operator=( const ElementRegionManager & ); - - }; diff --git a/src/coreComponents/mesh/ElementType.hpp b/src/coreComponents/mesh/ElementType.hpp index 24665ebe987..67208235e3b 100644 --- a/src/coreComponents/mesh/ElementType.hpp +++ b/src/coreComponents/mesh/ElementType.hpp @@ -110,6 +110,36 @@ ENUM_STRINGS( ElementType, "HendecagonalPrism", "Polyhedron" ); +/** + * @brief Returns a string describing the element. + * @param[in] type The element type. + * @return The name. + * @warning This information will be visible in the input file... Consider refactoring with great care. + */ +inline string getElementTypeName( ElementType const type ) +{ + switch( type ) + { + case ElementType::Hexahedron: return "hexahedra"; + case ElementType::Tetrahedron: return "tetrahedra"; + case ElementType::Wedge: return "wedges"; + case ElementType::Pyramid: return "pyramids"; + case ElementType::Prism5: return "pentagonalPrisms"; + case ElementType::Prism6: return "hexagonalPrisms"; + case ElementType::Prism7: return "heptagonalPrisms"; + case ElementType::Prism8: return "octagonalPrisms"; + case ElementType::Prism9: return "nonagonalPrisms"; + case ElementType::Prism10: return "decagonalPrisms"; + case ElementType::Prism11: return "hendecagonalPrisms"; + case ElementType::Polyhedron: return "polyhedra"; + default: + { + GEOS_ERROR( "Element type '" << type << "' is not supported" ); + return {}; + } + } +} + /// String available for mesh errors inline auto constexpr generalMeshErrorAdvice = "Consider checking the validity of your mesh with " "the `mesh_doctor` GEOS python tools (documentation at " diff --git a/src/coreComponents/mesh/FaceManager.cpp b/src/coreComponents/mesh/FaceManager.cpp index 9a3923ed358..b5924f7fde4 100644 --- a/src/coreComponents/mesh/FaceManager.cpp +++ b/src/coreComponents/mesh/FaceManager.cpp @@ -272,11 +272,7 @@ void FaceManager::sortAllFaceNodes( NodeManager const & nodeManager, if( facesToElements( faceIndex, 0 ) < 0 && facesToElements( faceIndex, 1 ) < 0 ) { GEOS_ERROR( getDataContext() << ": Face " << faceIndex << - " is not connected to any cell.\n" - "You might have:\n" - "- an invalid mesh,\n" - "- not enough CellElementRegions to describe your input mesh (all regions, simulated or not, must be listed),\n" - "- forgotten one cell type in an existing \"" << CellElementRegion::viewKeyStruct::sourceCellBlockNamesString() << "\'." ); + " is not connected to any cell. You might have an invalid mesh." ); } // Take the first defined face-to-(elt/region/sub region) to sorting direction. diff --git a/src/coreComponents/mesh/MeshLevel.cpp b/src/coreComponents/mesh/MeshLevel.cpp index 5ed92c326d7..fe3c98b6eca 100644 --- a/src/coreComponents/mesh/MeshLevel.cpp +++ b/src/coreComponents/mesh/MeshLevel.cpp @@ -204,8 +204,8 @@ MeshLevel::MeshLevel( string const & name, // create element region with the same name as source element region "Region" CellElementRegion & region = *(dynamic_cast< CellElementRegion * >( m_elementManager->createChild( sourceRegion.getCatalogName(), sourceRegion.getName() ) ) ); - // add cell block to the new element region with the same name as cell block name from source element region - region.addCellBlockNames( sourceRegion.getCellBlockNames() ); + // set cell block to the new element region with the same name as cell block name from source element region + region.setCellBlockNames( sourceRegion.getCellBlockNames() ); sourceRegion.forElementSubRegions< CellElementSubRegion >( [&]( CellElementSubRegion const & sourceSubRegion ) { diff --git a/src/coreComponents/mesh/docs/Mesh.rst b/src/coreComponents/mesh/docs/Mesh.rst index cf6e587336e..829d4a9a59d 100644 --- a/src/coreComponents/mesh/docs/Mesh.rst +++ b/src/coreComponents/mesh/docs/Mesh.rst @@ -32,14 +32,14 @@ The following is an example XML ```` block, which will generate a vertical + elementTypes="{ C3D8 }" + xCoords="{ 0, 1 }" + yCoords="{ 0, 1 }" + zCoords="{ 0, 2, 6 }" + nx="{ 1 }" + ny="{ 1 }" + nz="{ 2, 4 }" + cellBlockNames="{ cb1, cb2 }"/> - ``name`` the name of the mesh body @@ -168,7 +168,7 @@ The supported mesh elements for volume elements consist of the following: The mesh can be divided in several regions. These regions are intended to support different physics or to define different constitutive properties. -We usually use the ``attribute`` field is usually considered to define the regions. +By default, we use the ``attribute`` field to define the regions. .. _ImportingExternalMesh: @@ -179,7 +179,7 @@ Importing regions ***************** Several blocks are involved to import an external mesh into GEOS, defined in the XML input file. -These are the ```` block and the ```` block. +These are the ```` block and the ```` block. The mesh block has the following syntax: @@ -189,65 +189,108 @@ The mesh block has the following syntax: + file="/path/to/the/mesh/file.vtk" + regionAttribute="myAttribute" /> -We advise users to use absolute path to the mesh file, and strongly recommend the use of a logLevel -of 1 or more to obtain some information about the mesh import. This information contains for -example the list of regions that are imported with their names, which is particularly useful to -fill the ``cellBlocks`` field of the ``ElementRegions`` block (see below). Some information about the -imported surfaces is also provided. +..note:: + We advise users to use absolute path to the mesh file, and recommend the use of a ``logLevel`` + of 1 or more to obtain some information about the mesh import, including the list of regions that + are imported with their names, which is particularly useful to fill the field of the + ``CellElementRegions`` block (see below). Some information about the imported surfaces is also provided. -GEOS uses ``ElementRegions`` to support different physics -or to define different constitutive properties. -The ``ElementRegions`` block can contain several ``CellElementRegion`` blocks. A ``CellElementRegion`` is defined as a set of ``CellBlocks``. -A ``CellBlock`` is an ensemble of elements with the same element geometry. +GEOS uses ``ElementRegions`` to support different physics or to define different constitutive properties. +The ``ElementRegions`` block can contain several ``CellElementRegion`` blocks. A ``CellElementRegion`` +is defined as a set of cell-blocks, which are sets of elements with the same element +geometry, defined within the ``cellBlocks`` attribute. + +The naming of cell-blocks depends on if the mesh contains a data array which has the +same value as the ``regionAttribute`` of the ``VTKMesh`` (which is ``attribute`` by default). +This attribute is used to define regions in the vtu file and assign the cells to a given region. -The naming of the imported ``cellBlocks`` depends on whether the data array called ``regionAttribute`` is -present in the vtu file or not. This data array is used to define regions in the vtu file and -assign the cells to a given region. The ``regionAttribute`` is a integer and not a string -(unfortunately). +For now, loaded regions has the following limitations: +- The ``regionAttribute`` can only refer to integer values (no texts), +- Each element can belong to only one region. .. figure:: mesh_multi.png :align: center :width: 500 -In the example presented above, the mesh is is composed of two regions (*Top* and *Bot*). -Each region contains 4 ``cellBlocks``. +In GEOS, there are three different ways to select ``cellBlocks`` in a ``CellElementRegion``: -- If the vtu file does not contain ``regionAttribute``, then all the cells are grouped in a single - region, and the cell block names are just constructed from the cell types (hexahedra, wedges, - tetrahedra, etc). Then in the exemple above, the ``ElementRegions`` can be defined as bellow: +- Using a list of the desired ``regionAttribute`` values. + I.e. ``"{ 1, 2 }"`` selects all the cell-blocks of the ``regionAttribute`` 1 and 2. -.. code-block:: xml +- Using a list of the exact cell-blocks names from the mesh to contain in this CellElementRegion. + I.e. ``{ 1_tetrahedra, 1_pyramid, 1_hexahedra, 2_tetrahedra, 2_pyramid, 2_hexahedra }`` - - - +- Using a list of `fnmatch patterns `_ to match cell-block names to add them in this ``CellElementRegion``. + I.e. ``{ * }`` selects every elements, ``{ 1_* }`` selects the ``{ 1_tetrahedra, 1_pyramid, 1_hexahedra }`` cell-blocks. + +In the example presented above, the mesh is is composed of two regions. Each region contains 4 element types. + +- If the vtu file contains an attribute equals to the ``regionAttribute`` of the ``VTKMesh``, + then all ``cellBlock`` are named with this convention: ``regionAttribute_elementType``. Let's assume that + the top region of the exemple above has ``myAttribute`` to 1, and that the bottom region has ``myAttribute`` to 2, -- If the vtu file contains ``regionAttribute``, then the cells are grouped by regions based on their - individual (numeric) ``regionAttribute``. In that case, the naming convention for the ``cellBlocks`` is - ``regionAttribute_elementType``. Let's assume that the top region of the exemple above is identified - by the ``regionAttribute`` 1, and that the bottom region is identified with 2, - * If we want the ``CellElementRegion`` to contain all the cells, we write: .. code-block:: xml + + + + + + - * If we want two CellElementRegion with the top and bottom regions separated, we write: + + + + + + * If we want two ``CellElementRegion`` with the top and bottom regions separated, we write: .. code-block:: xml + + + + + + + + + + + + + +- If the vtu file does not contain any region attribute field, then all the cells are grouped in a single + region, and cellBlock names consist of just the cell types (hexahedra, wedges, tetrahedra, etc). + Then in the exemple above, the ``ElementRegions`` can be defined as bellow: + +.. code-block:: xml + + + + + + + + + + + + + + + + .. warning:: - We remind the user that **all** the imported ``cellBlocks`` must be included in one of the - ``CellElementRegion``. Even if some cells are meant to be inactive during the simulation, - they still have to be included in a ``CellElementRegion`` (this ``CellElementRegion`` should + **All** the imported ``cellBlocks`` must be included in one (and only one) of the ``CellElementRegion``. + Even if some cells are meant to be inactive during the simulation, they still have to be + included in a ``CellElementRegion`` (this ``CellElementRegion`` should simply not be included as a targetRegion of any of the solvers involved in the simulation). -The keywords for the ``cellBlocks`` element types are : +The ``cellBlocks`` element types are : - `hexahedra `_ - `tetrahedra `_ @@ -286,22 +359,26 @@ An example of a ``vtk`` file with all the physical regions defined is used in :r Importing surfaces ****************** -Surfaces are imported through point sets in GEOS. This feature is supported using only the ``vtk`` file format. +Surfaces are imported through point sets in GEOS. This feature is only supported using the ``vtk`` file format. In the same way than the regions, the surfaces of interests can be defined using the `physical entity names`. -The surfaces are automatically import in GEOS if they exist in the ``vtk`` file. +The surfaces are automatically imported in GEOS if they exist in the ``vtk`` file. Within GEOS, the point set will have the same name than the one given in the file. This name can be used -again to impose boundary condition. For instance, if a surface is named "Bottom" and the user wants to -impose a Dirichlet boundary condition of 0 on it, it can be easily done using this syntax. +again to impose boundary condition. + +For instance, if a surface is named "Bottom" and the user wants to +impose a Dirichlet boundary condition of 0 on it, it can be easily done using this syntax: .. code-block:: xml - + + + The name of the surface of interest appears under the keyword ``setNames``. Again, an example of a ``vtk`` file with the surfaces fully defined is available within :ref:`TutorialFieldCase` or :ref:`ExampleIsothermalHystInjection`. diff --git a/src/coreComponents/mesh/generators/CellBlockABC.hpp b/src/coreComponents/mesh/generators/CellBlockABC.hpp index 6ff5d08ca47..9c1427b7a74 100644 --- a/src/coreComponents/mesh/generators/CellBlockABC.hpp +++ b/src/coreComponents/mesh/generators/CellBlockABC.hpp @@ -53,7 +53,7 @@ class CellBlockABC : public dataRepository::Group /** * @brief Get the type of element in this subregion. - * @return a string specifying the type of element in this subregion + * @return the type of element in this subregion * * See class FiniteElementBase for possible element type. */ diff --git a/src/coreComponents/mesh/generators/CellBlockManager.cpp b/src/coreComponents/mesh/generators/CellBlockManager.cpp index 4e51bb0bcfe..2db3b3cfff2 100644 --- a/src/coreComponents/mesh/generators/CellBlockManager.cpp +++ b/src/coreComponents/mesh/generators/CellBlockManager.cpp @@ -769,6 +769,14 @@ CellBlock & CellBlockManager::registerCellBlock( string const & name ) return this->getCellBlocks().registerGroup< CellBlock >( name ); } +CellBlock & CellBlockManager::registerCellBlock( string const & cellBlockName, + integer regionAttribute ) +{ + CellBlock & cb = this->getCellBlocks().registerGroup< CellBlock >( cellBlockName ); + m_regionAttributesCellBlocks[ regionAttribute ].emplace( cellBlockName ); + return cb; +} + FaceBlock & CellBlockManager::registerFaceBlock( string const & name ) { return this->getFaceBlocks().registerGroup< FaceBlock >( name ); diff --git a/src/coreComponents/mesh/generators/CellBlockManager.hpp b/src/coreComponents/mesh/generators/CellBlockManager.hpp index 8664399b9a4..dcb15629251 100644 --- a/src/coreComponents/mesh/generators/CellBlockManager.hpp +++ b/src/coreComponents/mesh/generators/CellBlockManager.hpp @@ -158,6 +158,9 @@ class CellBlockManager : public CellBlockManagerABC Group & getCellBlocks() override; + std::map< integer, std::set< string > > const & getRegionAttributesCellBlocks() const override + { return m_regionAttributesCellBlocks; } + Group const & getFaceBlocks() const override; Group & getFaceBlocks() override; @@ -171,6 +174,14 @@ class CellBlockManager : public CellBlockManagerABC */ CellBlock & registerCellBlock( string const & name ); + /** + * @brief Registers and returns a cell block of name @p name. + * @param cellBlockName The name of the created cell block. + * @param regionAttribute The region attribute of the created cell block. + * @return A reference to the new cell block. The CellBlockManager owns this new instance. + */ + CellBlock & registerCellBlock( string const & cellBlockName, integer regionAttribute ); + /** * @brief Registers and returns a face block of name @p name. * @param name The name of the created face block. @@ -272,6 +283,8 @@ class CellBlockManager : public CellBlockManagerABC std::map< string, SortedArray< localIndex > > m_nodeSets; + std::map< integer, std::set< string > > m_regionAttributesCellBlocks; + real64 m_globalLength; localIndex m_numNodes; diff --git a/src/coreComponents/mesh/generators/CellBlockManagerABC.hpp b/src/coreComponents/mesh/generators/CellBlockManagerABC.hpp index 4dc7c5e048d..3c474520389 100644 --- a/src/coreComponents/mesh/generators/CellBlockManagerABC.hpp +++ b/src/coreComponents/mesh/generators/CellBlockManagerABC.hpp @@ -113,13 +113,18 @@ class CellBlockManagerABC : public dataRepository::Group * @brief Returns a group containing the cell blocks as CellBlockABC instances * @return Const reference to the Group instance. */ - virtual const Group & getCellBlocks() const = 0; + virtual Group const & getCellBlocks() const = 0; /** * @brief Returns a group containing the face blocks as FaceBlockABC instances * @return Const reference to the Group instance. */ - virtual const Group & getFaceBlocks() const = 0; + virtual Group const & getFaceBlocks() const = 0; + + /** + * @return A map of the cellblocks list for each region attribute values. + */ + virtual std::map< integer, std::set< string > > const & getRegionAttributesCellBlocks() const = 0; /** * @brief Total number of nodes across all the cell blocks. diff --git a/src/coreComponents/mesh/generators/InternalMeshGenerator.cpp b/src/coreComponents/mesh/generators/InternalMeshGenerator.cpp index 5d98c6449c3..0536ce29fbe 100644 --- a/src/coreComponents/mesh/generators/InternalMeshGenerator.cpp +++ b/src/coreComponents/mesh/generators/InternalMeshGenerator.cpp @@ -96,7 +96,8 @@ InternalMeshGenerator::InternalMeshGenerator( string const & name, Group * const registerWrapper( viewKeyStruct::elementTypesString(), &m_elementType ). setInputFlag( InputFlags::REQUIRED ). setSizedFromParent( 0 ). - setDescription( "Element types of each mesh block" ); + setDescription( GEOS_FMT( "Element types of each mesh block. Use \"C3D8\" for linear brick element. Possible values are: {}.", + stringutilities::join( EnumStrings< ElementType >::get(), ", " ) ) ); registerWrapper( viewKeyStruct::trianglePatternString(), &m_trianglePattern ). setApplyDefaultValue( 0 ). diff --git a/src/coreComponents/mesh/generators/VTKUtilities.cpp b/src/coreComponents/mesh/generators/VTKUtilities.cpp index 81533728d32..72045afa4e5 100644 --- a/src/coreComponents/mesh/generators/VTKUtilities.cpp +++ b/src/coreComponents/mesh/generators/VTKUtilities.cpp @@ -1817,36 +1817,6 @@ void fillCellBlock( vtkDataSet & mesh, } } -/** - * @brief Returns a string describing the element. - * @param[in] type The element type. - * @return The name. - * @warning This information will be visible in the input file... Consider refactoring with great care. - */ -string getElementTypeName( ElementType const type ) -{ - switch( type ) - { - case ElementType::Hexahedron: return "hexahedra"; - case ElementType::Tetrahedron: return "tetrahedra"; - case ElementType::Wedge: return "wedges"; - case ElementType::Pyramid: return "pyramids"; - case ElementType::Prism5: return "pentagonalPrisms"; - case ElementType::Prism6: return "hexagonalPrisms"; - case ElementType::Prism7: return "heptagonalPrisms"; - case ElementType::Prism8: return "octagonalPrisms"; - case ElementType::Prism9: return "nonagonalPrisms"; - case ElementType::Prism10: return "decagonalPrisms"; - case ElementType::Prism11: return "hendecagonalPrisms"; - case ElementType::Polyhedron: return "polyhedra"; - default: - { - GEOS_ERROR( "Element type '" << type << "' is not supported" ); - return {}; - } - } -} - void importMaterialField( std::vector< vtkIdType > const & cellIds, vtkDataArray * vtkArray, WrapperBase & wrapper ) @@ -2143,7 +2113,7 @@ void writeCells( integer const logLevel, GEOS_LOG_RANK_0_IF( logLevel >= 1, "Importing cell block " << cellBlockName ); // Create and resize the cell block. - CellBlock & cellBlock = cellBlockManager.registerCellBlock( cellBlockName ); + CellBlock & cellBlock = cellBlockManager.registerCellBlock( cellBlockName, regionId ); cellBlock.setElementType( elemType ); cellBlock.resize( LvArray::integerConversion< localIndex >( cellIds.size() ) ); diff --git a/src/coreComponents/schema/schema.xsd b/src/coreComponents/schema/schema.xsd index 133fb0acdc7..a3d062cbb7f 100644 --- a/src/coreComponents/schema/schema.xsd +++ b/src/coreComponents/schema/schema.xsd @@ -50,12 +50,12 @@ - + - + @@ -1523,7 +1523,7 @@ stress - traction is applied to the faces as specified by the inner product of i - + @@ -1627,7 +1627,7 @@ stress - traction is applied to the faces as specified by the inner product of i - + @@ -6284,7 +6284,8 @@ The expected format is "{ waterMax, oilMax }", in that order--> - + diff --git a/src/coreComponents/schema/schema.xsd.other b/src/coreComponents/schema/schema.xsd.other index 215191d89f5..e982b4f9e2b 100644 --- a/src/coreComponents/schema/schema.xsd.other +++ b/src/coreComponents/schema/schema.xsd.other @@ -50,12 +50,12 @@ - + - + diff --git a/src/coreComponents/unitTests/constitutiveTests/testPVT.xml b/src/coreComponents/unitTests/constitutiveTests/testPVT.xml index aacf9b001c0..cb59ac5f35c 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testPVT.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testPVT.xml @@ -113,7 +113,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testPVT_CO2Brine.xml b/src/coreComponents/unitTests/constitutiveTests/testPVT_CO2Brine.xml index 12ec4e62d8d..a48e22dfbe5 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testPVT_CO2Brine.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testPVT_CO2Brine.xml @@ -147,7 +147,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testPVT_CO2BrineTables.xml b/src/coreComponents/unitTests/constitutiveTests/testPVT_CO2BrineTables.xml index 4a667e05691..4db6d9f6b7a 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testPVT_CO2BrineTables.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testPVT_CO2BrineTables.xml @@ -96,7 +96,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testPVT_PhaseComposition.xml b/src/coreComponents/unitTests/constitutiveTests/testPVT_PhaseComposition.xml index 75d490e6a50..5207c9746d9 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testPVT_PhaseComposition.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testPVT_PhaseComposition.xml @@ -149,7 +149,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testPVT_docExample.xml b/src/coreComponents/unitTests/constitutiveTests/testPVT_docExample.xml index b1747d41dd3..872a6a54a4c 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testPVT_docExample.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testPVT_docExample.xml @@ -70,7 +70,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testReactiveFluid.xml b/src/coreComponents/unitTests/constitutiveTests/testReactiveFluid.xml index 65a3c58cf4f..d37ed605c49 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testReactiveFluid.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testReactiveFluid.xml @@ -74,7 +74,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggCase1.xml b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggCase1.xml index b88f0be473f..f60770dd5e0 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggCase1.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggCase1.xml @@ -66,7 +66,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggCase2.xml b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggCase2.xml index f61bf8507bc..f89a07a98cf 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggCase2.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggCase2.xml @@ -65,7 +65,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggLoadPathDryUseLinear.xml b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggLoadPathDryUseLinear.xml index 4fb6558ae89..10ca3761690 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggLoadPathDryUseLinear.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggLoadPathDryUseLinear.xml @@ -66,7 +66,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggLoadPathWetUseLinear.xml b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggLoadPathWetUseLinear.xml index d365bb0e506..f8e2dd37298 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggLoadPathWetUseLinear.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggLoadPathWetUseLinear.xml @@ -66,7 +66,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggUseLinear.xml b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggUseLinear.xml index 69703b7ad1f..dd42c6b0330 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggUseLinear.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_delftEggUseLinear.xml @@ -66,7 +66,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_druckerPragerExtended.xml b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_druckerPragerExtended.xml index cd4849ab65b..f92445a9639 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_druckerPragerExtended.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_druckerPragerExtended.xml @@ -66,7 +66,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_elasticIsotropic.xml b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_elasticIsotropic.xml index 57beb56efc0..dde6e2b9a66 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_elasticIsotropic.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_elasticIsotropic.xml @@ -61,7 +61,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_elasticIsotropicPressureDependent.xml b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_elasticIsotropicPressureDependent.xml index 585599a36e3..beb0a7f5d99 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_elasticIsotropicPressureDependent.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_elasticIsotropicPressureDependent.xml @@ -57,7 +57,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_modifiedCamClay.xml b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_modifiedCamClay.xml index c1ae1b25dec..03b171303db 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_modifiedCamClay.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_modifiedCamClay.xml @@ -66,7 +66,7 @@ diff --git a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_modifiedCamClayVolumetric.xml b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_modifiedCamClayVolumetric.xml index d6075857430..b55ed3a520a 100644 --- a/src/coreComponents/unitTests/constitutiveTests/testTriaxial_modifiedCamClayVolumetric.xml +++ b/src/coreComponents/unitTests/constitutiveTests/testTriaxial_modifiedCamClayVolumetric.xml @@ -60,7 +60,7 @@ diff --git a/src/coreComponents/unitTests/dataRepositoryTests/testGroupPath.cpp b/src/coreComponents/unitTests/dataRepositoryTests/testGroupPath.cpp index d27adf38c87..032d6a191ab 100644 --- a/src/coreComponents/unitTests/dataRepositoryTests/testGroupPath.cpp +++ b/src/coreComponents/unitTests/dataRepositoryTests/testGroupPath.cpp @@ -67,7 +67,7 @@ TEST( testGroupPath, testGlobalPaths ) diff --git a/src/coreComponents/unitTests/fieldSpecificationTests/testRecursiveFieldApplication.cpp b/src/coreComponents/unitTests/fieldSpecificationTests/testRecursiveFieldApplication.cpp index 18bcdb53c8e..12288b381e0 100644 --- a/src/coreComponents/unitTests/fieldSpecificationTests/testRecursiveFieldApplication.cpp +++ b/src/coreComponents/unitTests/fieldSpecificationTests/testRecursiveFieldApplication.cpp @@ -20,6 +20,7 @@ #include "fieldSpecification/FieldSpecificationManager.hpp" #include "mesh/DomainPartition.hpp" #include "mesh/generators/CellBlockManager.hpp" +#include "mesh/CellElementRegionSelector.hpp" #include "common/GEOS_RAJA_Interface.hpp" #include "common/DataTypes.hpp" #include "common/TimingMacros.hpp" @@ -98,13 +99,15 @@ TEST( FieldSpecification, Recursive ) reg1Tet.setElementType( geos::ElementType::Tetrahedron ); reg1Tet.resize( nbTetReg1 ); + Group const & cellBlocks = cellBlockManager.getCellBlocks(); + reg0.addCellBlockName( reg0Hex.getName() ); reg0.addCellBlockName( reg0Tet.getName() ); - reg0.generateMesh( cellBlockManager.getCellBlocks() ); + reg0.generateMesh( cellBlocks ); reg1.addCellBlockName( reg1Hex.getName() ); reg1.addCellBlockName( reg1Tet.getName() ); - reg1.generateMesh( cellBlockManager.getCellBlocks() ); + reg1.generateMesh( cellBlocks ); // The cell block manager should not be used anymore. domain.deregisterGroup( keys::cellManager ); diff --git a/src/coreComponents/unitTests/fluidFlowTests/testCompMultiphaseFlow.cpp b/src/coreComponents/unitTests/fluidFlowTests/testCompMultiphaseFlow.cpp index 13b6f4acf2d..31f816164e1 100644 --- a/src/coreComponents/unitTests/fluidFlowTests/testCompMultiphaseFlow.cpp +++ b/src/coreComponents/unitTests/fluidFlowTests/testCompMultiphaseFlow.cpp @@ -68,7 +68,7 @@ char const * xmlInput = - + - + - + diff --git a/src/coreComponents/unitTests/fluidFlowTests/testThermalSinglePhaseFlow.cpp b/src/coreComponents/unitTests/fluidFlowTests/testThermalSinglePhaseFlow.cpp index 54b1798007d..f0eea49be3a 100644 --- a/src/coreComponents/unitTests/fluidFlowTests/testThermalSinglePhaseFlow.cpp +++ b/src/coreComponents/unitTests/fluidFlowTests/testThermalSinglePhaseFlow.cpp @@ -80,7 +80,7 @@ char const * xmlInput = diff --git a/src/coreComponents/unitTests/meshTests/CMakeLists.txt b/src/coreComponents/unitTests/meshTests/CMakeLists.txt index fe8cca29817..1bd39c09f11 100644 --- a/src/coreComponents/unitTests/meshTests/CMakeLists.txt +++ b/src/coreComponents/unitTests/meshTests/CMakeLists.txt @@ -2,7 +2,8 @@ set( gtest_geosx_tests testMeshEnums.cpp testMeshGeneration.cpp - testNeighborCommunicator.cpp ) + testNeighborCommunicator.cpp + testElementRegions.cpp ) set( gtest_geosx_mpi_tests testNeighborCommunicator.cpp ) diff --git a/src/coreComponents/unitTests/meshTests/box_hybrid_mesh.vtu b/src/coreComponents/unitTests/meshTests/box_hybrid_mesh.vtu new file mode 100644 index 00000000000..60d2c15b5de Binary files /dev/null and b/src/coreComponents/unitTests/meshTests/box_hybrid_mesh.vtu differ diff --git a/src/coreComponents/unitTests/meshTests/testElementRegions.cpp b/src/coreComponents/unitTests/meshTests/testElementRegions.cpp new file mode 100644 index 00000000000..3202f0b71fb --- /dev/null +++ b/src/coreComponents/unitTests/meshTests/testElementRegions.cpp @@ -0,0 +1,236 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * 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) 2023-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +// TPL includes +#include + +// Source includes +#include "codingUtilities/UnitTestUtilities.hpp" +#include "dataRepository/xmlWrapper.hpp" +#include "mainInterface/GeosxState.hpp" +#include "mainInterface/initialization.hpp" +#include "mainInterface/ProblemManager.hpp" +#include "mesh/generators/CellBlockManagerABC.hpp" +#include "mesh/generators/CellBlockABC.hpp" + +// special CMake-generated include +#include "tests/meshDirName.hpp" + +using namespace geos; +using namespace geos::testing; +using namespace geos::dataRepository; + + +CommandLineOptions g_commandLineOptions; + +struct TestCase +{ + string name; + bool isExpectedToPass = true; + std::vector< string > stringsToMention; + string_view xmlRegions; +}; + +class ElementRegionTestFixture : public ::testing::TestWithParam< TestCase > +{ +public: + ElementRegionTestFixture(): + state( std::make_unique< CommandLineOptions >( g_commandLineOptions ) ) + {} + + virtual ~ElementRegionTestFixture() = default; +private: + GeosxState state; +}; + +TEST_P( ElementRegionTestFixture, testVTKImportRegionSyntaxes ) +{ + TestCase const testCase = GetParam(); + + string const pattern = + R"xml( + + + + + + {} + + + )xml"; + string const xmlInput = GEOS_FMT( pattern, + testMeshDir + "/box_hybrid_mesh.vtu", + testCase.xmlRegions ); + + ProblemManager & problem = getGlobalState().getProblemManager(); + problem.parseInputString( xmlInput ); + + if( testCase.isExpectedToPass ) + { + try + { + EXPECT_NO_FATAL_FAILURE( problem.problemSetup() ) << GEOS_FMT( "Test case '{}' did throw an error.", + testCase.name ); + } + catch( std::exception const & e ) + { + GTEST_FAIL() << GEOS_FMT( "Test case '{}' did throw an exception ({}) but was not expected to :\n{}", + testCase.name, LvArray::system::demangle( typeid( e ).name() ), e.what() ); + } + } + else + { + try + { + EXPECT_NO_FATAL_FAILURE( problem.problemSetup() ) << GEOS_FMT( "Test case '{}' did throw an error.", + testCase.name ); + GTEST_FAIL() << GEOS_FMT( "Test case '{}' did not thrown any exception but was expected to.", + testCase.name ); + } + catch( InputError const & e ) + { + string const expStr = e.what(); + for( auto const & str : testCase.stringsToMention ) + { + bool isExceptionContainingStr = expStr.find( str ) != string::npos; + EXPECT_TRUE( isExceptionContainingStr ) << GEOS_FMT( "Test case '{}' exception did not mention the string '{}'. Exception string:\n{}", + testCase.name, str, e.what() ); + } + } + catch( std::exception const & e ) + { + GTEST_FAIL() << GEOS_FMT( "Test case '{}' did throw an exception ({}) but was not expected to :\n{}", + testCase.name, LvArray::system::demangle( typeid( e ).name() ), e.what() ); + } + catch( ... ) + { + GTEST_FAIL() << GEOS_FMT( "Test case '{}': Unexpected exception.", + testCase.name ); + } + } +} + +TestCase const vtkImportRegionSyntaxCases[] = { + { // should not crash + "regular cell-block list", true, { }, + R"xml( + + + )xml" + }, + { // crash because of not existing primitive (2_pendecagonalPrism) + "non existing 2_pendecagonalPrism", false, { "reservoir", "2_pendecagonalPrism" }, + R"xml( + + + )xml" + }, + { // crash because of not unknown primitive name (helloWorld) + "non existing helloWorld", false, { "overburden", "helloWorld" }, + R"xml( + + + )xml" + }, + { // crash because of lacking one primitive (1_hexahedra) + "lacking 1_hexahedra", false, { "1_hexahedra" }, + R"xml( + + + )xml" + }, + { // mentioning the same cell-blocks in multiple regions (1_hexahedra) + "multiple 1_hexahedra", false, { "overburden", "reservoir", "1_hexahedra" }, + R"xml( + + + )xml" + }, + { // should not crash + "regular region attribute list", true, { }, + R"xml( + + + )xml" + }, + { // mentioning the same region attribute in multiple cellBlocks (6 in overburden & reservoir) + "multiple region 1", false, { "6", "region attribute", "overburden", "reservoir" }, + R"xml( + + + )xml" + }, + { // forgetting a region attribute (5) + "forget region 5", false, { "5", "region attribute" }, + R"xml( + + + )xml" + }, + { // should not crash + "regular * wildcard", true, { }, + R"xml( + + )xml" + }, + { // mentioning the same regions in multiple cellBlocks (because of "*") + "* wildcard + region list", false, { "2", "6", "everything", "reservoir" }, + R"xml( + + + )xml" + }, + { // should not crash + "mixing selection methods on 2 regions", true, { }, + R"xml( + + + )xml" + }, + { // should not crash + "mixing all selection methods on 1 region", true, { }, + R"xml( + + )xml" + } +}; +INSTANTIATE_TEST_SUITE_P( testElementRegions, ElementRegionTestFixture, + ::testing::ValuesIn( vtkImportRegionSyntaxCases ) ); + + +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/coreComponents/unitTests/wavePropagationTests/testWavePropagation.cpp b/src/coreComponents/unitTests/wavePropagationTests/testWavePropagation.cpp index 96f14de0bfe..11664efc437 100644 --- a/src/coreComponents/unitTests/wavePropagationTests/testWavePropagation.cpp +++ b/src/coreComponents/unitTests/wavePropagationTests/testWavePropagation.cpp @@ -99,7 +99,7 @@ char const * xmlInput = diff --git a/src/coreComponents/unitTests/wavePropagationTests/testWavePropagationAcousticFirstOrder.cpp b/src/coreComponents/unitTests/wavePropagationTests/testWavePropagationAcousticFirstOrder.cpp index 983b1c2e1c3..bb9a6eef28e 100644 --- a/src/coreComponents/unitTests/wavePropagationTests/testWavePropagationAcousticFirstOrder.cpp +++ b/src/coreComponents/unitTests/wavePropagationTests/testWavePropagationAcousticFirstOrder.cpp @@ -106,7 +106,7 @@ char const * xmlInput = diff --git a/src/coreComponents/unitTests/wavePropagationTests/testWavePropagationDAS.cpp b/src/coreComponents/unitTests/wavePropagationTests/testWavePropagationDAS.cpp index 3c9eeb20659..e05e49735ae 100644 --- a/src/coreComponents/unitTests/wavePropagationTests/testWavePropagationDAS.cpp +++ b/src/coreComponents/unitTests/wavePropagationTests/testWavePropagationDAS.cpp @@ -104,7 +104,7 @@ char const * xmlInput = diff --git a/src/coreComponents/unitTests/wavePropagationTests/testWavePropagationElasticFirstOrder.cpp b/src/coreComponents/unitTests/wavePropagationTests/testWavePropagationElasticFirstOrder.cpp index c5884ee9fd1..10fa8cae06f 100644 --- a/src/coreComponents/unitTests/wavePropagationTests/testWavePropagationElasticFirstOrder.cpp +++ b/src/coreComponents/unitTests/wavePropagationTests/testWavePropagationElasticFirstOrder.cpp @@ -106,7 +106,7 @@ char const * xmlInput = diff --git a/src/coreComponents/unitTests/wellsTests/testReservoirSinglePhaseMSWells.cpp b/src/coreComponents/unitTests/wellsTests/testReservoirSinglePhaseMSWells.cpp index 3401166c3ae..0835f9c45c4 100644 --- a/src/coreComponents/unitTests/wellsTests/testReservoirSinglePhaseMSWells.cpp +++ b/src/coreComponents/unitTests/wellsTests/testReservoirSinglePhaseMSWells.cpp @@ -97,7 +97,7 @@ char const * PostXmlInput = diff --git a/src/coreComponents/unitTests/xmlTests/basic_input.xml b/src/coreComponents/unitTests/xmlTests/basic_input.xml index 37c611aa479..3735d47c0f4 100644 --- a/src/coreComponents/unitTests/xmlTests/basic_input.xml +++ b/src/coreComponents/unitTests/xmlTests/basic_input.xml @@ -46,7 +46,7 @@ diff --git a/src/coreComponents/unitTests/xmlTests/multifile_input/solver.xml b/src/coreComponents/unitTests/xmlTests/multifile_input/solver.xml index c1e25343bc3..9b2bc1e11e2 100644 --- a/src/coreComponents/unitTests/xmlTests/multifile_input/solver.xml +++ b/src/coreComponents/unitTests/xmlTests/multifile_input/solver.xml @@ -29,7 +29,7 @@ diff --git a/src/coreComponents/unitTests/xmlTests/testXML.cpp b/src/coreComponents/unitTests/xmlTests/testXML.cpp index 5d010686ac1..40fa4f64f9b 100644 --- a/src/coreComponents/unitTests/xmlTests/testXML.cpp +++ b/src/coreComponents/unitTests/xmlTests/testXML.cpp @@ -64,7 +64,7 @@ TEST( testXML, testXMLString ) diff --git a/src/docs/sphinx/basicExamples/co2Injection/Example.rst b/src/docs/sphinx/basicExamples/co2Injection/Example.rst index 63f0c4f0add..d73796de79b 100644 --- a/src/docs/sphinx/basicExamples/co2Injection/Example.rst +++ b/src/docs/sphinx/basicExamples/co2Injection/Example.rst @@ -134,8 +134,9 @@ The **TwoPointFluxApproximation** is chosen for the fluid equation discretizatio Element regions --------------- -We define a **CellElementRegion** pointing to the cell block defining the reservoir mesh, and a **WellElementRegion** for the well. +We define a **CellElementRegion** pointing to all reservoir mesh cells, and a **WellElementRegion** for the well. The two regions contain a list of constitutive model names. +The keyword "all" is used here to automatically select all cells of the mesh. .. literalinclude:: ../../../../../inputFiles/compositionalMultiphaseWell/simpleCo2InjTutorial_base.xml :language: xml diff --git a/src/docs/sphinx/basicExamples/multiphaseFlow/Example.rst b/src/docs/sphinx/basicExamples/multiphaseFlow/Example.rst index b0a8183bfd6..341e7a22d46 100644 --- a/src/docs/sphinx/basicExamples/multiphaseFlow/Example.rst +++ b/src/docs/sphinx/basicExamples/multiphaseFlow/Example.rst @@ -82,7 +82,7 @@ Mesh ------- In this simulation, we define a simple mesh generated internally using the **InternalMesh** generator, as -illustrated in the previous examples. +illustrated in the first tutorial (:ref:`TutorialSinglePhaseFlowWithInternalMesh`). The mesh dimensions and cell sizes are chosen to be those specified in the SPE10 test case, but are limited to the two bottom layers. The mesh description must be done in meters. @@ -173,13 +173,12 @@ Reservoir region In the **ElementRegions** XML block, we define a **CellElementRegion** named ``reservoir`` corresponding to the reservoir mesh. -The attribute ``cellBlocks`` is set to ``block`` to point this element region -to the hexahedral mesh defined internally. +``cellBlocks`` is set to ``{ * }`` to automatically target every cells of the mesh. The **CellElementRegion** must also point to the constitutive models that are used to update the dynamic rock and fluid properties in the cells of the reservoir mesh. The names ``fluid``, ``rock``, and ``relperm`` used for this in the ``materialList`` -correspond to the attribute ``name`` of the **Constitutive** block. +correspond to the **Constitutive** blocks with the coresponding names. .. literalinclude:: ../../../../../inputFiles/compositionalMultiphaseFlow/benchmarks/SPE10/deadOilSpe10Layers84_85_base_iterative.xml :language: xml diff --git a/src/docs/sphinx/basicExamples/multiphaseFlowWithWells/Example.rst b/src/docs/sphinx/basicExamples/multiphaseFlowWithWells/Example.rst index 1afb1185816..7fb95a4a927 100644 --- a/src/docs/sphinx/basicExamples/multiphaseFlowWithWells/Example.rst +++ b/src/docs/sphinx/basicExamples/multiphaseFlowWithWells/Example.rst @@ -242,11 +242,8 @@ In this section of the input file, we follow the procedure described in :ref:`TutorialDeadOilBottomLayersSPE10` for the definition of the reservoir region with multiphase constitutive models. We associate a **CellElementRegion** named ``reservoir`` to the reservoir mesh. -Since we have imported a mesh with one region consisting of hexahedral cells, we -must set the attribute ``cellBlocks`` to ``hexahedra``. - -.. note:: - If you use a name that is not ``hexahedra`` for this attribute, GEOS will throw an error at the beginning of the simulation. +Since we have imported a mesh with only one region, we can set ``cellBlocks`` to ``{ * }`` +(we could also set ``cellBlocks`` to ``{ hexahedra }`` as the mesh has only hexahedral cells). We also associate a **WellElementRegion** to each well. As the **CellElementRegion**, it contains a ``materialList`` that must point (by name) to the constitutive models diff --git a/src/docs/sphinx/developerGuide/Contributing/Sphinx.rst b/src/docs/sphinx/developerGuide/Contributing/Sphinx.rst index 2b09f25e2e4..c08d0890e76 100644 --- a/src/docs/sphinx/developerGuide/Contributing/Sphinx.rst +++ b/src/docs/sphinx/developerGuide/Contributing/Sphinx.rst @@ -5,24 +5,26 @@ Sphinx Documentation Generating the documentation ==================================== -- To generate the documentation files, you will need to install Sphinx using +- To generate the documentation files, you will need to install Sphinx using: .. code-block:: sh - sudo apt install python-sphinx + pip -m install sphinx + pip -m install sphinx-design sphinx-argparse sphinxcontrib-plantuml sphinxcontrib.programoutput sphinx_rtd_theme + pip -m install scipy - Then you can generate the documentation files with the following commands +- Then you can generate the documentation files with the following commands: - .. code-block:: sh + .. code-block:: sh - cd GEOS/build-your-platform-release - make geosx_docs + cd /path/to/GEOS/build-your-platform-release + make geosx_docs - That will create a new folder .. code-block:: sh - GEOS/build-your-platform-release/html/docs/sphinx + /path/to/GEOS/build-your-platform-release/html/docs/sphinx which contains all the html files generated. diff --git a/src/docs/sphinx/tutorials/step01/Tutorial.rst b/src/docs/sphinx/tutorials/step01/Tutorial.rst index cd3c85fcd7a..8c9b5697689 100644 --- a/src/docs/sphinx/tutorials/step01/Tutorial.rst +++ b/src/docs/sphinx/tutorials/step01/Tutorial.rst @@ -202,7 +202,7 @@ Keeping things simple, our element collection has only one type of element: a `` A mesh can contain several geometrical types of elements. For numerical convenience, elements are aggregated by types into ``cellBlocks``. -Here, we only linear 8-node brick elements, so the entire domain is one object called ``cellBlock``. +Here, we only have linear 8-node brick elements, so the entire domain is one object called ``cellBlock``. **xCoords, yCoords, zCoords, nx, ny, nz** @@ -311,7 +311,9 @@ to regions of elements. Here, we use only one **CellElementRegion** to represent the entire domain (user name: ``mainRegion``). It contains all the blocks called ``cellBlock`` defined in the mesh section. We specify the materials contained in that region using a ``materialList``. -Several materials coexist in ``cellBlock``, and we list them using their user-defined names: ``water``, ``rockPorosity``, and ``rockPerm``, etc. What these names mean, and the physical properties that they are attached to are defined next. +Several materials coexist in ``cellBlock``, and we list them using their user-defined names: +``water`` and ``rock`` in this exemple. +Each material is a definition of physical properties. .. literalinclude:: ../../../../../inputFiles/singlePhaseFlow/3D_10x10x10_compressible_base.xml diff --git a/src/docs/sphinx/tutorials/step02/Tutorial.rst b/src/docs/sphinx/tutorials/step02/Tutorial.rst index 06b51144eb7..2682d28d786 100644 --- a/src/docs/sphinx/tutorials/step02/Tutorial.rst +++ b/src/docs/sphinx/tutorials/step02/Tutorial.rst @@ -157,12 +157,11 @@ Here is the ``vtk`` file : GEOS can run different physical solvers on different regions of the mesh at different times. Here, to keep things simple, we run one solver (single-phase flow) on the entire domain throughout the simulation. -Even this is trivial, we need to define and name a region encompassing the entire domain -and assign it to the single-phase flow solver. -We also need to provide material properties to the regions. -This is done by specifying ``ElementRegions``. -Here, the entire field is one region called ``Domain``, -and contains multiple constitutive models, including ``water``, ``rockPorosity``, and ``rockPerm``. +To do so, we need to define a region encompassing the entire domain. +We will name it ``Domain``, as refered to in the single-phase flow solver (in its ``targetRegions``), +and list its constitutive models in the ``materialList``, which are ``water`` and ``rock``. +Since we have imported a mesh with only one region, we can set ``cellBlocks`` to ``{ * }`` +(we have could also set ``cellBlocks`` to ``{ hexahedra }`` as the mesh has only hexahedral cells). .. literalinclude:: ../../../../../inputFiles/singlePhaseFlow/vtk/3D_10x10x10_compressible_hex_gravity_base.xml @@ -171,6 +170,11 @@ and contains multiple constitutive models, including ``water``, ``rockPorosity`` :end-before: +.. note:: + If you use a name that is not ``hexahedra`` or ``all`` for this attribute, or if the mesh is + changed and have not-hexahedral cells, GEOS will throw an error at the beginning of the + simulation. See :ref:`Meshes` for more information. + Running GEOS ---------------------------------------- @@ -326,7 +330,9 @@ And the ``vtk`` file starts as follows (notice the tetrahedral point coordinates :caption: cube_10x10x10_tet.vtk :lines: 1-20 -Again, the entire field is one region called ``Domain`` and contains ``water`` and ``rock`` only. +Again, the entire field is one region called ``Domain`` which contains ``water`` and ``rock``. +Since we have imported a mesh with only one region, we can again set ``cellBlocks`` to ``{ * }`` +(we have could also set ``cellBlocks`` to ``{ tetrahedra }`` as the mesh has only tetrahedric cells). .. literalinclude:: ../../../../../inputFiles/singlePhaseFlow/vtk/3D_10x10x10_compressible_tetra_gravity_base.xml :language: xml diff --git a/src/docs/sphinx/tutorials/step03/Tutorial.rst b/src/docs/sphinx/tutorials/step03/Tutorial.rst index 6d760c3d033..c9aa49fce57 100644 --- a/src/docs/sphinx/tutorials/step03/Tutorial.rst +++ b/src/docs/sphinx/tutorials/step03/Tutorial.rst @@ -38,9 +38,9 @@ We consider the following mesh as a numerical support to the simulations in this This mesh contains three continuous regions: - - a Top region (overburden, elementary tag = `Overburden`) - - a Middle region (reservoir layer, elementary tag = `Reservoir`) - - a Bottom region (underburden, elementary tag = `Underburden`) + - a Bottom region (underburden, elementary tag = `Underburden`, attribute = ``1``) + - a Middle region (reservoir layer, elementary tag = `Reservoir`, attribute = ``2``) + - a Top region (overburden, elementary tag = `Overburden`, attribute = ``3``) .. image:: reservoir_transparent.png :width: 600px @@ -169,31 +169,17 @@ Regions Assuming that the overburden and the underburden are impermeable, and flow only takes place in the reservoir, we need to define regions. -There are two methods to achieve this regional solve. +We need to define all the ``CellElementRegions`` according to the ``attribute`` values of the VTK file +(which are respectively ``1``, ``2`` and ``3`` for each region). As mentioned above, the solvers is only +applied on the reservoir layer, (on region ``2``). In this case, the **ElementRegions** tag is : -- The first solution is to define a unique ``CellElementRegion`` corresponding to the reservoir. - - .. code-block:: xml - - - - - -- The second solution is to define all the ``CellElementRegions`` as they are in the VTK file, but defining the solvers only on the reservoir layer. In this case, the **ElementRegions** tag is : - - .. literalinclude:: ../../../../../inputFiles/singlePhaseFlow/FieldCaseTutorial3_base.xml - :language: xml - :start-after: - :end-before: - -We opt for the latest as it allows to visualize over- and underburdens and to change regions handling in their tag without needing to amend the **ElementRegion** tag. +.. literalinclude:: ../../../../../inputFiles/singlePhaseFlow/FieldCaseTutorial3_base.xml + :language: xml + :start-after: + :end-before: .. note:: - The material list here was set for a single-phase flow problem. This list is subject - to change if the problem is not a single-phase flow problem. + This material list here is subject to change if the problem is not a single-phase flow problem. .. _Constitutive_tag_field_case: diff --git a/src/pygeosx/pyssle.xml b/src/pygeosx/pyssle.xml index 99361955283..82024bb7dc6 100644 --- a/src/pygeosx/pyssle.xml +++ b/src/pygeosx/pyssle.xml @@ -49,7 +49,7 @@ diff --git a/src/pygeosx/unitTests/dataRepositoryTests/pygeosx_only.xml b/src/pygeosx/unitTests/dataRepositoryTests/pygeosx_only.xml index 7625dfd3831..085db97cd7d 100644 --- a/src/pygeosx/unitTests/dataRepositoryTests/pygeosx_only.xml +++ b/src/pygeosx/unitTests/dataRepositoryTests/pygeosx_only.xml @@ -30,7 +30,7 @@