Skip to content

Commit

Permalink
Viscoelastic wave propagator (#3080)
Browse files Browse the repository at this point in the history
* first version of viscoelastic propagator. Anelasticity coefficient are not automatically calculated.

* removed unused variables

* added default computation of anelasticity parameter and check on Q vs. y values

* added unit test and integrated test. Also added the forgotten DAS integrated test to the ats config file

* corrected bug in input string

* bugfix

* uncrustify + unused var

* split unit test for code coverage

* getting aroung compilation error in debug mode

* typo

* change after merge

* leftover modifications from merge

* switched VTI and isotropic

* removed plot of memory variables

* Forgotten commas in Elastic ATS file

* Update .integrated_tests.yaml

* Update BASELINE_NOTES.md

* Revert .integrated_tests.yaml to investigate why some (unrelated) integratedTests are failing

* Update .integrated_tests.yaml

---------

Co-authored-by: acitrain <[email protected]>
Co-authored-by: Matteo Cusini <[email protected]>
  • Loading branch information
3 people authored Jun 11, 2024
1 parent 7a18ecf commit 010fc34
Show file tree
Hide file tree
Showing 15 changed files with 899 additions and 44 deletions.
2 changes: 1 addition & 1 deletion .integrated_tests.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
baselines:
bucket: geosx
baseline: integratedTests/baseline_integratedTests-pr3075-5458-8cde9da
baseline: integratedTests/baseline_integratedTests-pr3080-5511-8210a1a

allow_fail:
all: ''
Expand Down
4 changes: 4 additions & 0 deletions BASELINE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 #3080 (2024-06-07)
=====================
Rebaseline after adding viscoelastic wave propagator.

PR #3075 (2024-06-05)
=====================
Introduce configuration tolerance. Rebaseline because of the new parameter in NonlinearSolverParameters.
Expand Down
16 changes: 16 additions & 0 deletions inputFiles/wavePropagation/ElasticSEM.ats
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,22 @@ decks = [
partitions=((1, 1, 1), (2, 2, 2)),
restart_step=100,
check_step=200,
restartcheck_params=RestartcheckParameters(**restartcheck_params)),
TestDeck(
name="elas3D_att_smoke",
description=
'Elastic wave solver, first-order FE, with SLS attenuation mechanism',
partitions=((1, 1, 1), (2, 2, 2)),
restart_step=100,
check_step=200,
restartcheck_params=RestartcheckParameters(**restartcheck_params)),
TestDeck(
name="elas3D_DAS_smoke",
description=
'Elastic wave solver, first-order FE, DAS signal',
partitions=((1, 1, 1), (2, 2, 2)),
restart_step=100,
check_step=200,
restartcheck_params=RestartcheckParameters(**restartcheck_params))
]

Expand Down
185 changes: 185 additions & 0 deletions inputFiles/wavePropagation/elas3D_att_smoke.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
<?xml version="1.0" ?>

<Problem>
<Solvers>
<!-- define the solver -->
<!-- define the source coordinates -->
<!-- define the time source frequency -->
<!-- define the receiver coordinates -->
<!-- define the DAS channel geometry -->
<ElasticSEM
name="elasticSolver"
logLevel="1"
cflFactor="0.25"
discretization="FE1"
targetRegions="{ Region }"
sourceCoordinates="{ { 45, 45, 45 } }"
timeSourceFrequency="10.0"
rickerOrder="2"
outputSeismoTrace="1"
dtSeismoTrace="0.001"
receiverCoordinates="{ { 55, 55, 55 } }"
attenuationType="sls"
slsReferenceAngularFrequencies="{ 69.6283, 592.177 }"
slsAnelasticityCoefficients="{ 1.63675, 1.75133 }" />
</Solvers>

<!-- hexahedral mesh generated internally by GEOSX -->
<Mesh>
<InternalMesh
name="mesh"
elementTypes="{ C3D8 }"
xCoords="{ 0, 20, 80, 100 }"
yCoords="{ 0, 20, 80, 100 }"
zCoords="{ 0, 20, 80, 100 }"
nx="{ 1, 3, 1 }"
ny="{ 1, 3, 1 }"
nz="{ 1, 3, 1 }"
cellBlockNames="{ cb }"/>
</Mesh>

