MarkerTemperature

Initial Temperature Models

  • TemperatureWave
  • Uniform
  • BoxConvection
  • Linear
  • AnalyticalThreeLayer
  • FourLinearSegments
  • FractureZone
  • HotBox
  • HalfSpaceSpreading
  • HalfSpaceDoubleSpreading
quick search for initial temperature models

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...
)::Nothing

Initialize 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). If initial_temperature_model is 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.value
      • stype_temp = model.heat_equation.parameters.initial_condition.stype_temp.value

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_model model. See the section Initial Marker Temperature Models below for information on available initial temperature models and required parameters.

Initial Marker Temperature Models

TemperatureWave

  • initial_temperature_model value: "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 parameters dictionary keyword argument):
    • temperature_top::Float64`: Temperature along the top boundary of the model domain in Kelvin
    • temperature_bottom::Float64: Temperature at the base of the model domain in Kelvin
    • temperature_of_wave::Float64: Temperature of wave in Kelvin
  • Required Geometries:
    • None

Uniform

  • initial_temperature_model value: "Uniform", :Uniform, or 1
  • Description: Uniform initial temperature temperature.
  • Required Parameters (Set using parameters dictionary keyword argument):
    • temperature_uniform::Float64: Uniform initial temperature value in Kelvin
  • Required Geometries:
    • None

BoxConvection

  • initial_temperature_model value: "BoxConvection", :BoxConvection, or 2
  • Description: Initial temperature model for convection in a box benchmark
  • Required Parameters (Set using parameters dictionary keyword argument):
    • temperature_top::Float64: Temperature along the top boundary of the model domain in Kelvin
    • temperature_bottom::Float64: Temperature at the base of the model domain in Kelvin
  • Required Geometries:
    • None

Linear

  • initial_temperature_model value: "Linear", :Linear, or 3
  • Description: Initial temperature model using a linear increase with depth.
  • Required Parameters (Set using parameters dictionary keyword argument):
    • temperature_top::Float64: Temperature along the top boundary of the model domain in Kelvin
    • temperature_bottom::Float64: Temperature at the base of the model domain in Kelvin
  • Required Geometries:
    • None

AnalyticalThreeLayer

  • initial_temperature_model value: "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 the temperature_base_lith parameter. 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 parameters dictionary keyword argument):
    • temperature_top::Float64 : Temperature along the top boundary of the model domain in Kelvin
    • temperature_base_lith::Float64 : Initial temperature at the base of the lithosphere in Kelvin
    • conductivity_upper_crust::Float64 : Thermal conductivity of upper crust W/m/K
    • conductivity_lower_crust::Float64 : Thermal conductivity of lower crust W/m/K
    • conductivity_mantle::Float64 : Thermal conductivity of mantle W/m/K
    • heat_production_upper_crust::Float64 : Radiogenic heat production in upper crust W/m^3
    • heat_production_lower_crust::Float64 : Radiogenic heat production in lower crust W/m^3
    • heat_production_mantle::Float64 : Radiogenic heat production in mantle W/m^3
    • thick_thermal_lithosphere::Float64 : Thickness of the thermal lithosphere in meters
    • adiabatic_gradient::Float64 : Adiabatic gradient in K/km
    • amplitude_perturbation::Float64 : Amplitude of central thermal perturbation in meters
    • width_perturbation::Float64 : Width of central thermal perturbation in meters
  • Required Geometries:

FourLinearSegments

  • initial_temperature_model value: "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 parameters dictionary keyword argument):
    • temperature_surface::Float64 : Initial temperature at the surface for lithospheric models with sticky air in Kelvin
    • temperature_moho::Float64 : Initial temperature at the Moho for lithospheric models in Kelvin
    • temperature_base_lith::Float64 : Initial temperature at the base of the lithosphere in Kelvin
    • temperature_bottom::Float64 : Temperature at the base of the model domain in Kelvin
    • amplitude_perturbation::Float64 : Amplitude of central thermal perturbation in meters
    • width_perturbation::Float64 : Width of central thermal perturbation in meters
  • Required Geometries:

FractureZone

  • initial_temperature_model value: "FractureZone", :FractureZone, or 6
  • Description: Initial temperature condition for fracture zone model.
  • Required Parameters (Set using parameters dictionary keyword argument):
    • temperature_top::Float64 : Temperature along the top boundary of the model domain in Kelvin
    • temperature_bottom::Float64 : Temperature at the base of the model domain in Kelvin
    • age_lithosphere_left::Float64 : Age of lithosphere to the left of fracture zone in Myr
    • age_lithosphere_right::Float64 : Age of lithosphere to the right of fracture zone in Myr
    • adiabatic_gradient::Float64 : Adiabatic gradient in K/km
    • thermal_lithosphere_depth_left::Float64 : Thermal lithosphere depth to the left of fracture zone in meters
    • thermal_lithosphere_depth_right::Float64 : Thermal lithosphere depth to the right of fracture zone in meters
    • thermal_diffusivity::Float64 : Thermal diffusivity in m^2/s
  • Required Geometries:

HotBox

  • initial_temperature_model value: "HotBox", :HotBox, or 7
  • Description: Initial temperature condition for a hot box in a cold medium.
  • Required Parameters (Set using parameters dictionary keyword argument):
    • temperature_top::Float64 : Temperature along the top boundary of the model domain in Kelvin
    • temperature_bottom::Float64 : Temperature at the base of the model domain in Kelvin
  • Required Geometries:
    • Geometric parameters are hard coded in the model. See HotBox.jl for more information.

HalfSpaceSpreading

  • initial_temperature_model value: "HalfSpaceSpreading", :HalfSpaceSpreading, or 8
  • Description: Initial temperature condition for half-space spreading model.
  • Required Parameters (Set using parameters dictionary keyword argument):
    • temperature_top::Float64 : Temperature along the top boundary of the model domain in Kelvin
    • adiabatic_gradient::Float64 : Adiabatic gradient in K/km
  • Required Geometries:

HalfSpaceDoubleSpreading

  • initial_temperature_model value: "HalfSpaceDoubleSpreading", :HalfSpaceDoubleSpreading, or 9
  • Description: Initial temperature condition for half-space double spreading model.
  • Required Parameters (Set using parameters dictionary keyword argument):
    • adiabatic_gradient::Float64 : Adiabatic gradient in K/km
  • Required Geometries:
source

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