anharmonic
The anharmonic scaling calculates unrelaxed elastic moduli at elevated temperature and pressure.
Requires
VBR.in.SV.T_K
temperature in degrees KVBR.in.SV.GPa
pressure in GPaVBR.in.SV.rho
density in kg m-3
Calling Procedure
% set required state variables
clear
VBR.in.SV.T_K = linspace(800,1200,10)+273; % temperature [K]
VBR.in.SV.P_GPa = 2 * ones(size(VBR.in.SV.T_K)); % pressure [GPa]
VBR.in.SV.rho = 3300 * ones(size(VBR.in.SV.T_K)); % density [kg m^-3]
% add to elastic methods list
VBR.in.elastic.methods_list={'anharmonic'};
% call VBR_spine
[VBR] = VBR_spine(VBR) ;
Output
Output is stored in VBR.out.elastic.anharmonic
:
>> disp(fieldnames(VBR.out.elastic.anharmonic))
{
[1,1] = Gu % unrelaxed shear modulus at desired P,T
[2,1] = Ku % unrelaxed bulk modulus at desired P,T
[3,1] = Vpu % unrelaxed compressional wave velocity
[4,1] = Vsu % unrelaxed shear wave velocity
}
Additionally, the unrelaxed modulus at reference conditions is returned in VBR.out.elastic.Gu_0
as an array that is the same size as the input state variables in VBR.in.SV
.
Parameters
Some important parameters are
VBR.in.elastic.anharmonic.T_K_ref
: reference temperature in KVBR.in.elastic.anharmonic.P_Pa_ref
: reference temperature in PaVBR.in.elastic.anharmonic.Gu_0_ol
: reference unrelaxed olivine modulus in GPa at reference T, P.VBR.in.elastic.anharmonic.dG_dT
: temperature dependence of modulus in Pa/K (or Pa/C).VBR.in.elastic.anharmonic.dG_dP
: pressure dependence of modulus, unitless.
Default values for reference temperature and pressure are surface conditions.
To view the full list of parameters,
VBR.in.elastic.anharmonic = Params_Elastic('anharmonic');
disp(VBR.in.elastic.anharmonic)
To set any parameter to a non-default value, simply set the field before calling VBR_spine
:
VBR.in.SV=struct();
VBR.in.SV.T_K = linspace(800,1200,10)+273; % temperature [K]
VBR.in.SV.P_GPa = 2 * ones(size(VBR.in.SV.T_K)); % pressure [GPa]
VBR.in.SV.rho = 3300 * ones(size(VBR.in.SV.T_K)); % density [kg m^-3]
% add to elastic methods list
VBR.in.elastic.methods_list={'anharmonic'};
% adjust parameters
VBR.in.elastic.anharmonic.Gu_0_ol=74;
% call VBR_spine
[VBR] = VBR_spine(VBR) ;
the Reference Modulus
The VBR Calculator does not calculate unrelaxed moduli for various compositions. It is expected that the user will have some other means of setting an appropriate modulus value. The user may set VBR.in.elastic.anharmonic.Gu_0_ol
to any value they see fit, with the warning that the anelastic scalings implemented here are derived from studies on either olivine or olivine-like materials (i.e., borneol) and hence it is not certain whether the fitting parameters used are appropriate for assemblages where that assumption fails.
Gu_0_crust
While the VBR Calculator does not currently apply to non-olivine assemblages, there is a parameter for a crustal modulus, VBR.in.elastic.anharmonic.Gu_0_crust
. This parameter allows calculation of more realistic velocity profiles in the crust and uppermost mantle at low temperatures below where anelastic affects are negligible.
The effective unrelexed reference modulus is calculated as a linear mixture of Gu_0_crust
and Gu_0_ol
where the compositional fraction is set by VBR.in.SV.chi
, with a value of 1 for pure olivine:
Gu = Gu_0_ol .* VBR.in.SV.chi + (1-VBR.in.SV.chi) .* Gu_0_crust;
If VBR.in.SV.chi
is not set by the user, then VBR.in.SV.chi
is initialized to a value of 1 everywhere.
Thus, to produce depth profiles, the state variable arrays should correspond to some depth dependence. For an example, see Projects/vbr_core_examples/CB_008_anharmonic_Guo.m
.
Setting unrelaxed moduli at T, P directly
The VBRc relies on a simple linear calculation of the unrelaxed moduli at the temperature and pressure of interest. It is possible, however, to load in unrelaxed moduli calculated with other programs (like. e.g., Perplex). To do so, you can set the following fields:
VBR.in.elastic.Gu_TP = ...
VBR.in.elastic.Ku_TP = ...
Both Gu_TP
and Ku_TP
should be arrays of the same shape as the state variable
arrays. When these fields are present, the anharmonic calculation will simply read
from these fields, allowing you to set their values in any way you see fit (e.g.,
reading from Perplex output or calling your own functions).