<Events
maxTime="0.2">
<!-- control the timestepping here with forceDt -->
<PeriodicEvent
name="solverApplications"
forceDt="0.001"
target="/Solvers/elasticSolver"/>

<!-- generate an output that can be read from VTK -->
<PeriodicEvent
name="vtk"
timeFrequency="0.1"
targetExactTimestep="0"
target="/Outputs/vtkOutput"/>

<!-- restart event -->
<PeriodicEvent
name="restarts"
timeFrequency="0.1"
targetExactTimestep="1"
target="/Outputs/restartOutput"/>

</Events>

<NumericalMethods>
<FiniteElements>
<FiniteElementSpace
name="FE1"
order="1"
formulation="SEM"/>
</FiniteElements>
</NumericalMethods>

<ElementRegions>
<CellElementRegion
name="Region"
cellBlocks="{ cb }"
materialList="{ nullModel }"/>
</ElementRegions>

<Constitutive>
<NullModel
name="nullModel"/>
</Constitutive>

<FieldSpecifications>

<!-- The initial displacement field -->
<FieldSpecification
name="initialdisplacementx"
initialCondition="1"
setNames="{ all }"
objectPath="nodeManager"
fieldName="displacementx_n"
scale="0.0"/>
<FieldSpecification
name="initialdisplacementy"
initialCondition="1"
setNames="{ all }"
objectPath="nodeManager"
fieldName="displacementy_n"
scale="0.0"/>
<FieldSpecification
name="initialdisplacementz"
initialCondition="1"
setNames="{ all }"
objectPath="nodeManager"
fieldName="displacementz_n"
scale="0.0"/>

<FieldSpecification
name="initialdisplacementxnm1"
initialCondition="1"
setNames="{ all }"
objectPath="nodeManager"
fieldName="displacementx_nm1"
scale="0.0"/>
<FieldSpecification
name="initialdisplacementynm1"
initialCondition="1"
setNames="{ all }"
objectPath="nodeManager"
fieldName="displacementy_nm1"
scale="0.0"/>
<FieldSpecification
name="initialdisplacementznm1"
initialCondition="1"
setNames="{ all }"
objectPath="nodeManager"
fieldName="displacementz_nm1"
scale="0.0"/>

<!-- The elastic model (Vp, Vs, density) -->
<FieldSpecification
name="cellVelocityVp"
initialCondition="1"
objectPath="ElementRegions/Region/cb"
fieldName="elasticVelocityVp"
scale="4000"
setNames="{ all }"/>

<FieldSpecification
name="cellVelocityVs"
initialCondition="1"
objectPath="ElementRegions/Region/cb"
fieldName="elasticVelocityVs"
scale="2000"
setNames="{ all }"/>

<FieldSpecification
name="cellDensity"
initialCondition="1"
objectPath="ElementRegions/Region/cb"
fieldName="elasticDensity"
scale="2000"
setNames="{ all }"/>
<FieldSpecification
name="cellQp"
initialCondition="1"
objectPath="ElementRegions/Region/cb"
fieldName="elasticQualityFactorP"
scale="30"
setNames="{ all }"/>

<FieldSpecification
name="cellQs"
initialCondition="1"
objectPath="ElementRegions/Region/cb"
fieldName="elasticQualityFactorS"
scale="30"
setNames="{ all }"/>

</FieldSpecifications>

<Outputs>
<VTK
name="vtkOutput"
levelNames="{ FE1 }"
plotLevel="3"/>
<Restart
name="restartOutput"/>
</Outputs>


</Problem>
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ namespace geos
{
using namespace fields;
/// Namespace to contain the elastic wave kernels.
namespace ElasticVTIWaveEquationSEMKernels
namespace elasticVTIWaveEquationSEMKernels
{

/**
Expand Down Expand Up @@ -286,7 +286,7 @@ class ExplicitElasticVTISEM : public finiteElement::KernelBase< SUBREGION_TYPE,
using ExplicitElasticVTISEMFactory = finiteElement::KernelFactory< ExplicitElasticVTISEM,
real64 >;

} // namespace ElasticVTIWaveEquationSEMKernels
} // namespace elasticVTIWaveEquationSEMKernels

} // namespace geos

Expand Down
Loading

0 comments on commit 010fc34

Please sign in to comment.