MarkerTemperature
Initial Temperature Models
- TemperatureWave
- Uniform
- BoxConvection
- Linear
- AnalyticalThreeLayer
- FourLinearSegments
- FractureZone
- HotBox
- HalfSpaceSpreading
- HalfSpaceDoubleSpreading
Highlight an initial temperature model name in the list above and use Ctl-F + Enter to navigate to a detailed description in the Initial Marker Temperature Models section below.
Initialization
EarthBox.Markers.MarkerTemperature.initialize! — Function
initialize!(
model::ModelData;
initial_temperature_model::Union{Int, String, Symbol, Nothing}=nothing,
kwargs...
)::NothingInitialize the initial marker temperature model.
Arguments
model::ModelData- Model data container.
initial_temperature_model::Union{Int, String, Symbol, Nothing}=nothing- Controls the type of initial temperature model used to initialize marker temperature. See the Initial Marker Temperature Models section below for information on available initial temperature models. Required parameters depend on the selected initial temperature model and are set using the parameters dictionary or by using a yamal formatted model input file. The initial temperature model type is stored in the model data container as an integer ID (
itype_temp) and a corresponding string name (stype_temp). Ifinitial_temperature_modelis nothing the current initial temperature model defined in the model data container will be used. The initial temperature model parameters can be accessed from the model data container as follows:itype_temp = model.heat_equation.parameters.initial_condition.itype_temp.valuestype_temp = model.heat_equation.parameters.initial_condition.stype_temp.value
- Controls the type of initial temperature model used to initialize marker temperature. See the Initial Marker Temperature Models section below for information on available initial temperature models. Required parameters depend on the selected initial temperature model and are set using the parameters dictionary or by using a yamal formatted model input file. The initial temperature model type is stored in the model data container as an integer ID (
Keyword Arguments
temperature_uniform::Union{Float64, Nothing}- Uniform initial temperature value in Kelvin
adiabatic_gradient::Union{Float64, Nothing}- Adiabatic gradient in K/km
parameters::Union{InputDictType, Nothing}- Dictionary of required parameters for the selected
initial_temperature_modelmodel. See the section Initial Marker Temperature Models below for information on available initial temperature models and required parameters.
- Dictionary of required parameters for the selected
Initial Marker Temperature Models
TemperatureWave
initial_temperature_modelvalue:"TemperatureWave",:TemperatureWave, or 0- Description: Simple temperature wave model whereby a square domain is rotated in a circular velocity field. This model is used for the temperature wave benchmark.
- Required Parameters (Set using
parametersdictionary keyword argument):temperature_top::Float64`: Temperature along the top boundary of the model domain in Kelvintemperature_bottom::Float64: Temperature at the base of the model domain in Kelvintemperature_of_wave::Float64: Temperature of wave in Kelvin
- Required Geometries:
- None
Uniform
initial_temperature_modelvalue:"Uniform",:Uniform, or 1- Description: Uniform initial temperature temperature.
- Required Parameters (Set using
parametersdictionary keyword argument):temperature_uniform::Float64: Uniform initial temperature value in Kelvin
- Required Geometries:
- None
BoxConvection
initial_temperature_modelvalue:"BoxConvection",:BoxConvection, or 2- Description: Initial temperature model for convection in a box benchmark
- Required Parameters (Set using
parametersdictionary keyword argument):temperature_top::Float64: Temperature along the top boundary of the model domain in Kelvintemperature_bottom::Float64: Temperature at the base of the model domain in Kelvin
- Required Geometries:
- None
Linear
initial_temperature_modelvalue:"Linear",:Linear, or 3- Description: Initial temperature model using a linear increase with depth.
- Required Parameters (Set using
parametersdictionary keyword argument):temperature_top::Float64: Temperature along the top boundary of the model domain in Kelvintemperature_bottom::Float64: Temperature at the base of the model domain in Kelvin
- Required Geometries:
- None
AnalyticalThreeLayer
initial_temperature_modelvalue:"AnalyticalThreeLayer",:AnalyticalThreeLayer, or 4- Description: Analytical steady-state three layer thermal model used to initialize marker temperature. The three layers are (1) the upper crust, (2) lower crust and (3) mantle lithosphere all of which have user defined thermal conductivities and radiogenic heat production. Thickness of the sticky layer above the three layers and the thicknesses of the upper crust and lower crust are defined during the initialization of earth layering and sticky geometry. Any mantle lithosphere thicknesses defined during initialization are ignored and the thickness of the thermal lithosphere (
thick_thermal_lithosphere) is used instead. The temperature at the top of the crust is set equal to the temperature boundary condition applied at the top of the model (temperature_top) The temperature at the base of the thermal lithosphere is set equal to thetemperature_base_lithparameter. If these parameters were set during boundary condition initialization they do not need to be set here. Temperature below the lithosphere is defined using an adiabatic gradient (adiabatic_gradient). A thermal perturbation is also included in the model that involves a triangular perturbation to the thickness of the thermal lithosphere. Note that if these parameters are set they will be used to define the geotherm for the reference lithosphere during reference lithosphere initialization. - Required Parameters (Set using
parametersdictionary keyword argument):temperature_top::Float64: Temperature along the top boundary of the model domain in Kelvintemperature_base_lith::Float64: Initial temperature at the base of the lithosphere in Kelvinconductivity_upper_crust::Float64: Thermal conductivity of upper crust W/m/Kconductivity_lower_crust::Float64: Thermal conductivity of lower crust W/m/Kconductivity_mantle::Float64: Thermal conductivity of mantle W/m/Kheat_production_upper_crust::Float64: Radiogenic heat production in upper crust W/m^3heat_production_lower_crust::Float64: Radiogenic heat production in lower crust W/m^3heat_production_mantle::Float64: Radiogenic heat production in mantle W/m^3thick_thermal_lithosphere::Float64: Thickness of the thermal lithosphere in metersadiabatic_gradient::Float64: Adiabatic gradient in K/kmamplitude_perturbation::Float64: Amplitude of central thermal perturbation in meterswidth_perturbation::Float64: Width of central thermal perturbation in meters
- Required Geometries:
FourLinearSegments
initial_temperature_modelvalue:"FourLinearSegments",:FourLinearSegments, or 5- Description: Simple lithosphere geotherm composed of four linear segments with an optional thermal perturbation located in the middle of the model. The four segment are (1) sticky air/water, (2) continental crust, (3) mantle lithosphere and (4) asthenosphere. The layer thicknesses are defined during the initialization of earth layering and sticky air geometry parameters. Sub-layering in the crust and mantle is lumped into crustal and mantle lithosphere layers. Temperature in the sticky domain is constant and equal to the temperature at the top of the model defined during boundary condition initialization. Temperature within each additional layer is calculated assuming a linear gradient defined by the temperatures set using this input dictionary. A thermal perturbation is also included in the model that involves a triangular perturbation to the depth of the asthenosphere.
- Required Parameters (Set using
parametersdictionary keyword argument):temperature_surface::Float64: Initial temperature at the surface for lithospheric models with sticky air in Kelvintemperature_moho::Float64: Initial temperature at the Moho for lithospheric models in Kelvintemperature_base_lith::Float64: Initial temperature at the base of the lithosphere in Kelvintemperature_bottom::Float64: Temperature at the base of the model domain in Kelvinamplitude_perturbation::Float64: Amplitude of central thermal perturbation in meterswidth_perturbation::Float64: Width of central thermal perturbation in meters
- Required Geometries:
FractureZone
initial_temperature_modelvalue:"FractureZone",:FractureZone, or 6- Description: Initial temperature condition for fracture zone model.
- Required Parameters (Set using
parametersdictionary keyword argument):temperature_top::Float64: Temperature along the top boundary of the model domain in Kelvintemperature_bottom::Float64: Temperature at the base of the model domain in Kelvinage_lithosphere_left::Float64: Age of lithosphere to the left of fracture zone in Myrage_lithosphere_right::Float64: Age of lithosphere to the right of fracture zone in Myradiabatic_gradient::Float64: Adiabatic gradient in K/kmthermal_lithosphere_depth_left::Float64: Thermal lithosphere depth to the left of fracture zone in metersthermal_lithosphere_depth_right::Float64: Thermal lithosphere depth to the right of fracture zone in metersthermal_diffusivity::Float64: Thermal diffusivity in m^2/s
- Required Geometries:
HotBox
initial_temperature_modelvalue:"HotBox",:HotBox, or 7- Description: Initial temperature condition for a hot box in a cold medium.
- Required Parameters (Set using
parametersdictionary keyword argument):temperature_top::Float64: Temperature along the top boundary of the model domain in Kelvintemperature_bottom::Float64: Temperature at the base of the model domain in Kelvin
- Required Geometries:
- Geometric parameters are hard coded in the model. See
HotBox.jlfor more information.
- Geometric parameters are hard coded in the model. See
HalfSpaceSpreading
initial_temperature_modelvalue:"HalfSpaceSpreading",:HalfSpaceSpreading, or 8- Description: Initial temperature condition for half-space spreading model.
- Required Parameters (Set using
parametersdictionary keyword argument):temperature_top::Float64: Temperature along the top boundary of the model domain in Kelvinadiabatic_gradient::Float64: Adiabatic gradient in K/km
- Required Geometries:
HalfSpaceDoubleSpreading
initial_temperature_modelvalue:"HalfSpaceDoubleSpreading",:HalfSpaceDoubleSpreading, or 9- Description: Initial temperature condition for half-space double spreading model.
- Required Parameters (Set using
parametersdictionary keyword argument):adiabatic_gradient::Float64: Adiabatic gradient in K/km
- Required Geometries:
Example: AnalyticalThreeLayer
# Copy and paste this code into the Julia REPL.
using EarthBox
using CairoMakie
# Initialize EarthBox including model data container.
eb = EarthBoxState(
xsize=500000.0, ysize=160000.0,
xnum=250, ynum=80,
dx_marker=500.0, dy_marker=500.0);
# Unpack the model data container.
model = eb.model_manager.model;
# Initialize the staggered grid.
StaggeredGrid.initialize!(model, grid_type=:UniformGrid);
# Initialize marker coordinates.
Markers.MarkerCoordinates.initialize!(model, marker_distribution=:Regular);
# Initialize the required material geometry parameters for the
# LithosphericExtensionLateralStrongZones material model
MaterialGeometry.StickyAirGeometry.initialize!(model, thick_air=10000.0);
MaterialGeometry.EarthLayering.initialize!(
model, thick_lith=125000.0, thick_crust=35000.0, thick_upper_crust=22000.0);
# Get EarthBox parameters to programmatically define parameter dictionary keys
const PARAMS = get_eb_parameters();
# Initialize marker temperature
Markers.MarkerTemperature.initialize!(
model,
initial_temperature_model=initial_temperature_names.AnalyticalThreeLayer,
parameters=Dict(
PARAMS.temperature_top.name => ConversionFuncs.celsius_to_kelvin(0.0),
PARAMS.amplitude_perturbation.name => 0.0,
PARAMS.width_perturbation.name => 10_000.0,
PARAMS.thick_thermal_lithosphere.name => 125_000.0,
PARAMS.temperature_base_lith.name => ConversionFuncs.celsius_to_kelvin(1345.0),
PARAMS.adiabatic_gradient.name => 0.4,
PARAMS.conductivity_upper_crust.name => 2.25,
PARAMS.conductivity_lower_crust.name => 2.0,
PARAMS.conductivity_mantle.name => 2.0,
PARAMS.heat_production_upper_crust.name => 1.8e-6,
PARAMS.heat_production_lower_crust.name => 0.5e-6,
PARAMS.heat_production_mantle.name => 0.0
)
);
# Get marker coordinate arrays amd convert from meters to kilometers
marker_x_km = model.obj_dict["marker_x"].array./1000.0;
marker_y_km = model.obj_dict["marker_y"].array./1000.0;
# Get marker temperature array and convert to Celsius
marker_TC = ConversionFuncs.kelvin_to_celsius.(model.obj_dict["marker_TK"].array);
# Get size parameters and convert from meters to kilometers
xsize_km = model.obj_dict["xsize"].value/1000.0;
ysize_km = model.obj_dict["ysize"].value/1000.0;
# Decimate the marker arrays for faster plotting
decimation_factor = 2;
indices = 1:decimation_factor:length(marker_TC);
marker_TC = marker_TC[indices];
marker_x_km = marker_x_km[indices];
marker_y_km = marker_y_km[indices];
# Plot using CairoMakie
dpi = 150.0;
fig = Figure(size = (10.0*dpi, 3.0*dpi)); # 10 inches x 3 inches @ 150 dpi
ax = Axis(
fig[1, 1]; limits = (0.0, xsize_km, 0.0, ysize_km), yreversed = true,
xticks = collect(0.0:25.0:xsize_km), yticks = collect(0.0:10.0:ysize_km),
xlabel = "X (km)", ylabel = "Y (km)",
title = "AnalyticalThreeLayer Model for Initial Marker Temperature",
titlesize = 12, xlabelsize = 12, ylabelsize = 12,
xticklabelsize = 12, yticklabelsize = 12
);
plt = scatter!(
ax, marker_x_km, marker_y_km, color = marker_TC,
colormap = :bwr,
colorrange = (0.0, 1350.0),
marker=:circle, markersize = 4, rasterize = true
);
cb = Colorbar(
fig[1,2], plt; label = "Marker Temperature (Celsius)",
ticks = collect(0.0:50.0:1350.0),
ticklabelsize = 10
);
fig