diff --git a/.integrated_tests.yaml b/.integrated_tests.yaml index 2cb02daa192..4a2fb30e078 100644 --- a/.integrated_tests.yaml +++ b/.integrated_tests.yaml @@ -1,6 +1,7 @@ baselines: bucket: geosx - baseline: integratedTests/baseline_integratedTests-pr3228-9676-61994fe + baseline: integratedTests/baseline_integratedTests-pr3310-9785-f7b5045 + allow_fail: all: '' streak: '' diff --git a/BASELINE_NOTES.md b/BASELINE_NOTES.md index ea19f4ac5cd..a0d394fb609 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 #3310 (2024-01-21) + +Scalable rock toughness required new field. + PR #3228 (2024-01-15) ===================== deltaVolume added in multiphase. diff --git a/examples/pygeosxExamples/modifyBoundaryCondition/pkn_example.xml b/examples/pygeosxExamples/modifyBoundaryCondition/pkn_example.xml index 94db4f07eb6..23aed51fc40 100644 --- a/examples/pygeosxExamples/modifyBoundaryCondition/pkn_example.xml +++ b/examples/pygeosxExamples/modifyBoundaryCondition/pkn_example.xml @@ -62,7 +62,7 @@ diff --git a/inputFiles/hydraulicFracturing/Sneddon_hydroFrac_base.xml b/inputFiles/hydraulicFracturing/Sneddon_hydroFrac_base.xml index df05297ad3d..e23f6d8b315 100644 --- a/inputFiles/hydraulicFracturing/Sneddon_hydroFrac_base.xml +++ b/inputFiles/hydraulicFracturing/Sneddon_hydroFrac_base.xml @@ -37,7 +37,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="10.0e6" + initialRockToughness="10.0e6" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/heterogeneousInSitu_base.xml b/inputFiles/hydraulicFracturing/heterogeneousInSitu_base.xml index c8d741170ae..d4547ebc54f 100644 --- a/inputFiles/hydraulicFracturing/heterogeneousInSitu_base.xml +++ b/inputFiles/hydraulicFracturing/heterogeneousInSitu_base.xml @@ -53,7 +53,7 @@ diff --git a/inputFiles/hydraulicFracturing/heterogeneousInSitu_smoke.xml b/inputFiles/hydraulicFracturing/heterogeneousInSitu_smoke.xml index eb7b96bf286..3fc20c5c95a 100644 --- a/inputFiles/hydraulicFracturing/heterogeneousInSitu_smoke.xml +++ b/inputFiles/hydraulicFracturing/heterogeneousInSitu_smoke.xml @@ -71,7 +71,7 @@ diff --git a/inputFiles/hydraulicFracturing/hydrofractureSinglePhase2d.xml b/inputFiles/hydraulicFracturing/hydrofractureSinglePhase2d.xml index 7ac70ce7a6f..9fe4afed5b4 100644 --- a/inputFiles/hydraulicFracturing/hydrofractureSinglePhase2d.xml +++ b/inputFiles/hydraulicFracturing/hydrofractureSinglePhase2d.xml @@ -34,7 +34,7 @@ + initialRockToughness="1.0e6"/> diff --git a/inputFiles/hydraulicFracturing/kgdEdgeBased_C3D6_base.xml b/inputFiles/hydraulicFracturing/kgdEdgeBased_C3D6_base.xml index cc461b52ba3..0120cd3f6dd 100644 --- a/inputFiles/hydraulicFracturing/kgdEdgeBased_C3D6_base.xml +++ b/inputFiles/hydraulicFracturing/kgdEdgeBased_C3D6_base.xml @@ -49,7 +49,7 @@ diff --git a/inputFiles/hydraulicFracturing/kgdNodeBased_C3D6_base.xml b/inputFiles/hydraulicFracturing/kgdNodeBased_C3D6_base.xml index d7fbbd5d077..f9d7ac88c37 100644 --- a/inputFiles/hydraulicFracturing/kgdNodeBased_C3D6_base.xml +++ b/inputFiles/hydraulicFracturing/kgdNodeBased_C3D6_base.xml @@ -39,7 +39,7 @@ diff --git a/inputFiles/hydraulicFracturing/kgdToughnessDominated_base.xml b/inputFiles/hydraulicFracturing/kgdToughnessDominated_base.xml index 96d400a8390..74b8003e223 100644 --- a/inputFiles/hydraulicFracturing/kgdToughnessDominated_base.xml +++ b/inputFiles/hydraulicFracturing/kgdToughnessDominated_base.xml @@ -45,7 +45,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="1e6" + initialRockToughness="1e6" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/kgdToughnessDominated_poroelastic_base.xml b/inputFiles/hydraulicFracturing/kgdToughnessDominated_poroelastic_base.xml index 8f4284dd838..ad91b77dfaf 100644 --- a/inputFiles/hydraulicFracturing/kgdToughnessDominated_poroelastic_base.xml +++ b/inputFiles/hydraulicFracturing/kgdToughnessDominated_poroelastic_base.xml @@ -38,7 +38,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="1e6" + initialRockToughness="1e6" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/kgdValidation_base.xml b/inputFiles/hydraulicFracturing/kgdValidation_base.xml index e2d16b6d247..a902e5f5fab 100644 --- a/inputFiles/hydraulicFracturing/kgdValidation_base.xml +++ b/inputFiles/hydraulicFracturing/kgdValidation_base.xml @@ -44,7 +44,7 @@ logLevel="1" targetRegions="{ Domain }" nodeBasedSIF="0" - rockToughness="1.2e6" + initialRockToughness="1.2e6" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/kgdViscosityDominated_base.xml b/inputFiles/hydraulicFracturing/kgdViscosityDominated_base.xml index e9b55058b17..5138b7c1eca 100644 --- a/inputFiles/hydraulicFracturing/kgdViscosityDominated_base.xml +++ b/inputFiles/hydraulicFracturing/kgdViscosityDominated_base.xml @@ -45,7 +45,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="1e4" + initialRockToughness="1e4" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/kgdViscosityDominated_poroelastic_base.xml b/inputFiles/hydraulicFracturing/kgdViscosityDominated_poroelastic_base.xml index 15a381c8365..32f2f25e7eb 100644 --- a/inputFiles/hydraulicFracturing/kgdViscosityDominated_poroelastic_base.xml +++ b/inputFiles/hydraulicFracturing/kgdViscosityDominated_poroelastic_base.xml @@ -38,7 +38,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="1e4" + initialRockToughness="1e4" mpiCommOrder="1" isPoroelastic="1"/> diff --git a/inputFiles/hydraulicFracturing/pennyShapedAnisotropicScaledToughness_benchmark.xml b/inputFiles/hydraulicFracturing/pennyShapedAnisotropicScaledToughness_benchmark.xml new file mode 100644 index 00000000000..6d05d924d31 --- /dev/null +++ b/inputFiles/hydraulicFracturing/pennyShapedAnisotropicScaledToughness_benchmark.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/hydraulicFracturing/pennyShapedAnisotropicToughness_base.xml b/inputFiles/hydraulicFracturing/pennyShapedAnisotropicToughness_base.xml new file mode 100644 index 00000000000..63c2c6fb575 --- /dev/null +++ b/inputFiles/hydraulicFracturing/pennyShapedAnisotropicToughness_base.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/hydraulicFracturing/pennyShapedAnisotropicToughness_benchmark.xml b/inputFiles/hydraulicFracturing/pennyShapedAnisotropicToughness_benchmark.xml new file mode 100644 index 00000000000..6affb33bc1b --- /dev/null +++ b/inputFiles/hydraulicFracturing/pennyShapedAnisotropicToughness_benchmark.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/hydraulicFracturing/pennyShapedAnisotropicToughness_smoke.xml b/inputFiles/hydraulicFracturing/pennyShapedAnisotropicToughness_smoke.xml new file mode 100644 index 00000000000..a566f9c4c42 --- /dev/null +++ b/inputFiles/hydraulicFracturing/pennyShapedAnisotropicToughness_smoke.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_benchmark.xml b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_benchmark.xml index 59abb35871a..eb9183bcf82 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_benchmark.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_benchmark.xml @@ -67,7 +67,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="3.0e6" + initialRockToughness="3.0e6" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_poroelastic_benchmark.xml b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_poroelastic_benchmark.xml index e830a52c5fd..b20f9c443af 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_poroelastic_benchmark.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_poroelastic_benchmark.xml @@ -68,7 +68,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="3.0e6" + initialRockToughness="3.0e6" mpiCommOrder="1" isPoroelastic="1"/> diff --git a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_poroelastic_smoke.xml b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_poroelastic_smoke.xml index a1c1c302b8d..8d074c2ea9e 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_poroelastic_smoke.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_poroelastic_smoke.xml @@ -44,7 +44,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="3.0e6" + initialRockToughness="3.0e6" mpiCommOrder="1" isPoroelastic="1"/> diff --git a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_smoke.xml b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_smoke.xml index f433335ab6e..acf8e93e6b7 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_smoke.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedToughnessDominated_smoke.xml @@ -43,7 +43,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="3.0e6" + initialRockToughness="3.0e6" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_benchmark.xml b/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_benchmark.xml index a8f78adf606..eef546604d1 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_benchmark.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_benchmark.xml @@ -68,7 +68,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="0.3e6" + initialRockToughness="0.3e6" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_poroelastic_benchmark.xml b/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_poroelastic_benchmark.xml index 0d1b9485772..eb476baf5fe 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_poroelastic_benchmark.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_poroelastic_benchmark.xml @@ -69,7 +69,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="0.3e6" + initialRockToughness="0.3e6" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_poroelastic_smoke.xml b/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_poroelastic_smoke.xml index b3a8341224e..5cb156cd184 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_poroelastic_smoke.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_poroelastic_smoke.xml @@ -44,7 +44,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="0.3e6" + initialRockToughness="0.3e6" mpiCommOrder="1" isPoroelastic="1"/> diff --git a/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_smoke.xml b/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_smoke.xml index 4b20bae5125..c84b65ef8f5 100644 --- a/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_smoke.xml +++ b/inputFiles/hydraulicFracturing/pennyShapedViscosityDominated_smoke.xml @@ -43,7 +43,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="0.3e6" + initialRockToughness="0.3e6" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/pknViscosityDominated_benchmark.xml b/inputFiles/hydraulicFracturing/pknViscosityDominated_benchmark.xml index 2b8dce7a719..4943e0f6d78 100644 --- a/inputFiles/hydraulicFracturing/pknViscosityDominated_benchmark.xml +++ b/inputFiles/hydraulicFracturing/pknViscosityDominated_benchmark.xml @@ -66,7 +66,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="0.1e6" + initialRockToughness="0.1e6" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/pknViscosityDominated_poroelastic_benchmark.xml b/inputFiles/hydraulicFracturing/pknViscosityDominated_poroelastic_benchmark.xml index 72b1be2f4d8..e73a06ddcc4 100644 --- a/inputFiles/hydraulicFracturing/pknViscosityDominated_poroelastic_benchmark.xml +++ b/inputFiles/hydraulicFracturing/pknViscosityDominated_poroelastic_benchmark.xml @@ -66,7 +66,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="0.1e6" + initialRockToughness="0.1e6" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/pknViscosityDominated_poroelastic_smoke.xml b/inputFiles/hydraulicFracturing/pknViscosityDominated_poroelastic_smoke.xml index 7e8e3463e18..f6e44b9bc91 100644 --- a/inputFiles/hydraulicFracturing/pknViscosityDominated_poroelastic_smoke.xml +++ b/inputFiles/hydraulicFracturing/pknViscosityDominated_poroelastic_smoke.xml @@ -44,7 +44,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="0.1e6" + initialRockToughness="0.1e6" mpiCommOrder="1" isPoroelastic="1"/> diff --git a/inputFiles/hydraulicFracturing/pknViscosityDominated_smoke.xml b/inputFiles/hydraulicFracturing/pknViscosityDominated_smoke.xml index 0545171c3bc..87e732e3f37 100644 --- a/inputFiles/hydraulicFracturing/pknViscosityDominated_smoke.xml +++ b/inputFiles/hydraulicFracturing/pknViscosityDominated_smoke.xml @@ -43,7 +43,7 @@ name="SurfaceGen" targetRegions="{ Domain }" nodeBasedSIF="1" - rockToughness="1e4" + initialRockToughness="1e4" mpiCommOrder="1"/> diff --git a/inputFiles/hydraulicFracturing/scripts/hydrofractureFigure.py b/inputFiles/hydraulicFracturing/scripts/hydrofractureFigure.py index c8cb897201d..81dde7f93f7 100644 --- a/inputFiles/hydraulicFracturing/scripts/hydrofractureFigure.py +++ b/inputFiles/hydraulicFracturing/scripts/hydrofractureFigure.py @@ -36,7 +36,7 @@ def getParametersFromXML( geosDir, xmlFilePrefix): poissonRatio = float(elasticParam.get('defaultPoissonRatio')) injectionRate = -2.0 * float(tree.find('FieldSpecifications/SourceFlux').get('scale')) / fluidDensity tree = ElementTree.parse(prefix + xmlFilePrefix + "_base.xml") - toughness = float(tree.find('Solvers/SurfaceGenerator').get('rockToughness')) + toughness = float(tree.find('Solvers/SurfaceGenerator').get('initialRockToughness')) elif xmlFilePrefix == 'pennyShapedToughnessDominated' or xmlFilePrefix == 'pennyShapedViscosityDominated': K = float(elasticParam.get('defaultBulkModulus')) @@ -45,7 +45,7 @@ def getParametersFromXML( geosDir, xmlFilePrefix): poissonRatio = youngModulus / (2.0 * G) - 1.0 injectionRate = -4.0 * float(tree.find('FieldSpecifications/SourceFlux').get('scale')) / fluidDensity tree = ElementTree.parse(prefix + xmlFilePrefix + "_benchmark.xml") - toughness = float(tree.find('Solvers/SurfaceGenerator').get('rockToughness')) + toughness = float(tree.find('Solvers/SurfaceGenerator').get('initialRockToughness')) elif xmlFilePrefix == 'pknViscosityDominated': K = float(elasticParam.get('defaultBulkModulus')) @@ -54,7 +54,7 @@ def getParametersFromXML( geosDir, xmlFilePrefix): poissonRatio = youngModulus / (2.0 * G) - 1.0 injectionRate = -4.0 * float(tree.find('FieldSpecifications/SourceFlux').get('scale')) / fluidDensity tree = ElementTree.parse(prefix + xmlFilePrefix + "_benchmark.xml") - toughness = float(tree.find('Solvers/SurfaceGenerator').get('rockToughness')) + toughness = float(tree.find('Solvers/SurfaceGenerator').get('initialRockToughness')) found_core = False for elem in param: if elem.get("name") == "core": diff --git a/inputFiles/hydraulicFracturing/walshQuarterNoChombo_benchmark.xml b/inputFiles/hydraulicFracturing/walshQuarterNoChombo_benchmark.xml index 957b63bd278..a14bdc856f1 100644 --- a/inputFiles/hydraulicFracturing/walshQuarterNoChombo_benchmark.xml +++ b/inputFiles/hydraulicFracturing/walshQuarterNoChombo_benchmark.xml @@ -79,7 +79,7 @@ fractureRegion="Fracture" targetRegions="{Domain, void}" nodeBasedSIF="1" - rockToughness="3.0e6"> + initialRockToughness="3.0e6"> diff --git a/inputFiles/hydraulicFracturing/walshQuarterNoChombo_smoke.xml b/inputFiles/hydraulicFracturing/walshQuarterNoChombo_smoke.xml index 9990dd5c291..1a9a5a0ae73 100644 --- a/inputFiles/hydraulicFracturing/walshQuarterNoChombo_smoke.xml +++ b/inputFiles/hydraulicFracturing/walshQuarterNoChombo_smoke.xml @@ -64,7 +64,7 @@ fractureRegion="Fracture" targetRegions="{Domain, void}" nodeBasedSIF="1" - rockToughness="3.0e6" + initialRockToughness="3.0e6" mpiCommOrder="1"> diff --git a/inputFiles/inducedSeismicity/SpringSliderExplicit_base.xml b/inputFiles/inducedSeismicity/SpringSliderExplicit_base.xml index a0c0381fb23..2fd1d220c6f 100644 --- a/inputFiles/inducedSeismicity/SpringSliderExplicit_base.xml +++ b/inputFiles/inducedSeismicity/SpringSliderExplicit_base.xml @@ -13,7 +13,7 @@ diff --git a/inputFiles/inducedSeismicity/SpringSlider_base.xml b/inputFiles/inducedSeismicity/SpringSlider_base.xml index 5f6aefc94ad..d520f972802 100644 --- a/inputFiles/inducedSeismicity/SpringSlider_base.xml +++ b/inputFiles/inducedSeismicity/SpringSlider_base.xml @@ -13,7 +13,7 @@ diff --git a/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke.xml b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke.xml index 8258d2cc4a3..5da14675d94 100644 --- a/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke.xml +++ b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke.xml @@ -30,7 +30,7 @@ diff --git a/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_singleFracCompression_base.xml b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_singleFracCompression_base.xml index 854136ed032..3be52a9bcdc 100644 --- a/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_singleFracCompression_base.xml +++ b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_singleFracCompression_base.xml @@ -30,7 +30,7 @@ logLevel="0" fractureRegion="Fracture" targetRegions="{ Region }" - rockToughness="1.0e6" + initialRockToughness="1.0e6" mpiCommOrder="1"/> diff --git a/inputFiles/lagrangianContactMechanics/PassingCrack_base.xml b/inputFiles/lagrangianContactMechanics/PassingCrack_base.xml index 1f38c231aa9..603fcf59ed7 100644 --- a/inputFiles/lagrangianContactMechanics/PassingCrack_base.xml +++ b/inputFiles/lagrangianContactMechanics/PassingCrack_base.xml @@ -7,7 +7,7 @@ diff --git a/inputFiles/lagrangianContactMechanics/SimpleCubes_base.xml b/inputFiles/lagrangianContactMechanics/SimpleCubes_base.xml index 32e64f498de..9ce90da1c6b 100644 --- a/inputFiles/lagrangianContactMechanics/SimpleCubes_base.xml +++ b/inputFiles/lagrangianContactMechanics/SimpleCubes_base.xml @@ -6,7 +6,7 @@ diff --git a/inputFiles/lagrangianContactMechanics/SingleFracCompression_base.xml b/inputFiles/lagrangianContactMechanics/SingleFracCompression_base.xml index d9da50caf95..c3f39da2632 100644 --- a/inputFiles/lagrangianContactMechanics/SingleFracCompression_base.xml +++ b/inputFiles/lagrangianContactMechanics/SingleFracCompression_base.xml @@ -9,7 +9,7 @@ logLevel="0" fractureRegion="Fracture" targetRegions="{ Region }" - rockToughness="1.0e6" + initialRockToughness="1.0e6" mpiCommOrder="1"/> diff --git a/inputFiles/lagrangianContactMechanics/SlippingFault_base.xml b/inputFiles/lagrangianContactMechanics/SlippingFault_base.xml index 5299794fe0f..d9f4997f3c7 100644 --- a/inputFiles/lagrangianContactMechanics/SlippingFault_base.xml +++ b/inputFiles/lagrangianContactMechanics/SlippingFault_base.xml @@ -9,7 +9,7 @@ logLevel="0" fractureRegion="Fracture" targetRegions="{ Region }" - rockToughness="1.0e6" + initialRockToughness="1.0e6" mpiCommOrder="1"/> diff --git a/inputFiles/lagrangianContactMechanics/Sneddon_benchmark.xml b/inputFiles/lagrangianContactMechanics/Sneddon_benchmark.xml index 7750053d6fa..d45bc7ded1f 100644 --- a/inputFiles/lagrangianContactMechanics/Sneddon_benchmark.xml +++ b/inputFiles/lagrangianContactMechanics/Sneddon_benchmark.xml @@ -13,7 +13,7 @@ logLevel="0" fractureRegion="Fracture" targetRegions="{ Region }" - rockToughness="1.0e6" + initialRockToughness="1.0e6" mpiCommOrder="1"/> diff --git a/inputFiles/lagrangianContactMechanics/Sneddon_smoke.xml b/inputFiles/lagrangianContactMechanics/Sneddon_smoke.xml index 5e64b204ad1..5794ed344e5 100644 --- a/inputFiles/lagrangianContactMechanics/Sneddon_smoke.xml +++ b/inputFiles/lagrangianContactMechanics/Sneddon_smoke.xml @@ -13,7 +13,7 @@ logLevel="0" fractureRegion="Fracture" targetRegions="{ Region }" - rockToughness="1.0e6" + initialRockToughness="1.0e6" mpiCommOrder="1"/> diff --git a/inputFiles/lagrangianContactMechanics/TFrac_benchmark.xml b/inputFiles/lagrangianContactMechanics/TFrac_benchmark.xml index 60f1a1f537a..5a6d6b5a8b7 100644 --- a/inputFiles/lagrangianContactMechanics/TFrac_benchmark.xml +++ b/inputFiles/lagrangianContactMechanics/TFrac_benchmark.xml @@ -13,7 +13,7 @@ logLevel="0" fractureRegion="Fracture" targetRegions="{ Region }" - rockToughness="1.0e6" + initialRockToughness="1.0e6" mpiCommOrder="1"/> diff --git a/inputFiles/lagrangianContactMechanics/TFrac_smoke.xml b/inputFiles/lagrangianContactMechanics/TFrac_smoke.xml index 5ab56b69af9..cd3543f0806 100644 --- a/inputFiles/lagrangianContactMechanics/TFrac_smoke.xml +++ b/inputFiles/lagrangianContactMechanics/TFrac_smoke.xml @@ -12,7 +12,7 @@ logLevel="0" fractureRegion="Fracture" targetRegions="{ Region }" - rockToughness="1.0e6" + initialRockToughness="1.0e6" mpiCommOrder="1"/> diff --git a/inputFiles/lagrangianContactMechanics/UnstructuredCrack_base.xml b/inputFiles/lagrangianContactMechanics/UnstructuredCrack_base.xml index 628fd884589..81cddb50913 100644 --- a/inputFiles/lagrangianContactMechanics/UnstructuredCrack_base.xml +++ b/inputFiles/lagrangianContactMechanics/UnstructuredCrack_base.xml @@ -6,7 +6,7 @@ diff --git a/inputFiles/phaseField/PhaseFieldFracture_Nucleation_base.xml b/inputFiles/phaseField/PhaseFieldFracture_Nucleation_base.xml index e339684d116..c69b54535cc 100644 --- a/inputFiles/phaseField/PhaseFieldFracture_Nucleation_base.xml +++ b/inputFiles/phaseField/PhaseFieldFracture_Nucleation_base.xml @@ -52,7 +52,7 @@ diff --git a/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml b/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml index d21f7f7fb80..d47a5af1807 100644 --- a/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml +++ b/inputFiles/poromechanicsFractures/ExponentialDecayPermeability_conformingFracture_base.xml @@ -44,7 +44,7 @@ name="SurfaceGen" targetRegions="{ Domain }" fractureRegion="Fracture" - rockToughness="1e6" + initialRockToughness="1e6" mpiCommOrder="1"/> diff --git a/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_faultSlip_sequential_solvers.xml b/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_faultSlip_sequential_solvers.xml index 845f3151232..a5e47f2cc74 100755 --- a/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_faultSlip_sequential_solvers.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_faultSlip_sequential_solvers.xml @@ -53,7 +53,7 @@ name="SurfaceGen" targetRegions="{ Domain }" fractureRegion="Fracture" - rockToughness="1e6" + initialRockToughness="1e6" mpiCommOrder="1"/> diff --git a/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_faultSlip_solvers.xml b/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_faultSlip_solvers.xml index 2c8d9f8936b..73f5391756c 100755 --- a/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_faultSlip_solvers.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_faultSlip_solvers.xml @@ -45,7 +45,7 @@ name="SurfaceGen" targetRegions="{ Domain }" fractureRegion="Fracture" - rockToughness="1e6" + initialRockToughness="1e6" mpiCommOrder="1"/> diff --git a/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_openingFrac_sequential_solvers.xml b/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_openingFrac_sequential_solvers.xml index 4112be144f1..d11f90503d8 100755 --- a/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_openingFrac_sequential_solvers.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_openingFrac_sequential_solvers.xml @@ -52,7 +52,7 @@ name="SurfaceGen" targetRegions="{ Domain }" fractureRegion="Fracture" - rockToughness="1e6" + initialRockToughness="1e6" mpiCommOrder="1"/> diff --git a/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_openingFrac_solvers.xml b/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_openingFrac_solvers.xml index cc365b429c6..d2c9d1fd433 100755 --- a/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_openingFrac_solvers.xml +++ b/inputFiles/poromechanicsFractures/PoroElastic_conformingFracture_2d_openingFrac_solvers.xml @@ -44,7 +44,7 @@ name="SurfaceGen" targetRegions="{ Domain }" fractureRegion="Fracture" - rockToughness="1e6" + initialRockToughness="1e6" mpiCommOrder="1"/> diff --git a/inputFiles/proppant/FlowProppantBedTransport2d_base.xml b/inputFiles/proppant/FlowProppantBedTransport2d_base.xml index 177a83e6c00..d8bc681d588 100644 --- a/inputFiles/proppant/FlowProppantBedTransport2d_base.xml +++ b/inputFiles/proppant/FlowProppantBedTransport2d_base.xml @@ -50,7 +50,7 @@ diff --git a/inputFiles/proppant/FlowProppantTransport2d_base.xml b/inputFiles/proppant/FlowProppantTransport2d_base.xml index ab806c51cf2..8f4608a6577 100644 --- a/inputFiles/proppant/FlowProppantTransport2d_base.xml +++ b/inputFiles/proppant/FlowProppantTransport2d_base.xml @@ -53,7 +53,7 @@ diff --git a/inputFiles/proppant/ProppantGelTransport_base.xml b/inputFiles/proppant/ProppantGelTransport_base.xml index b4e7e74b4d6..425b5bdb5da 100644 --- a/inputFiles/proppant/ProppantGelTransport_base.xml +++ b/inputFiles/proppant/ProppantGelTransport_base.xml @@ -53,7 +53,7 @@ + initialRockToughness="1e6"/> diff --git a/inputFiles/proppant/ProppantSlotTest_benchmark.xml b/inputFiles/proppant/ProppantSlotTest_benchmark.xml index 4c123fc1fc6..73025434ce8 100755 --- a/inputFiles/proppant/ProppantSlotTest_benchmark.xml +++ b/inputFiles/proppant/ProppantSlotTest_benchmark.xml @@ -92,7 +92,7 @@ diff --git a/inputFiles/proppant/ProppantSlotTest_smoke.xml b/inputFiles/proppant/ProppantSlotTest_smoke.xml index 0576291d3b3..757e67d5f0d 100755 --- a/inputFiles/proppant/ProppantSlotTest_smoke.xml +++ b/inputFiles/proppant/ProppantSlotTest_smoke.xml @@ -102,7 +102,7 @@ diff --git a/inputFiles/singlePhaseFlowFractures/fractureFlowWithGravity_conforming_2d_smoke.xml b/inputFiles/singlePhaseFlowFractures/fractureFlowWithGravity_conforming_2d_smoke.xml index 9dbce69a6a6..9045289c402 100644 --- a/inputFiles/singlePhaseFlowFractures/fractureFlowWithGravity_conforming_2d_smoke.xml +++ b/inputFiles/singlePhaseFlowFractures/fractureFlowWithGravity_conforming_2d_smoke.xml @@ -18,7 +18,7 @@ diff --git a/inputFiles/singlePhaseFlowFractures/fractureFlow_conforming_2d.xml b/inputFiles/singlePhaseFlowFractures/fractureFlow_conforming_2d.xml index 3e5ebf1c94f..93eba8a2ebd 100644 --- a/inputFiles/singlePhaseFlowFractures/fractureFlow_conforming_2d.xml +++ b/inputFiles/singlePhaseFlowFractures/fractureFlow_conforming_2d.xml @@ -17,7 +17,7 @@ diff --git a/inputFiles/singlePhaseFlowFractures/fractureJunctionFlow_conforming_2d.xml b/inputFiles/singlePhaseFlowFractures/fractureJunctionFlow_conforming_2d.xml index e1902e65f51..a85f2e3b715 100644 --- a/inputFiles/singlePhaseFlowFractures/fractureJunctionFlow_conforming_2d.xml +++ b/inputFiles/singlePhaseFlowFractures/fractureJunctionFlow_conforming_2d.xml @@ -17,7 +17,7 @@ diff --git a/inputFiles/singlePhaseFlowFractures/fractureMatrixFlowWithGravity_conforming_2d_smoke.xml b/inputFiles/singlePhaseFlowFractures/fractureMatrixFlowWithGravity_conforming_2d_smoke.xml index 8f7226b2f85..2250f3b5fe5 100644 --- a/inputFiles/singlePhaseFlowFractures/fractureMatrixFlowWithGravity_conforming_2d_smoke.xml +++ b/inputFiles/singlePhaseFlowFractures/fractureMatrixFlowWithGravity_conforming_2d_smoke.xml @@ -18,7 +18,7 @@ diff --git a/inputFiles/singlePhaseFlowFractures/fractureMatrixFlow_conforming_2d.xml b/inputFiles/singlePhaseFlowFractures/fractureMatrixFlow_conforming_2d.xml index 6d9f7f2692e..7f475b928ab 100644 --- a/inputFiles/singlePhaseFlowFractures/fractureMatrixFlow_conforming_2d.xml +++ b/inputFiles/singlePhaseFlowFractures/fractureMatrixFlow_conforming_2d.xml @@ -18,7 +18,7 @@ diff --git a/inputFiles/singlePhaseFlowFractures/impermeableFault_conforming_base.xml b/inputFiles/singlePhaseFlowFractures/impermeableFault_conforming_base.xml index c05815fe353..13ed96f0b8c 100644 --- a/inputFiles/singlePhaseFlowFractures/impermeableFault_conforming_base.xml +++ b/inputFiles/singlePhaseFlowFractures/impermeableFault_conforming_base.xml @@ -18,7 +18,7 @@ diff --git a/inputFiles/surfaceGeneration/DryFrac_StaticPenny_PrismElem.xml b/inputFiles/surfaceGeneration/DryFrac_StaticPenny_PrismElem.xml index f398d7beb79..ada8953f37b 100644 --- a/inputFiles/surfaceGeneration/DryFrac_StaticPenny_PrismElem.xml +++ b/inputFiles/surfaceGeneration/DryFrac_StaticPenny_PrismElem.xml @@ -20,7 +20,7 @@ @@ -190,5 +190,5 @@ name="restartOutput"/> - + diff --git a/inputFiles/surfaceGeneration/cube_8.xml b/inputFiles/surfaceGeneration/cube_8.xml index 2f002bb34b9..b5920ca47fa 100644 --- a/inputFiles/surfaceGeneration/cube_8.xml +++ b/inputFiles/surfaceGeneration/cube_8.xml @@ -21,7 +21,7 @@ name="SurfaceGen" logLevel="1" targetRegions="{ Region2 }" - rockToughness="1e60" + initialRockToughness="1e60" mpiCommOrder="1" /> @@ -231,5 +231,5 @@ name="restartOutput"/> - + diff --git a/inputFiles/thermalSinglePhaseFlowFractures/fractureMatrixThermalFlow_conforming_base.xml b/inputFiles/thermalSinglePhaseFlowFractures/fractureMatrixThermalFlow_conforming_base.xml index 57cfd350256..9c903ebf0e4 100644 --- a/inputFiles/thermalSinglePhaseFlowFractures/fractureMatrixThermalFlow_conforming_base.xml +++ b/inputFiles/thermalSinglePhaseFlowFractures/fractureMatrixThermalFlow_conforming_base.xml @@ -25,7 +25,7 @@ diff --git a/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_conforming_base.xml b/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_conforming_base.xml index e32a27879d0..69ebbdcaaba 100644 --- a/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_conforming_base.xml +++ b/inputFiles/thermoPoromechanicsFractures/ThermoPoroElastic_conforming_base.xml @@ -47,7 +47,7 @@ name="SurfaceGenerator" targetRegions="{ RockMatrix }" fractureRegion="Fracture" - rockToughness="1e6" + initialRockToughness="1e6" mpiCommOrder="1"/> diff --git a/inputFiles/wellbore/CasedElasticWellbore_ImperfectInterfaces_base.xml b/inputFiles/wellbore/CasedElasticWellbore_ImperfectInterfaces_base.xml index 0f782918ec9..fb52fd5f479 100644 --- a/inputFiles/wellbore/CasedElasticWellbore_ImperfectInterfaces_base.xml +++ b/inputFiles/wellbore/CasedElasticWellbore_ImperfectInterfaces_base.xml @@ -22,7 +22,7 @@ name="SurfaceGen" fractureRegion="Fracture" targetRegions="{ casing, cement, rock }" - rockToughness="1.0e6" + initialRockToughness="1.0e6" mpiCommOrder="1"/> diff --git a/inputFiles/wellbore/CasedThermoElasticWellbore_ImperfectInterfaces_base.xml b/inputFiles/wellbore/CasedThermoElasticWellbore_ImperfectInterfaces_base.xml index ae8b6baea35..ab4ccf65952 100644 --- a/inputFiles/wellbore/CasedThermoElasticWellbore_ImperfectInterfaces_base.xml +++ b/inputFiles/wellbore/CasedThermoElasticWellbore_ImperfectInterfaces_base.xml @@ -53,7 +53,7 @@ name="SurfaceGen" fractureRegion="Fracture" targetRegions="{ casing, cement, rock }" - rockToughness="1.0e6" + initialRockToughness="1.0e6" mpiCommOrder="1"/> diff --git a/src/coreComponents/physicsSolvers/surfaceGeneration/SurfaceGenerator.cpp b/src/coreComponents/physicsSolvers/surfaceGeneration/SurfaceGenerator.cpp index 2e16f5bfeea..aaf9430df2b 100644 --- a/src/coreComponents/physicsSolvers/surfaceGeneration/SurfaceGenerator.cpp +++ b/src/coreComponents/physicsSolvers/surfaceGeneration/SurfaceGenerator.cpp @@ -180,15 +180,27 @@ SurfaceGenerator::SurfaceGenerator( const string & name, // m_maxTurnAngle(91.0), m_nodeBasedSIF( 1 ), m_isPoroelastic( 0 ), - m_rockToughness( 1.0e99 ), + m_initialRockToughness( 1.0e99 ), + m_toughnessScalingFactor( 0.0 ), + m_fractureOrigin( { 0.0, 0.0, 0.0 } ), m_mpiCommOrder( 0 ) { this->registerWrapper( viewKeyStruct::failCriterionString(), &this->m_failCriterion ); - registerWrapper( viewKeyStruct::rockToughnessString(), &m_rockToughness ). + registerWrapper( viewKeyStruct::initialRockToughnessString(), &m_initialRockToughness ). setInputFlag( InputFlags::REQUIRED ). - setDescription( "Rock toughness of the solid material" ); + setDescription( "Initial rock toughness of the solid material" ); + + registerWrapper( viewKeyStruct::toughnessScalingFactorString(), &m_toughnessScalingFactor ). + setApplyDefaultValue( 0.0 ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "Scaling factor for the rock toughness of the solid material" ); + + registerWrapper( viewKeyStruct::fractureOriginString(), &m_fractureOrigin ). + setDefaultValue( m_fractureOrigin ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "Coordinate of fracture origin" ); registerWrapper( viewKeyStruct::nodeBasedSIFString(), &m_nodeBasedSIF ). setInputFlag( InputFlags::OPTIONAL ). @@ -372,17 +384,18 @@ void SurfaceGenerator::initializePostInitialConditionsPreSubGroups() FaceManager & faceManager = meshLevel.getFaceManager(); ElementRegionManager & elementManager = meshLevel.getElemManager(); arrayView2d< real64 const > const & faceNormals = faceManager.faceNormal(); + arrayView2d< real64 const > const & faceCenters = faceManager.faceCenter(); //TODO: roughness to KIC should be made a material constitutive relationship. arrayView2d< real64 > const & KIC = faceManager.getField< surfaceGeneration::K_IC >(); for( localIndex kf=0; kf= 0 ) + if( m_initialRockToughness >= 0 ) { - KIC[kf][0] = m_rockToughness; - KIC[kf][1] = m_rockToughness; - KIC[kf][2] = m_rockToughness; + KIC[kf][0] = m_initialRockToughness; + KIC[kf][1] = m_initialRockToughness; + KIC[kf][2] = m_initialRockToughness; } else { @@ -390,6 +403,10 @@ void SurfaceGenerator::initializePostInitialConditionsPreSubGroups() arrayView2d< localIndex const > const & faceToSubRegionMap = faceManager.elementSubRegionList(); arrayView2d< localIndex const > const & faceToElementMap = faceManager.elementList(); + KIC[kf][0] = 1e99; + KIC[kf][1] = 1e99; + KIC[kf][2] = 1e99; + for( localIndex k=0; k 0.0 ) + { + real64 faceCenter[3]; + faceCenter[0] = faceCenters[kf][0]; + faceCenter[1] = faceCenters[kf][1]; + faceCenter[2] = faceCenters[kf][2]; + + for( localIndex dim=0; dim<3; ++dim ) + { + real64 const initialRockToughness = KIC[kf][dim]; + + real64 const scaledToughness = scalingToughness( m_fractureOrigin, + faceCenter, + initialRockToughness, + m_toughnessScalingFactor ); + + KIC[kf][dim] = scaledToughness; + } + } } } ); } @@ -558,7 +594,6 @@ real64 SurfaceGenerator::solverStep( real64 const & time_n, PermeabilityBase & permModel = getConstitutiveModel< PermeabilityBase >( fractureSubRegion, permModelName ); permModel.initializeState(); } - } ); return rval; @@ -4562,6 +4597,20 @@ SurfaceGenerator::calculateRuptureRate( SurfaceElementRegion & faceElementRegion return globalMaxRuptureRate; } +real64 SurfaceGenerator::scalingToughness( R1Tensor const fractureOrigin, + real64 const (&faceCenter)[3], + real64 const initialRockToughness, + real64 const toughnessScalingFactor ) +{ + real64 const distance = sqrt( (fractureOrigin[0] - faceCenter[0])*(fractureOrigin[0] - faceCenter[0]) + + (fractureOrigin[1] - faceCenter[1])*(fractureOrigin[1] - faceCenter[1]) + + (fractureOrigin[2] - faceCenter[2])*(fractureOrigin[2] - faceCenter[2]) ); + + real64 scaledToughness = initialRockToughness*( 1 + toughnessScalingFactor*sqrt( distance ) ); + + return scaledToughness; +} + REGISTER_CATALOG_ENTRY( PhysicsSolverBase, diff --git a/src/coreComponents/physicsSolvers/surfaceGeneration/SurfaceGenerator.hpp b/src/coreComponents/physicsSolvers/surfaceGeneration/SurfaceGenerator.hpp index 4e435f9b566..084b63c5fe6 100644 --- a/src/coreComponents/physicsSolvers/surfaceGeneration/SurfaceGenerator.hpp +++ b/src/coreComponents/physicsSolvers/surfaceGeneration/SurfaceGenerator.hpp @@ -503,6 +503,11 @@ class SurfaceGenerator : public PhysicsSolverBase real64 calculateRuptureRate( SurfaceElementRegion & faceElementRegion ); + real64 scalingToughness( R1Tensor const fractureOrigin, + real64 const (&faceCenter)[3], + real64 const initialRockToughness, + real64 const toughnessScalingFactor ); + /** * @struct viewKeyStruct holds char strings and viewKeys for fast lookup */ @@ -521,7 +526,10 @@ class SurfaceGenerator : public PhysicsSolverBase //TODO: rock toughness should be a material parameter, and we need to make rock toughness to KIC a constitutive // relation. - constexpr static char const * rockToughnessString() { return "rockToughness"; } + constexpr static char const * initialRockToughnessString() { return "initialRockToughness"; } + constexpr static char const * toughnessScalingFactorString() { return "toughnessScalingFactor"; } + //TODO: fracture origin can be obtained from the initial fracture geometry + constexpr static char const * fractureOriginString() { return "fractureOrigin"; } // //TODO: Once the node-based SIF criterion becomes mature and robust, remove the edge-based criterion. constexpr static char const * nodeBasedSIFString() { return "nodeBasedSIF"; } @@ -541,7 +549,11 @@ class SurfaceGenerator : public PhysicsSolverBase int m_isPoroelastic; - real64 m_rockToughness; + real64 m_initialRockToughness; + + real64 m_toughnessScalingFactor; + + R1Tensor m_fractureOrigin; // Flag for consistent communication ordering int m_mpiCommOrder; diff --git a/src/coreComponents/schema/schema.xsd b/src/coreComponents/schema/schema.xsd index b1d8b4b5541..38d29f7070e 100644 --- a/src/coreComponents/schema/schema.xsd +++ b/src/coreComponents/schema/schema.xsd @@ -4634,10 +4634,14 @@ Level 0 outputs no specific information for this solver. Higher levels require m + + + + - - + +