andrade_analytical
The andrade_analytical
method is an implementation of the analytical andrade model in the frequency domain, following Lau and Hotlzman, 2019, doi:10.1029/2019GL083529.
This method is new as of VBR version v1.2.0.
Requires
The following state variable arrays are required with the default behavior of andrade_analytical
. Most of these variables are indirectly required: the andrade_analytical
method will pull results from anharmonic
and viscous
calculations:
VBR.in.SV.T_K % temperature [K]
VBR.in.SV.P_GPa % pressure [GPa]
VBR.in.SV.dg_um % grain size [um]
VBR.in.SV.sig_MPa % differential stress [MPa]
VBR.in.SV.phi % melt fraction / porosity
VBR.in.SV.rho % density in kg m<sup>-3</sup>
Required Elastic Methods: anharmonic
MUST be in the VBR.in.elastic.methods_list
. If anh_poro
is set, then xfit_premelt
will use the unrelaxed moduli from anh_poro
(which includes the P,T projection of anharmonic
plus the poroelastic correction). See the section
on elastic methods for more details.
Required Viscous Methods: The default behavior requires at least one viscous
method to be set. If multiple are defined, andrade_analytical
will use the first in the list. The default behavior uses the diffusion creep viscosity from the specified viscous method as the steady state viscosity within the andrade model.
Calling Procedure
The following calculates frequency dependence for a single thermodynamic state. The SV
arrays can also be arbitrary sized arrays.
VBR.in.elastic.methods_list={'anharmonic';};
VBR.in.viscous.methods_list={'HZK2011'};
VBR.in.anelastic.methods_list={'andrade_analytical';};
%% Define the Thermodynamic State %%
% set state variables
n1 = 1;
VBR.in.SV.P_GPa = 2 * ones(n1,1); % pressure [GPa]
VBR.in.SV.T_K = 1473 * ones(n1,1); % temperature [K]
VBR.in.SV.rho = 3300 * ones(n1,1); % density [kg m^-3]
VBR.in.SV.sig_MPa = 10 * ones(n1,1); % differential stress [MPa]
VBR.in.SV.phi = 0.0 * ones(n1,1); % melt fraction
VBR.in.SV.dg_um = 0.01 * 1e6 * ones(n1,1); % grain size [um]
% frequencies to calculate at
VBR.in.SV.f = logspace(-14,0,50);
% calculate!
VBR = VBR_spine(VBR) ;
Output
Output is stored in VBR.out.anelastic.andrade_analytical
:
>> disp(fieldnames(VBR.out.anelastic.andrade_analytical))
{
[1,1] = J1 % real part of dynamic compliance [1/Pa]
[2,1] = J2 % complex part of dynamic compliance [1/Pa]
[3,1] = V % shear wave velocity [m/s]
[6,1] = Qinv % attenuation
[7,1] = Q % quality factor
[8,1] = M % modulus [Pa]
[9,1] = Vave % frequency-averaged shear wave velocity [m/s]
}
The following fields are frequency dependent: J1
,J2
,Q
,Qinv
, M
, V
.
Parameters
To view the full list of parameters,
VBR.in.anelastic.andrade_analytical = Params_Anelastic('andrade_analytical');
disp(VBR.in.anelastic.andrade_analytical)
The two methods that control the andrade model scaling are the andrade exponent, alpha
, and the factor, Beta
:
VBR.in.anelastic.andrade_analytical.alpha % default 1/3
VBR.in.anelastic.andrade_analytical.Beta % default 1.0000e-04
Any of the parameters can be set before calling VBR_spine
.
Controlling the viscosity
As mentioned above, the default behavior of andrade_analytical
is to use the steady state diffusion creep viscosity from the specified viscous method. For example,
VBR.in.elastic.methods_list={'anharmonic';};
VBR.in.viscous.methods_list={'HZK2011'};
VBR.in.anelastic.methods_list={'andrade_analytical';};
Will utilize VBR.out.viscous.HZK2011.diff.eta
as the steady state viscosity.
You can change this behavior in a number of ways by changing some parameter fields.
First, you can adjust which viscous method is by setting the viscosity_method_mechanism
field. For example, to use the composite viscosity you would set
VBR.in.anelastic.andrade_analytical = Params_Anelastic('andrade_analytical');
VBR.in.anelastic.andrade_analytical.viscosity_method_mechanism = 'eta_total';
The value of viscosity_method_mechanism
must be one of the mechanisms in the viscosity output structure. For example, for HZK2011
fieldnames(VBR.out.viscous.HZK2011)
ans =
{
[1,1] = diff
[2,1] = disl
[3,1] = gbs
[4,1] = sr_tot
[5,1] = eta_total
[6,1] = units
}
viscosity_method_mechanism
may be 'diff'
, 'disl'
, 'gbs'
or 'eta_total'
.
The second way to adjust the viscosity is by explicitly setting the viscosity. To do this, set the viscosity_method
to fixed
and specify a steady state viscosity with eta_ss
:
VBR.in.anelastic.andrade_analytical = Params_Anelastic('andrade_analytical');
VBR.in.anelastic.andrade_analytical.viscosity_method = 'fixed';
VBR.in.anelastic.andrade_analytical.eta_ss = 1e24;
The eta_ss
value may be a scalar or an array of the same size as the VBR.in.SV.
arrays.