From 73738605d75401ceea05eb662ae21598acdb5ee8 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Fri, 11 Jun 2021 16:55:01 +0200 Subject: [PATCH 01/13] rename filename to be more specific --- include/easi/component/{Special.h => STRESS_STR_DIP_SLIP_AM.h} | 0 include/easi/parser/YAMLComponentParsers.h | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename include/easi/component/{Special.h => STRESS_STR_DIP_SLIP_AM.h} (100%) diff --git a/include/easi/component/Special.h b/include/easi/component/STRESS_STR_DIP_SLIP_AM.h similarity index 100% rename from include/easi/component/Special.h rename to include/easi/component/STRESS_STR_DIP_SLIP_AM.h diff --git a/include/easi/parser/YAMLComponentParsers.h b/include/easi/parser/YAMLComponentParsers.h index 2b79fee..329e47b 100644 --- a/include/easi/parser/YAMLComponentParsers.h +++ b/include/easi/parser/YAMLComponentParsers.h @@ -52,7 +52,7 @@ #include "easi/component/EvalModel.h" #include "easi/component/LayeredModelBuilder.h" #include "easi/component/SpecialMap.h" -#include "easi/component/Special.h" +#include "easi/component/STRESS_STR_DIP_SLIP_AM.h" #include "easi/component/OptimalStress.h" #include "easi/component/AndersonianStress.h" From f562f66367c0ea5b52d01b4861c5c5af9b16a33a Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Fri, 11 Jun 2021 18:19:52 +0200 Subject: [PATCH 02/13] precise Stress component doc new parameter in OptimalStress --- doc/maps.rst | 150 +++++++++++++++++-------- include/easi/component/OptimalStress.h | 20 +++- 2 files changed, 117 insertions(+), 53 deletions(-) diff --git a/doc/maps.rst b/doc/maps.rst index 381d898..34f8a47 100644 --- a/doc/maps.rst +++ b/doc/maps.rst @@ -209,17 +209,19 @@ Provides values by evaluating another easi tree. OptimalStress ------------- -This function allows computing the stress which would result in faulting -in the rake direction on the optimally oriented plane defined by strike -and dip angles (this can be only a virtual plane if such optimal -orientation does not correspond to any segment of the fault system). The -principal stress magnitudes are prescribed by the relative prestress -ratio R (where :math:`R=1/(1+S)`), the effective confining stress -(effectiveConfiningStress :math:`= Tr(sii)/3`) and the stress shape ratio -:math:`s2ratio = (s_2-s_3)/(s_1-s_3)`, where :math:`s_1>s_2>s_3` are the principal stress -magnitudes, following the procedure described in Ulrich et al. -(2019), methods section 'Initial Stress'. To prescribe R, static and dynamic friction -(mu\_s and mu\_d) as well as cohesion are required. +This component generates a stress tensor which maximizes shear traction +on the optimally oriented plane defined by the strike and dip angles, along the rake angle orientation. +Such optimally oriented plane can be a virtual plane if it does not correspond to any segment of the fault system. + +The principal stress magnitudes are prescribed by: + +- the relative prestress ratio R (where :math:`R=1/(1+S)`, with S the relative fault strength), +- the stress shape ratio s2ratio :math:`= (s_2-s_3)/(s_1-s_3)`, where :math:`s_1`, :math:`s_2` and :math:`s_3` are the maximum, intermediate, and minimum compressive stress, respetively, and +- either the :math:`s_{zz}` component of the stress tensor, or the mean effective stress, effectiveConfiningStress :math:`= Tr(s_{ii})/3`. (if s_zz is set, effectiveConfiningStress should be set 0, and vice versa). + +To prescribe R, static and dynamic friction (mu\_s and mu\_d) as well as cohesion are required. +The procedure is described in Ulrich et al. (2019), methods section 'Initial Stress'. + .. code-block:: YAML @@ -234,21 +236,22 @@ magnitudes, following the procedure described in Ulrich et al. s2ratio: R: effectiveConfiningStress: + s_zz: :Domain: *inherited* :Codomain: - stress components (s\_xx, s\_yy, s\_zz, s\_xy, s\_yz, and s\_xz) + stress components (b\_xx, b\_yy, b\_zz, b\_xy, b\_yz, and b\_xz) AndersonianStress ----------------- -This function allows computing Andersonian stresses (for which one principal axis of the stress tensor is vertical). +This component allows computing Andersonian stress tensors (for which one principal axis of the stress tensor is vertical). The principal stress orientations are defined by SH_max (measured from North, positive eastwards), the direction of maximum horizontal compressive stress. S_v defines which of the principal stresses :math:`s_i` is vertical where :math:`s_1>s_2>s_3`. -S_v = 1, 2 or 3 should be used if the vertical principal stress is the maximum, intermediate or minimum compressive stress. +S_v = 1, 2, or 3 should be used when the vertical principal stress is the maximum, intermediate, or minimum compressive stress, respetively. Assuming mu_d=0.6, S_v = 1 favours normal faulting on a 60° dipping fault plane striking SH_max, S_v = 2 favours strike-slip faulting on a vertical fault plane making an angle of 30° with SH_max and S_v = 3 favours reverse faulting on a 30° dipping fault plane striking SH_max. @@ -258,8 +261,7 @@ the vertical stress sig_zz and the stress shape ratio :math:`s2ratio = (s_2-s_3)/(s_1-s_3)`, where :math:`s_1>s_2>s_3` are the principal stress magnitudes, following the procedure described in Ulrich et al. (2019), methods section 'Initial Stress'. To prescribe S, static and dynamic friction -(mu\_s and mu\_d) as well as cohesion are required. - +(mu\_s and mu\_d), as well as cohesion, are required. .. code-block:: YAML @@ -278,41 +280,9 @@ magnitudes, following the procedure described in Ulrich et al. :Domain: *inherited* :Codomain: - stress components (s\_xx, s\_yy, s\_zz, s\_xy, s\_yz, and s\_xz) - + stress components (b\_xx, b\_yy, b\_zz, b\_xy, b\_yz, and b\_xz) -STRESS\_STR\_DIP\_SLIP\_AM (deprecated) ---------------------------------------- - -This routine is now replaced by the more complete and exact -'OptimalStress' routine. It is nevertheless preserved in the code for -being able to run the exact setup we use for the Sumatra SC paper (Uphoff -et al., 2017). It is mostly similar with the 'OptimalStress' routine, -but instead of a rake parameter, the direction of slip can only be pure -strike-slip and pure dip-slip faulting (depending on the parameter -DipSlipFaulting). In this routine the s\_zz component of the stress -tensor is prescribed (and not the confining stress tr(sii)/3) as in -'OptimalStress'. - -.. code-block:: YAML - - components: !STRESS_STR_DIP_SLIP_AM - constants: - mu_d: - mu_s: - strike: - dip: - DipSlipFaulting: (0 or 1) - cohesion: - s2ratio: - -:Domain: - *inherited* -:Codomain: - stress components (s\_xx, s\_yy, s\_zz, s\_xy, s\_yz, and s\_xz) -:Example: - `120_initial_stress `__ SpecialMap ---------- @@ -376,3 +346,85 @@ Evaluates application-defined functions. The domain of !Special is now i1, i3 and the codomain is o1, o2. i2 is constant and has the value 3. + + +Deprecated components +--------------------- + + +STRESS\_STR\_DIP\_SLIP\_AM +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: YAML + + components: !STRESS_STR_DIP_SLIP_AM + constants: + mu_d: + mu_s: + strike: + dip: + DipSlipFaulting: (0 or 1) + cohesion: + s2ratio: + s_zz: + R: + s2ratio: + +:Domain: + *inherited* +:Codomain: + normalized stress components (b\_xx, b\_yy, b\_zz, b\_xy, b\_yz, and b\_xz, with b\_zz=1) +:Example: + `120_initial_stress `__ + +This component, used for example in the setup of the Sumatra SC paper +(Uphoff et al., 2017) is deprecated and can be substituted by the more complete 'OptimalStress' routine. +While in the 'OptimalStress' routine, a rake parameter defines the direction of maximized shear traction +on the optimally oriented fault, such direction is here defined by the parameter +DipSlipFaulting (1 for pure dip-slip, 0 for pure strike-slip). +Another difference with the OptimalStress component is that STRESS\_STR\_DIP\_SLIP\_AM returns a normalized stress tensor. + +The following code: + +.. code-block:: YAML + + !STRESS_STR_DIP_SLIP_AM + constants: + mu_d: a + mu_s: b + strike: c + dip: d + DipSlipFaulting: 1.0 + cohesion: e + s2ratio: f + R: g + s_zz: h + +is equivalent to: + +.. code-block:: YAML + + !EvalModel + parameters: [b_xx,b_yy,b_zz,b_xy, b_xz, b_yz] + model: !ConstantMap + map: + mu_d: a + components: !OptimalStress + constants: + mu_s: b + strike: c + dip: d + rake: 90.0 + cohesion: e + s2ratio: f + R: g + s_zz: h + effectiveConfiningStress: 0.0 + components: !FunctionMap + map: + b_xx: return -b_xx/b_zz; + b_yy: return -b_yy/b_zz; + b_zz: return 1; + b_xy: return -b_xy/b_zz; + b_xz: return -b_xz/b_zz; + b_yz: return -b_yz/b_zz; diff --git a/include/easi/component/OptimalStress.h b/include/easi/component/OptimalStress.h index 31ff547..845a77e 100644 --- a/include/easi/component/OptimalStress.h +++ b/include/easi/component/OptimalStress.h @@ -40,12 +40,13 @@ #define EASI_COMPONENT_OPTIMALSTRESS_H_ #include +#include #include "easi/util/MagicStruct.h" namespace easi { struct OptimalStress { struct in { - double mu_d, mu_s, strike, dip, rake, effectiveConfiningStress, cohesion, R, s2ratio; + double mu_d, mu_s, strike, dip, rake, effectiveConfiningStress, s_zz, cohesion, R, s2ratio; }; in i; @@ -58,7 +59,7 @@ namespace easi { }; } -SELF_AWARE_STRUCT(easi::OptimalStress::in, mu_d, mu_s, strike, dip, rake, effectiveConfiningStress, cohesion, R, s2ratio) +SELF_AWARE_STRUCT(easi::OptimalStress::in, mu_d, mu_s, strike, dip, rake, effectiveConfiningStress, s_zz, cohesion, R, s2ratio) SELF_AWARE_STRUCT(easi::OptimalStress::out, b_xx, b_yy, b_zz, b_xy, b_yz, b_xz) // COMPUTE NORMALIZED STRESS FOLLOWING THE METHOD OF Ulrich et al. (2018) @@ -72,7 +73,9 @@ void easi::OptimalStress::evaluate() { double s2 = sin(2.0*Phi); double c2 = cos(2.0*Phi); double alpha = (2.0*i.s2ratio-1.0)/3.0; - double effectiveConfiningStress = std::fabs(i.effectiveConfiningStress); + assertm(i.effectiveConfiningStress*i.s_zz==0.0, "effectiveConfiningStress and s_zz cannot be both non zero"); + // if i.s_zz non zero, we use the value as mean effective stress constrain, and we correct latter on + double effectiveConfiningStress = std::max(std::fabs(i.effectiveConfiningStress), std::fabs(i.s_zz)); double ds = (i.mu_d * effectiveConfiningStress + i.R*(i.cohesion + (i.mu_s-i.mu_d)*effectiveConfiningStress)) / (s2 + i.mu_d*(alpha + c2) + i.R*(i.mu_s-i.mu_d)*(alpha + c2)); double sm = effectiveConfiningStress - alpha*ds; @@ -99,7 +102,16 @@ void easi::OptimalStress::evaluate() { o.b_yy = -((ci * ci * s11 * sr * sr + s33 * si * si) * cd * cd + 2 * ci * sd * si * sr * (s33 - s11) * cd + (s33 * sd * sd * sr * sr + cr * cr * s22) * ci * ci + sd * sd * si * si * s11) * ss * ss - 2 * cr * cs * (cd * cd * ci * sr * s11 + sd * si * (s33 - s11) * cd - ci * sr * (-s33 * sd * sd + s22)) * ss - cs * cs * (cd * cd * cr * cr * s11 + cr * cr * s33 * sd * sd + s22 * sr * sr); o.b_yz = -cd * sd * sr * ss * (s33 - s11) * si * si - ((-ss * (-s11 * sr * sr + s33) * ci + cr * cs * sr * s11) * cd * cd + ss * ((s33 * sr * sr - s11) * sd * sd + cr * cr * s22) * ci - cr * cs * sr * (-s33 * sd * sd + s22)) * si + cd * ci * sd * (ci * sr * ss + cr * cs) * (s33 - s11); o.b_zz = -(cd * cd * s11 * sr * sr + s33 * sd * sd * sr * sr + cr * cr * s22) * si * si - 2 * cd * ci * sd * sr * (s11 - s33) * si - ci * ci * (cd * cd * s33 + s11 * sd * sd); - + + if (abs(i.s_zz)>0.0) { + double factor = -effectiveConfiningStress/b_zz; + o.b_xx = o.b_xx * factor; + o.b_yy = o.b_yy * factor; + o.b_zz = o.b_zz * factor; + o.b_xy = o.b_xy * factor; + o.b_xz = o.b_xz * factor; + o.b_yz = o.b_yz * factor; + } } #endif From 2fc5d083138faffec8a8617d67e40fe90d65bb7c Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Fri, 11 Jun 2021 23:17:54 +0200 Subject: [PATCH 03/13] fix Optimal stress and docu --- doc/maps.rst | 10 +++++----- include/easi/component/OptimalStress.h | 4 +--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/doc/maps.rst b/doc/maps.rst index 34f8a47..51d043d 100644 --- a/doc/maps.rst +++ b/doc/maps.rst @@ -422,9 +422,9 @@ is equivalent to: effectiveConfiningStress: 0.0 components: !FunctionMap map: - b_xx: return -b_xx/b_zz; - b_yy: return -b_yy/b_zz; + b_xx: return b_xx/b_zz; + b_yy: return b_yy/b_zz; b_zz: return 1; - b_xy: return -b_xy/b_zz; - b_xz: return -b_xz/b_zz; - b_yz: return -b_yz/b_zz; + b_xy: return b_xy/b_zz; + b_xz: return b_xz/b_zz; + b_yz: return b_yz/b_zz; diff --git a/include/easi/component/OptimalStress.h b/include/easi/component/OptimalStress.h index 845a77e..06de957 100644 --- a/include/easi/component/OptimalStress.h +++ b/include/easi/component/OptimalStress.h @@ -40,7 +40,6 @@ #define EASI_COMPONENT_OPTIMALSTRESS_H_ #include -#include #include "easi/util/MagicStruct.h" namespace easi { @@ -73,7 +72,6 @@ void easi::OptimalStress::evaluate() { double s2 = sin(2.0*Phi); double c2 = cos(2.0*Phi); double alpha = (2.0*i.s2ratio-1.0)/3.0; - assertm(i.effectiveConfiningStress*i.s_zz==0.0, "effectiveConfiningStress and s_zz cannot be both non zero"); // if i.s_zz non zero, we use the value as mean effective stress constrain, and we correct latter on double effectiveConfiningStress = std::max(std::fabs(i.effectiveConfiningStress), std::fabs(i.s_zz)); @@ -104,7 +102,7 @@ void easi::OptimalStress::evaluate() { o.b_zz = -(cd * cd * s11 * sr * sr + s33 * sd * sd * sr * sr + cr * cr * s22) * si * si - 2 * cd * ci * sd * sr * (s11 - s33) * si - ci * ci * (cd * cd * s33 + s11 * sd * sd); if (abs(i.s_zz)>0.0) { - double factor = -effectiveConfiningStress/b_zz; + double factor = -effectiveConfiningStress/o.b_zz; o.b_xx = o.b_xx * factor; o.b_yy = o.b_yy * factor; o.b_zz = o.b_zz * factor; From d3dfb57e591a9f97e5727c4a440d9e4504840dbe Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Mon, 5 Jul 2021 18:21:26 +0200 Subject: [PATCH 04/13] fix typo --- doc/maps.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/maps.rst b/doc/maps.rst index 51d043d..2a868a9 100644 --- a/doc/maps.rst +++ b/doc/maps.rst @@ -251,7 +251,7 @@ This component allows computing Andersonian stress tensors (for which one princi The principal stress orientations are defined by SH_max (measured from North, positive eastwards), the direction of maximum horizontal compressive stress. S_v defines which of the principal stresses :math:`s_i` is vertical where :math:`s_1>s_2>s_3`. -S_v = 1, 2, or 3 should be used when the vertical principal stress is the maximum, intermediate, or minimum compressive stress, respetively. +S_v = 1, 2, or 3 should be used when the vertical principal stress is the maximum, intermediate, or minimum compressive stress, respectively. Assuming mu_d=0.6, S_v = 1 favours normal faulting on a 60° dipping fault plane striking SH_max, S_v = 2 favours strike-slip faulting on a vertical fault plane making an angle of 30° with SH_max and S_v = 3 favours reverse faulting on a 30° dipping fault plane striking SH_max. From ccdb4dfef2aff0fb03c67e3f1132604af9a6ba62 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Thu, 15 Jul 2021 10:25:00 +0200 Subject: [PATCH 05/13] add Figure OptimalStress --- doc/figs/OptimalStress_orientation.png | Bin 0 -> 84374 bytes doc/maps.rst | 9 +++++++++ 2 files changed, 9 insertions(+) create mode 100644 doc/figs/OptimalStress_orientation.png diff --git a/doc/figs/OptimalStress_orientation.png b/doc/figs/OptimalStress_orientation.png new file mode 100644 index 0000000000000000000000000000000000000000..c41b4a16e70d6640b9f2ede0814323760b8159db GIT binary patch literal 84374 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≈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 Date: Thu, 15 Jul 2021 10:57:06 +0200 Subject: [PATCH 06/13] ENU only --- doc/maps.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/maps.rst b/doc/maps.rst index f52d1db..d1e3640 100644 --- a/doc/maps.rst +++ b/doc/maps.rst @@ -230,7 +230,7 @@ The principal stresses are oriented relatively to the strike, dip and rake angle The red plane, that contains :math:`s_1` and :math:`s_3` is normal to the optimally oriented fault plane and contains the rake vector. :math:`s_2` (not represented) is normal to the red plane. - +Note that the OptimalStress component is only valid for an ENU system. .. code-block:: YAML From 1cc96db5c4d16bf8219afafc1063c8f86da7f961 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Thu, 15 Jul 2021 14:07:54 +0200 Subject: [PATCH 07/13] add OptimalStress_Szz component --- include/easi/YAMLParser.h | 1 + include/easi/component/OptimalStress_Szz.h | 114 +++++++++++++++++++++ include/easi/parser/YAMLComponentParsers.h | 1 + 3 files changed, 116 insertions(+) create mode 100644 include/easi/component/OptimalStress_Szz.h diff --git a/include/easi/YAMLParser.h b/include/easi/YAMLParser.h index 964f424..e80be63 100644 --- a/include/easi/YAMLParser.h +++ b/include/easi/YAMLParser.h @@ -115,6 +115,7 @@ YAMLParser::YAMLParser(unsigned dimDomain, AsagiReader* externalAsagiReader, cha // Specials registerSpecial("!STRESS_STR_DIP_SLIP_AM"); registerSpecial("!OptimalStress"); + registerSpecial("!OptimalStress_Szz"); registerSpecial("!AndersonianStress"); } diff --git a/include/easi/component/OptimalStress_Szz.h b/include/easi/component/OptimalStress_Szz.h new file mode 100644 index 0000000..ed54b05 --- /dev/null +++ b/include/easi/component/OptimalStress_Szz.h @@ -0,0 +1,114 @@ +/** + * @file + * This file is part of SeisSol. + * + * @author Thomas Ulrich (ulrich AT geophysik.uni-muenchen.de) + * + * @section LICENSE + * Copyright (c) 2018, SeisSol Group + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @section DESCRIPTION + **/ +#ifndef EASI_COMPONENT_OPTIMALSTRESS_SZZ_H_ +#define EASI_COMPONENT_OPTIMALSTRESS_SZZ_H_ + +#include +#include "easi/util/MagicStruct.h" + +namespace easi { + struct OptimalStress_Szz { + struct in { + double mu_d, mu_s, strike, dip, rake, s_zz, cohesion, R, s2ratio; + }; + in i; + + struct out { + double b_xx, b_yy, b_zz, b_xy, b_yz, b_xz; + }; + out o; + + inline void evaluate(); + }; +} + +SELF_AWARE_STRUCT(easi::OptimalStress_Szz::in, mu_d, mu_s, strike, dip, rake, s_zz, cohesion, R, s2ratio) +SELF_AWARE_STRUCT(easi::OptimalStress_Szz::out, b_xx, b_yy, b_zz, b_xy, b_yz, b_xz) + +// COMPUTE NORMALIZED STRESS FOLLOWING THE METHOD OF Ulrich et al. (2018) +void easi::OptimalStress_Szz::evaluate() { + double const pi = 3.141592653589793; + // most favorable direction (A4, AM2003) + double Phi = pi/4.0-0.5*atan(i.mu_s); + double strike_rad = i.strike*pi/180.0; + double dip_rad = i.dip*pi/180.0; + double rake_rad = i.rake*pi/180.0; + double s2 = sin(2.0*Phi); + double c2 = cos(2.0*Phi); + double alpha = (2.0*i.s2ratio-1.0)/3.0; + + double cd = cos(-Phi); + double sd = sin(-Phi); + + double cr = cos(rake_rad); + double sr = sin(rake_rad); + + double ci = cos(dip_rad); + double si = sin(dip_rad); + + double cs = cos(strike_rad); + double ss = sin(strike_rad); + + // a1, a2 and a3 are the coefficient of b_zz = a1 s11 + a2 s22 + a3 s33; + // o.b_zz = -(cd * cd * s11 * sr * sr + s33 * sd * sd * sr * sr + cr * cr * s22) * si * si - 2 * cd * ci * sd * sr * (s11 - s33) * si - ci * ci * (cd * cd * s33 + s11 * sd * sd); + double a1 = -pow(si * sr * cd + ci * sd, 2.0); + double a2 = -si * si * cr * cr; + double a3 = -pow(-si * sr * sd + ci * cd, 2.0); + double a = (a1 + a2 + a3); + double b = (a1 + (2.0*i.s2ratio-1.0)*a2 - a3; + double mufac = (i.mu_d + i.R * (i.mu_s-i.mu_d)); + double ds = (std::fabs(i.s_zz) + i.R * a * std::fabs(i.cohesion) / mufac) / (b + a * c2 + a *s2/K); + double sm = (std::fabs(i.s_zz) - b * ds) / a; + + //sii are all positive + double s11 = sm + ds; + double s22= sm - ds + 2.0*ds*i.s2ratio; + double s33 = sm - ds; + + + o.b_xx = -((ci * ci * s11 * sr * sr + s33 * si * si) * cd * cd + 2 * ci * sd * si * sr * (s33 - s11) * cd + (s33 * sd * sd * sr * sr + cr * cr * s22) * ci * ci + sd * sd * si * si * s11) * cs * cs + 2 * cr * cs * (cd * cd * ci * sr * s11 + sd * si * (s33 - s11) * cd - ci * sr * (-s33 * sd * sd + s22)) * ss - ss * ss * (cd * cd * cr * cr * s11 + cr * cr * s33 * sd * sd + s22 * sr * sr); + o.b_xy = cr * (cd * cd * ci * sr * s11 + sd * si * (s33 - s11) * cd - ci * sr * (-s33 * sd * sd + s22)) * cs * cs + ss * ((-cd * cd * s11 + ci * ci * s22 - s33 * sd * sd) * cr * cr + (ci * ci * s11 * sr * sr + s33 * si * si) * cd * cd + 2 * ci * sd * si * sr * (s33 - s11) * cd + s33 * ci * ci * sd * sd * sr * sr + sd * sd * si * si * s11 - s22 * sr * sr) * cs - ss * ss * cr * (cd * cd * ci * sr * s11 + sd * si * (s33 - s11) * cd - ci * sr * (-s33 * sd * sd + s22)); + o.b_xz = cd * cs * sd * sr * (s33 - s11) * si * si - ((cs * (-s11 * sr * sr + s33) * ci + cr * sr * ss * s11) * cd * cd - cs * ((s33 * sr * sr - s11) * sd * sd + cr * cr * s22) * ci - cr * sr * ss * (-s33 * sd * sd + s22)) * si - cd * ci * sd * (ci * cs * sr - cr * ss) * (s33 - s11); + o.b_yy = -((ci * ci * s11 * sr * sr + s33 * si * si) * cd * cd + 2 * ci * sd * si * sr * (s33 - s11) * cd + (s33 * sd * sd * sr * sr + cr * cr * s22) * ci * ci + sd * sd * si * si * s11) * ss * ss - 2 * cr * cs * (cd * cd * ci * sr * s11 + sd * si * (s33 - s11) * cd - ci * sr * (-s33 * sd * sd + s22)) * ss - cs * cs * (cd * cd * cr * cr * s11 + cr * cr * s33 * sd * sd + s22 * sr * sr); + o.b_yz = -cd * sd * sr * ss * (s33 - s11) * si * si - ((-ss * (-s11 * sr * sr + s33) * ci + cr * cs * sr * s11) * cd * cd + ss * ((s33 * sr * sr - s11) * sd * sd + cr * cr * s22) * ci - cr * cs * sr * (-s33 * sd * sd + s22)) * si + cd * ci * sd * (ci * sr * ss + cr * cs) * (s33 - s11); + o.b_zz = -(cd * cd * s11 * sr * sr + s33 * sd * sd * sr * sr + cr * cr * s22) * si * si - 2 * cd * ci * sd * sr * (s11 - s33) * si - ci * ci * (cd * cd * s33 + s11 * sd * sd); + +} + +#endif diff --git a/include/easi/parser/YAMLComponentParsers.h b/include/easi/parser/YAMLComponentParsers.h index 329e47b..0e51b86 100644 --- a/include/easi/parser/YAMLComponentParsers.h +++ b/include/easi/parser/YAMLComponentParsers.h @@ -54,6 +54,7 @@ #include "easi/component/SpecialMap.h" #include "easi/component/STRESS_STR_DIP_SLIP_AM.h" #include "easi/component/OptimalStress.h" +#include "easi/component/OptimalStress_Szz.h" #include "easi/component/AndersonianStress.h" #ifdef USE_ASAGI From a06f8843bfe2397f42dc61e6bfa81aa2fd0ceae6 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Thu, 15 Jul 2021 14:11:34 +0200 Subject: [PATCH 08/13] fix typos --- include/easi/component/OptimalStress_Szz.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/easi/component/OptimalStress_Szz.h b/include/easi/component/OptimalStress_Szz.h index ed54b05..5e91a02 100644 --- a/include/easi/component/OptimalStress_Szz.h +++ b/include/easi/component/OptimalStress_Szz.h @@ -90,10 +90,10 @@ void easi::OptimalStress_Szz::evaluate() { double a1 = -pow(si * sr * cd + ci * sd, 2.0); double a2 = -si * si * cr * cr; double a3 = -pow(-si * sr * sd + ci * cd, 2.0); - double a = (a1 + a2 + a3); - double b = (a1 + (2.0*i.s2ratio-1.0)*a2 - a3; + double a = a1 + a2 + a3; + double b = a1 + (2.0*i.s2ratio-1.0)*a2 - a3; double mufac = (i.mu_d + i.R * (i.mu_s-i.mu_d)); - double ds = (std::fabs(i.s_zz) + i.R * a * std::fabs(i.cohesion) / mufac) / (b + a * c2 + a *s2/K); + double ds = (std::fabs(i.s_zz) + i.R * a * std::fabs(i.cohesion) / mufac) / (b + a * c2 + a *s2 / mufac); double sm = (std::fabs(i.s_zz) - b * ds) / a; //sii are all positive From 671906557e848f25fedb4e7f8a54b2bc966afb55 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Fri, 16 Jul 2021 13:49:59 +0200 Subject: [PATCH 09/13] invert sign in S_zz --- include/easi/component/OptimalStress_Szz.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/include/easi/component/OptimalStress_Szz.h b/include/easi/component/OptimalStress_Szz.h index 5e91a02..8037cad 100644 --- a/include/easi/component/OptimalStress_Szz.h +++ b/include/easi/component/OptimalStress_Szz.h @@ -85,13 +85,12 @@ void easi::OptimalStress_Szz::evaluate() { double cs = cos(strike_rad); double ss = sin(strike_rad); - // a1, a2 and a3 are the coefficient of b_zz = a1 s11 + a2 s22 + a3 s33; - // o.b_zz = -(cd * cd * s11 * sr * sr + s33 * sd * sd * sr * sr + cr * cr * s22) * si * si - 2 * cd * ci * sd * sr * (s11 - s33) * si - ci * ci * (cd * cd * s33 + s11 * sd * sd); - double a1 = -pow(si * sr * cd + ci * sd, 2.0); - double a2 = -si * si * cr * cr; - double a3 = -pow(-si * sr * sd + ci * cd, 2.0); + // a1, a2 and a3 are the coefficient of o.b_zz = -a1 s11 -a2 s22 -a3 s33; + double a1 = pow(si * sr * cd + ci * sd, 2.0); + double a2 = si * si * cr * cr; + double a3 = pow(-si * sr * sd + ci * cd, 2.0); double a = a1 + a2 + a3; - double b = a1 + (2.0*i.s2ratio-1.0)*a2 - a3; + double b = a1 + (2.0*i.s2ratio-1.0)*a2 - a3; double mufac = (i.mu_d + i.R * (i.mu_s-i.mu_d)); double ds = (std::fabs(i.s_zz) + i.R * a * std::fabs(i.cohesion) / mufac) / (b + a * c2 + a *s2 / mufac); double sm = (std::fabs(i.s_zz) - b * ds) / a; From dd6076f0b152e81a08d1b6cbfb4c8b3acd5bb353 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Fri, 16 Jul 2021 13:58:55 +0200 Subject: [PATCH 10/13] revert OptimalStress --- include/easi/component/OptimalStress.h | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/include/easi/component/OptimalStress.h b/include/easi/component/OptimalStress.h index 06de957..31ff547 100644 --- a/include/easi/component/OptimalStress.h +++ b/include/easi/component/OptimalStress.h @@ -45,7 +45,7 @@ namespace easi { struct OptimalStress { struct in { - double mu_d, mu_s, strike, dip, rake, effectiveConfiningStress, s_zz, cohesion, R, s2ratio; + double mu_d, mu_s, strike, dip, rake, effectiveConfiningStress, cohesion, R, s2ratio; }; in i; @@ -58,7 +58,7 @@ namespace easi { }; } -SELF_AWARE_STRUCT(easi::OptimalStress::in, mu_d, mu_s, strike, dip, rake, effectiveConfiningStress, s_zz, cohesion, R, s2ratio) +SELF_AWARE_STRUCT(easi::OptimalStress::in, mu_d, mu_s, strike, dip, rake, effectiveConfiningStress, cohesion, R, s2ratio) SELF_AWARE_STRUCT(easi::OptimalStress::out, b_xx, b_yy, b_zz, b_xy, b_yz, b_xz) // COMPUTE NORMALIZED STRESS FOLLOWING THE METHOD OF Ulrich et al. (2018) @@ -72,8 +72,7 @@ void easi::OptimalStress::evaluate() { double s2 = sin(2.0*Phi); double c2 = cos(2.0*Phi); double alpha = (2.0*i.s2ratio-1.0)/3.0; - // if i.s_zz non zero, we use the value as mean effective stress constrain, and we correct latter on - double effectiveConfiningStress = std::max(std::fabs(i.effectiveConfiningStress), std::fabs(i.s_zz)); + double effectiveConfiningStress = std::fabs(i.effectiveConfiningStress); double ds = (i.mu_d * effectiveConfiningStress + i.R*(i.cohesion + (i.mu_s-i.mu_d)*effectiveConfiningStress)) / (s2 + i.mu_d*(alpha + c2) + i.R*(i.mu_s-i.mu_d)*(alpha + c2)); double sm = effectiveConfiningStress - alpha*ds; @@ -100,16 +99,7 @@ void easi::OptimalStress::evaluate() { o.b_yy = -((ci * ci * s11 * sr * sr + s33 * si * si) * cd * cd + 2 * ci * sd * si * sr * (s33 - s11) * cd + (s33 * sd * sd * sr * sr + cr * cr * s22) * ci * ci + sd * sd * si * si * s11) * ss * ss - 2 * cr * cs * (cd * cd * ci * sr * s11 + sd * si * (s33 - s11) * cd - ci * sr * (-s33 * sd * sd + s22)) * ss - cs * cs * (cd * cd * cr * cr * s11 + cr * cr * s33 * sd * sd + s22 * sr * sr); o.b_yz = -cd * sd * sr * ss * (s33 - s11) * si * si - ((-ss * (-s11 * sr * sr + s33) * ci + cr * cs * sr * s11) * cd * cd + ss * ((s33 * sr * sr - s11) * sd * sd + cr * cr * s22) * ci - cr * cs * sr * (-s33 * sd * sd + s22)) * si + cd * ci * sd * (ci * sr * ss + cr * cs) * (s33 - s11); o.b_zz = -(cd * cd * s11 * sr * sr + s33 * sd * sd * sr * sr + cr * cr * s22) * si * si - 2 * cd * ci * sd * sr * (s11 - s33) * si - ci * ci * (cd * cd * s33 + s11 * sd * sd); - - if (abs(i.s_zz)>0.0) { - double factor = -effectiveConfiningStress/o.b_zz; - o.b_xx = o.b_xx * factor; - o.b_yy = o.b_yy * factor; - o.b_zz = o.b_zz * factor; - o.b_xy = o.b_xy * factor; - o.b_xz = o.b_xz * factor; - o.b_yz = o.b_yz * factor; - } + } #endif From 0f079ac3635d82097c02696ccada86ae480ec43a Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Fri, 16 Jul 2021 14:25:29 +0200 Subject: [PATCH 11/13] R -> R0 and update docu --- doc/maps.rst | 97 +++++++++++++++++++--- include/easi/component/OptimalStress_Szz.h | 8 +- 2 files changed, 89 insertions(+), 16 deletions(-) diff --git a/doc/maps.rst b/doc/maps.rst index d1e3640..b975fdb 100644 --- a/doc/maps.rst +++ b/doc/maps.rst @@ -206,8 +206,8 @@ Provides values by evaluating another easi tree. evaluate this intermediate variable before executing the "!STRESS\_STR\_DIP\_SLIP\_AM" component. -OptimalStress -------------- +OptimalStress_Szz +------------------ This component generates a stress tensor which maximizes shear traction on the optimally oriented plane defined by the strike and dip angles, along the rake angle orientation. @@ -217,7 +217,8 @@ The principal stress magnitudes are prescribed by: - the relative prestress ratio R (where :math:`R=1/(1+S)`, with S the relative fault strength), - the stress shape ratio s2ratio :math:`= (s_2-s_3)/(s_1-s_3)`, where :math:`s_1`, :math:`s_2` and :math:`s_3` are the maximum, intermediate, and minimum compressive stress, respetively, and -- either the :math:`s_{zz}` component of the stress tensor, or the mean effective stress, effectiveConfiningStress :math:`= Tr(s_{ii})/3`. (if s_zz is set, effectiveConfiningStress should be set 0, and vice versa). +- the :math:`s_{zz}` component of the stress tensor + To prescribe R, static and dynamic friction (mu\_s and mu\_d) as well as cohesion are required. The procedure is described in Ulrich et al. (2019), methods section 'Initial Stress'. @@ -230,11 +231,11 @@ The principal stresses are oriented relatively to the strike, dip and rake angle The red plane, that contains :math:`s_1` and :math:`s_3` is normal to the optimally oriented fault plane and contains the rake vector. :math:`s_2` (not represented) is normal to the red plane. -Note that the OptimalStress component is only valid for an ENU system. +Note that the OptimalStress_Szz component is only valid for an ENU system. .. code-block:: YAML - components: !OptimalStress + components: !OptimalStress_Szz constants: mu_d: mu_s: @@ -243,8 +244,7 @@ Note that the OptimalStress component is only valid for an ENU system. rake: cohesion: s2ratio: - R: - effectiveConfiningStress: + R0: s_zz: :Domain: @@ -360,6 +360,79 @@ Evaluates application-defined functions. Deprecated components --------------------- +OptimalStress +^^^^^^^^^^^^^^ + +This component does the same as the component `OptimalStress_Szz`, but prescribes the effectiveConfiningStress :math:`= Tr(s_{ii})/3`, +rather than the :math:`s_{zz}` component of the stress tensor. +Note that the OptimalStress component is only valid for an ENU system. + +.. code-block:: YAML + + components: !OptimalStress + constants: + mu_d: + mu_s: + strike: + dip: + rake: + cohesion: + s2ratio: + R: + effectiveConfiningStress: + +:Domain: + *inherited* +:Codomain: + stress components (b\_xx, b\_yy, b\_zz, b\_xy, b\_yz, and b\_xz) + +The following code: + +.. code-block:: YAML + + !OptimalStress + constants: + mu_d: a + mu_s: b + strike: c + dip: d + rake: e + cohesion: f + s2ratio: g + R: h + effectiveConfiningStress: i + +can be (in most case accurately) approximated by: + +.. code-block:: YAML + + !EvalModel + parameters: [b_xx,b_yy,b_zz,b_xy, b_xz, b_yz] + model: !ConstantMap + map: + mu_d: a + components: !OptimalStress_Szz + constants: + mu_s: b + strike: c + dip: d + rake: e + cohesion: f + s2ratio: g + R0: h + s_zz: i + components: !FunctionMap + map: + b_xx: return b_xx*(3.*b_zz)/(b_xx+b_yy+b_zz); + b_yy: return b_yy*(3.*b_zz)/(b_xx+b_yy+b_zz); + b_zz: return b_zz*(3.*b_zz)/(b_xx+b_yy+b_zz); + b_xy: return b_xy*(3.*b_zz)/(b_xx+b_yy+b_zz); + b_xz: return b_xz*(3.*b_zz)/(b_xx+b_yy+b_zz); + b_yz: return b_yz*(3.*b_zz)/(b_xx+b_yy+b_zz); + + +Note that this is not fully equivalent if `cohesion` is not small compared to `effectiveConfiningStress`. + STRESS\_STR\_DIP\_SLIP\_AM ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -387,11 +460,12 @@ STRESS\_STR\_DIP\_SLIP\_AM `120_initial_stress `__ This component, used for example in the setup of the Sumatra SC paper -(Uphoff et al., 2017) is deprecated and can be substituted by the more complete 'OptimalStress' routine. -While in the 'OptimalStress' routine, a rake parameter defines the direction of maximized shear traction +(Uphoff et al., 2017) is deprecated and can be substituted by the more complete 'OptimalStress_Szz' routine. +While in the 'OptimalStress_Szz' routine, a rake parameter defines the direction of maximized shear traction on the optimally oriented fault, such direction is here defined by the parameter DipSlipFaulting (1 for pure dip-slip, 0 for pure strike-slip). Another difference with the OptimalStress component is that STRESS\_STR\_DIP\_SLIP\_AM returns a normalized stress tensor. +Note that the STRESS\_STR\_DIP\_SLIP\_AM component is only valid for an ENU system. The following code: @@ -418,7 +492,7 @@ is equivalent to: model: !ConstantMap map: mu_d: a - components: !OptimalStress + components: !OptimalStress_Szz constants: mu_s: b strike: c @@ -426,9 +500,8 @@ is equivalent to: rake: 90.0 cohesion: e s2ratio: f - R: g + R0: g s_zz: h - effectiveConfiningStress: 0.0 components: !FunctionMap map: b_xx: return b_xx/b_zz; diff --git a/include/easi/component/OptimalStress_Szz.h b/include/easi/component/OptimalStress_Szz.h index 8037cad..569ca59 100644 --- a/include/easi/component/OptimalStress_Szz.h +++ b/include/easi/component/OptimalStress_Szz.h @@ -45,7 +45,7 @@ namespace easi { struct OptimalStress_Szz { struct in { - double mu_d, mu_s, strike, dip, rake, s_zz, cohesion, R, s2ratio; + double mu_d, mu_s, strike, dip, rake, s_zz, cohesion, R0, s2ratio; }; in i; @@ -58,7 +58,7 @@ namespace easi { }; } -SELF_AWARE_STRUCT(easi::OptimalStress_Szz::in, mu_d, mu_s, strike, dip, rake, s_zz, cohesion, R, s2ratio) +SELF_AWARE_STRUCT(easi::OptimalStress_Szz::in, mu_d, mu_s, strike, dip, rake, s_zz, cohesion, R0, s2ratio) SELF_AWARE_STRUCT(easi::OptimalStress_Szz::out, b_xx, b_yy, b_zz, b_xy, b_yz, b_xz) // COMPUTE NORMALIZED STRESS FOLLOWING THE METHOD OF Ulrich et al. (2018) @@ -91,8 +91,8 @@ void easi::OptimalStress_Szz::evaluate() { double a3 = pow(-si * sr * sd + ci * cd, 2.0); double a = a1 + a2 + a3; double b = a1 + (2.0*i.s2ratio-1.0)*a2 - a3; - double mufac = (i.mu_d + i.R * (i.mu_s-i.mu_d)); - double ds = (std::fabs(i.s_zz) + i.R * a * std::fabs(i.cohesion) / mufac) / (b + a * c2 + a *s2 / mufac); + double mufac = (i.mu_d + i.R0 * (i.mu_s-i.mu_d)); + double ds = (std::fabs(i.s_zz) + i.R0 * a * std::fabs(i.cohesion) / mufac) / (b + a * c2 + a *s2 / mufac); double sm = (std::fabs(i.s_zz) - b * ds) / a; //sii are all positive From 05460bd139dff848f265ba9efe37274356217592 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Fri, 16 Jul 2021 14:31:00 +0200 Subject: [PATCH 12/13] precise reference --- doc/maps.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/maps.rst b/doc/maps.rst index b975fdb..1a3e926 100644 --- a/doc/maps.rst +++ b/doc/maps.rst @@ -221,7 +221,8 @@ The principal stress magnitudes are prescribed by: To prescribe R, static and dynamic friction (mu\_s and mu\_d) as well as cohesion are required. -The procedure is described in Ulrich et al. (2019), methods section 'Initial Stress'. +The procedure is described in Ulrich et al. (2019), methods section 'Initial Stress' +(note that in Ulrich et al. (2019), as in the deprecated `OptimalStress` component, the effectiveConfiningStress :math:`= Tr(s_{ii})/3` is prescribed instead of `s_{zz}`). The principal stresses are oriented relatively to the strike, dip and rake angles as follow: From 9a8cfe3c58d6437f8ddad0e16d42ae0331a160e4 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Fri, 16 Jul 2021 14:40:16 +0200 Subject: [PATCH 13/13] fix missing :math: --- doc/maps.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/maps.rst b/doc/maps.rst index 1a3e926..7a62097 100644 --- a/doc/maps.rst +++ b/doc/maps.rst @@ -222,7 +222,7 @@ The principal stress magnitudes are prescribed by: To prescribe R, static and dynamic friction (mu\_s and mu\_d) as well as cohesion are required. The procedure is described in Ulrich et al. (2019), methods section 'Initial Stress' -(note that in Ulrich et al. (2019), as in the deprecated `OptimalStress` component, the effectiveConfiningStress :math:`= Tr(s_{ii})/3` is prescribed instead of `s_{zz}`). +(note that in Ulrich et al. (2019), as in the deprecated `OptimalStress` component, the effectiveConfiningStress :math:`= Tr(s_{ii})/3` is prescribed instead of :math:`s_{zz}`). The principal stresses are oriented relatively to the strike, dip and rake angles as follow: