This is the julia interface to LaMEM, which does a number of handy things:
It will automatically download a binary installation of LaMEM, along with the correct version of PETSc and mpiexec for your system. You can also use these binaries directly from your terminal, so you are not limited to julia. Gone are the days where you had to first spend hours or days to install PETSc on your system!
We provide a simple function to run LaMEM from julia (also in parallel).
We provide functions to read timesteps back into julia.
Settings
This document was generated with Documenter.jl version 0.27.25 on Saturday 17 February 2024. Using Julia version 1.10.1.
This is the julia interface to LaMEM, which does a number of handy things:
It will automatically download a binary installation of LaMEM, along with the correct version of PETSc and mpiexec for your system. You can also use these binaries directly from your terminal, so you are not limited to julia. Gone are the days where you had to first spend hours or days to install PETSc on your system!
We provide a simple function to run LaMEM from julia (also in parallel).
We provide functions to read timesteps back into julia.
Settings
This document was generated with Documenter.jl version 0.27.25 on Saturday 17 February 2024. Using Julia version 1.10.1.
Structure that contains the LaMEM boundary conditions information.
noslip::Vector{Int64}: No-slip boundary flag mask (left right front back bottom top)
open_top_bound::Int64: Stress-free (free surface/infinitely fast erosion) top boundary flag
temp_top::Float64: Constant temperature on the top boundary
temp_bot::Float64: Constant temperature on the bottom boundary
exx_num_periods::Int64: number intervals of constant background strain rate (x-axis)
exx_time_delims::Vector{Float64}: time delimiters (one less than number of intervals, not required for one interval)
exx_strain_rates::Vector{Float64}: strain rates for each interval
eyy_num_periods::Int64: eyynumperiods
eyy_time_delims::Vector{Float64}: eyytimedelims
eyy_strain_rates::Vector{Float64}: eyystrainrates
exy_num_periods::Int64: exynumperiods
exy_time_delims::Vector{Float64}: exytimedelims
exy_strain_rates::Vector{Float64}: exystrainrates
exz_num_periods::Int64: exznumperiods
exz_time_delims::Vector{Float64}: exztimedelims
exz_strain_rates::Vector{Float64}: exzstrainrates
eyz_num_periods::Int64: eyznumperiods
eyz_time_delims::Vector{Float64}: eyztimedelims
eyz_strain_rates::Vector{Float64}: eyzstrainrates
bg_ref_point::Vector{Float64}: background strain rate reference point (fixed)
VelocityBoxes::Vector{VelocityBox}: List of added velocity boxes
bvel_face::Union{Nothing, String}: Face identifier (Left; Right; Front; Back; CompensatingInflow)
bvel_face_out::Union{Nothing, Int64}: Velocity on opposite side: -1 for inverted velocity; 0 for no velocity; 1 for the same direction of velocity
bvel_bot::Union{Nothing, Float64}: Bottom coordinate of inflow window
bvel_top::Union{Nothing, Float64}: Top coordinate of inflow window
velin_num_periods::Union{Nothing, Int64}: Number of periods when velocity changes (Optional)
velin_time_delims::Union{Nothing, Vector}: Change velocity at 2 and 5 Myrs (one less than number of intervals, not required for one interval) (Optional)
bvel_velin::Union{Nothing, Vector}: inflow velocity for each time interval(Multiple values required if velinnumperiods>1)
bvel_velout::Union{Nothing, Float64}: outflow velocity (if not specified, computed from mass balance)
bvel_relax_d::Union{Nothing, Float64}: vert.distance from bvelbot and bveltop over which velocity is reduced linearly
bvel_velbot::Union{Nothing, Int64}: bottom inflow velocity for use with bvel_face=CompensatingInflow
bvel_veltop::Union{Nothing, Int64}: top inflow velocity for use with bvel_face=CompensatingInflow
bvel_temperature_inflow::Union{Nothing, String}: bveltemperatureinflow: Thermal age of the plate, which can be constant if set to Fixedthermalage or ConstantTinflow (Temperature of the inflow material is constant everywhere)
bvel_thermal_age::Union{Nothing, Float64}: In dimensional unit. If the user specify this value, he needs to specify the temperature of the mantle and top as well
bvel_temperature_mantle::Union{Nothing, Float64}: In dimensional unit. Temperature of the mantle
bvel_temperature_top::Union{Nothing, Float64}: In dimensional unit. temperature of the top
bvel_temperature_constant::Union{Nothing, Float64}: Constant temperature inflow.
bvel_num_phase::Union{Nothing, Int64}: Imposes a stratigraphy of phase injected in the inflow boundary [if undefined, it uses the phase close to the boundary]
bvel_phase::Union{Nothing, Vector{Int64}}: phase number of inflow material [if undefined, it uses the phase close to the boundary] from bottom to top
bvel_phase_interval::Union{Nothing, Vector{Float64}}: Depth interval of injection of the phase (the interval is defined by num_phase+1 coordinates). e.g. [-120 -100 -10 0 ]
Mf::Float64: value for dike/magma- accommodated extension, between 0 and 1, in the front of the box, for phase dike
Mc::Float64: [optional] value for dike/magma- accommodate extension, between 0 and 1, for dike phase; M is linearly interpolated between Mf & Mc and Mc & Mb, if not set, Mc default is set to -1 so it is not used
y_Mc::Union{Nothing, Float64}: [optional], location for Mc, must be between front and back boundaries of dike box, if not set, default value to 0.0, but not used
Mb::Union{Nothing, Float64}: value for dike/magma-accommodated extension, between 0 and 1, in the back of the box, for phase dike
PhaseID::Union{Nothing, Int64}: Phase ID
PhaseTransID::Union{Nothing, Int64}: Phase transition ID
Structure that contains the LaMEM boundary conditions information.
noslip::Vector{Int64}: No-slip boundary flag mask (left right front back bottom top)
open_top_bound::Int64: Stress-free (free surface/infinitely fast erosion) top boundary flag
temp_top::Float64: Constant temperature on the top boundary
temp_bot::Float64: Constant temperature on the bottom boundary
exx_num_periods::Int64: number intervals of constant background strain rate (x-axis)
exx_time_delims::Vector{Float64}: time delimiters (one less than number of intervals, not required for one interval)
exx_strain_rates::Vector{Float64}: strain rates for each interval
eyy_num_periods::Int64: eyynumperiods
eyy_time_delims::Vector{Float64}: eyytimedelims
eyy_strain_rates::Vector{Float64}: eyystrainrates
exy_num_periods::Int64: exynumperiods
exy_time_delims::Vector{Float64}: exytimedelims
exy_strain_rates::Vector{Float64}: exystrainrates
exz_num_periods::Int64: exznumperiods
exz_time_delims::Vector{Float64}: exztimedelims
exz_strain_rates::Vector{Float64}: exzstrainrates
eyz_num_periods::Int64: eyznumperiods
eyz_time_delims::Vector{Float64}: eyztimedelims
eyz_strain_rates::Vector{Float64}: eyzstrainrates
bg_ref_point::Vector{Float64}: background strain rate reference point (fixed)
VelocityBoxes::Vector{VelocityBox}: List of added velocity boxes
bvel_face::Union{Nothing, String}: Face identifier (Left; Right; Front; Back; CompensatingInflow)
bvel_face_out::Union{Nothing, Int64}: Velocity on opposite side: -1 for inverted velocity; 0 for no velocity; 1 for the same direction of velocity
bvel_bot::Union{Nothing, Float64}: Bottom coordinate of inflow window
bvel_top::Union{Nothing, Float64}: Top coordinate of inflow window
velin_num_periods::Union{Nothing, Int64}: Number of periods when velocity changes (Optional)
velin_time_delims::Union{Nothing, Vector}: Change velocity at 2 and 5 Myrs (one less than number of intervals, not required for one interval) (Optional)
bvel_velin::Union{Nothing, Vector}: inflow velocity for each time interval(Multiple values required if velinnumperiods>1)
bvel_velout::Union{Nothing, Float64}: outflow velocity (if not specified, computed from mass balance)
bvel_relax_d::Union{Nothing, Float64}: vert.distance from bvelbot and bveltop over which velocity is reduced linearly
bvel_velbot::Union{Nothing, Int64}: bottom inflow velocity for use with bvel_face=CompensatingInflow
bvel_veltop::Union{Nothing, Int64}: top inflow velocity for use with bvel_face=CompensatingInflow
bvel_temperature_inflow::Union{Nothing, String}: bveltemperatureinflow: Thermal age of the plate, which can be constant if set to Fixedthermalage or ConstantTinflow (Temperature of the inflow material is constant everywhere)
bvel_thermal_age::Union{Nothing, Float64}: In dimensional unit. If the user specify this value, he needs to specify the temperature of the mantle and top as well
bvel_temperature_mantle::Union{Nothing, Float64}: In dimensional unit. Temperature of the mantle
bvel_temperature_top::Union{Nothing, Float64}: In dimensional unit. temperature of the top
bvel_temperature_constant::Union{Nothing, Float64}: Constant temperature inflow.
bvel_num_phase::Union{Nothing, Int64}: Imposes a stratigraphy of phase injected in the inflow boundary [if undefined, it uses the phase close to the boundary]
bvel_phase::Union{Nothing, Vector{Int64}}: phase number of inflow material [if undefined, it uses the phase close to the boundary] from bottom to top
bvel_phase_interval::Union{Nothing, Vector{Float64}}: Depth interval of injection of the phase (the interval is defined by num_phase+1 coordinates). e.g. [-120 -100 -10 0 ]
Mf::Float64: value for dike/magma- accommodated extension, between 0 and 1, in the front of the box, for phase dike
Mc::Float64: [optional] value for dike/magma- accommodate extension, between 0 and 1, for dike phase; M is linearly interpolated between Mf & Mc and Mc & Mb, if not set, Mc default is set to -1 so it is not used
y_Mc::Union{Nothing, Float64}: [optional], location for Mc, must be between front and back boundaries of dike box, if not set, default value to 0.0, but not used
Mb::Union{Nothing, Float64}: value for dike/magma-accommodated extension, between 0 and 1, in the back of the box, for phase dike
PhaseID::Union{Nothing, Int64}: Phase ID
PhaseTransID::Union{Nothing, Int64}: Phase transition ID
Structure that contains the LaMEM Model Setup and Advection options
msetup::String: Setup type - can be geom (phases are assigned from geometric primitives), files (from julia input), polygons (from geomIO input, which requires poly_file to be specified)
rand_noise::Int64: add random noise to the particle location
rand_noiseGP::Int64: random noise flag, subsequently applied to geometric primitives
bg_phase::Int64: background phase ID
save_mark::Int64: save marker to disk flag
mark_load_file::String: marker input file (extension is .xxxxxxxx.dat), if using msetup=files
mark_save_file::String: marker output file (extension is .xxxxxxxx.dat)
poly_file::String: polygon geometry file (redundant), if using msetup=polygons
temp_file::String: initial temperature file (redundant), if not set on markers
advect::String: advection scheme; options=none (no advection); basic (Euler classical implementation [default]); Euler (Euler explicit in time); rk2 (Runge-Kutta 2nd order in space)
interp::String: velocity interpolation scheme; options = stag (trilinear interpolation from FDSTAG points), minmod ( MINMOD interpolation to nodes, trilinear interpolation to markers + correction), stagp ( STAG_P empirical approach by T. Gerya)
mark_ctrl::String: marker control type; options are subgrid (default; marker control enforced over fine scale grid), none (none), basic (AVD for cells + corner insertion), and avd (pure AVD for all control volumes)
nmark_lim::Vector{Int64}: min/max number per cell (marker control)
Structure that contains the LaMEM passive tracers parameters.
Passive_Tracer::Int64: activate passive tracers?"
PassiveTracer_Box::Union{Nothing, Vector{Float64}}: Dimensions of box in which we distribute passive tracers [Left, Right, Front, Back, Bottom, Top]
PassiveTracer_Resolution::Vector{Int64}: The number of passive tracers in every direction
PassiveTracer_ActiveType::Union{Nothing, String}: Under which condition are they activated? ["Always"], "Melt_Fraction", "Temperature", "Pressure", "Time"
PassiveTracer_ActiveValue::Union{Nothing, Float64}: The value to activate them
BoxVicinity::Union{Nothing, Int64}: 1: only check particles in the vicinity of the box boundaries (2: in all directions)
Parameter_transition::Union{Nothing, String}: [T = Temperature, P = Pressure, Depth = z-coord, X=x-coord, Y=y-coord, APS = accumulated plastic strain, MeltFraction, t = time] parameter that triggers the phase transition
ConstantValue::Union{Nothing, Float64}: Value of the parameter [unit of T,P,z, APS]
number_phases::Union{Nothing, Int64}: The number of involved phases [default=1]
PhaseAbove::Union{Nothing, Vector{Int64}}: Above the chosen value the phase is 1, below it, the value is PhaseBelow
PhaseBelow::Union{Nothing, Vector{Int64}}: Below the chosen value the phase is PhaseBelow, above it, the value is 1
PhaseInside::Union{Nothing, Vector{Int64}}: Phase within the box [use -1 if you don't want to change the phase inside the box]
PhaseOutside::Union{Nothing, Vector{Int64}}: Phase outside the box [use -1 if you don't want to change the phase outside the box. If combined with OutsideToInside, all phases that come in are set to PhaseInside]
PhaseDirection::Union{Nothing, String}: [BothWays=default; BelowToAbove; AboveToBelow] Direction in which transition works
ResetParam::Union{Nothing, String}: [APS] Parameter to reset on particles below PT or within box
PTBox_TempType::Union{Nothing, String}: # Temperature condition witin the box [none, constant, linear, halfspace]
PTBox_topTemp::Union{Nothing, Float64}: Temp @ top of box [for linear & halfspace]
PTBox_botTemp::Union{Nothing, Float64}: Temp @ bottom of box [for linear & halfspace]
PTBox_thermalAge::Union{Nothing, Float64}: Thermal age, usually in geo-units [Myrs] [only in case of halfspace]
PTBox_cstTemp::Union{Nothing, Float64}: Temp within box [only for constant T]
v_box::Union{Nothing, Float64}: [optional] only for NotInAirBox, velocity with which box moves in cm/yr
t0_box::Union{Nothing, Float64}: [optional] beginning time of movemen in Myr
t1_box::Union{Nothing, Float64}: [optional] end time of movement in Myr
FSSA::Float64: free surface stabilization parameter [0 - 1]; The value has to be between 0 and 1
FSSA_allVel::Int64: free surface stabilization parameter applied to all velocity components? Default is yes; if not it is only applied to the z-component
Adiabatic_Heat::Float64: Adiabatic Heating activation flag and efficiency. 0.0 - 1.0
act_temp_diff::Int64: temperature diffusion activation flag
act_therm_exp::Int64: thermal expansion activation flag
act_steady_temp::Int64: steady-state temperature initial guess activation flag
steady_temp_t::Float64: time for (quasi-)steady-state temperature initial guess
nstep_steady::Int64: number of steps for (quasi-)steady-state temperature initial guess (default = 1)
act_heat_rech::Int64: recharge heat in anomalous bodies after (quasi-)steady-state temperature initial guess (=2: recharge after every diffusion step of initial guess)
init_lith_pres::Int64: sets initial pressure to be the lithostatic pressure (stabilizes compressible setups in the first steps)
init_guess::Int64: create an initial guess step (using constant viscosity eta_ref before starting the simulation
p_litho_visc::Int64: use lithostatic instead of dynamic pressure for creep laws
p_litho_plast::Int64: use lithostatic pressure for plasticity
p_lim_plast::Int64: limit pressure at first iteration for plasticity
p_shift::Int64: add a constant value [MPa] to the total pressure field, before evaluating plasticity (e.g., when the domain is located @ some depth within the crust)
act_p_shift::Int64: pressure shift activation flag (enforce zero pressure on average in the top cell layer); note: this overwrites p_shift above!
eta_min::Float64: viscosity lower bound [Pas]
eta_max::Float64: viscosity upper limit [Pas]
eta_ref::Float64: Reference viscosity (used for the initial guess) [Pas]
T_ref::Float64: Reference temperature [C]
RUGC::Float64: universal gas constant (you need to change this only for non-dimensional setups)
min_cohes::Float64: cohesion lower bound [Pa]
min_fric::Float64: friction lower bound [degree]
tau_ult::Float64: ultimate yield stress [Pa]
rho_fluid::Float64: fluid density for depth-dependent density model
gw_level_type::String: ground water level type for pore pressure computation (see below)
gw_level::Float64: ground water level at the free surface (if defined)
biot::Float64: Biot pressure parameter
get_permea::Float64: effective permeability computation activation flag
rescal::Float64: stencil rescaling flag (for internal constraints, for example while computing permeability)
mfmax::Float64: maximum melt fraction affecting viscosity reduction
lmaxit::Int64: maximum number of local rheology iterations
lrtol::Float64: local rheology iterations relative tolerance
act_dike::Int64: dike activation flag (additonal term in divergence)
useTk::Int64: switch to use T-dependent conductivity, 0: not active
dikeHeat::Int64: switch to use Behn & Ito heat source in the dike
adiabatic_gradient::Float64: Adiabatic gradient in combination with Behn & Ito dike
Compute_velocity_gradient::Int64: compute the velocity gradient tensor 1: active, 0: not active. If active, it automatically activates the output in the .pvd file
Phasetrans::Int64: Activate Phase Transitions on Particles or not, 0: not.
Passive_Tracer::Int64: Activate Passive Tracers or not?
SolverType::String: solver employed ["direct" or "multigrid"]
DirectSolver::String: mumps/superlu_dist/pastix/umfpack (requires these external PETSc packages to be installed!)
DirectPenalty::Float64: penalty parameter [employed if we use a direct solver]
MGLevels::Int64: number of MG levels [default=3]
MGSweeps::Int64: number of MG smoothening steps per level [default=10]
MGSmoother::String: type of smoothener used [chebyshev or jacobi]
MGJacobiDamp::Float64: Dampening parameter [only employed for Jacobi smoothener; default=0.6]
MGCoarseSolver::String: coarse grid solver if using multigrid ["direct" / "mumps" / "superlu_dist" or "redundant" - more options specifiable through the command-line options -crs_ksp_type & -crs_pc_type]
MGRedundantNum::Int64: How many times do we copy the coarse grid? [only employed for redundant solver; default is 4]
MGRedundantSolver::String: The coarse grid solver for each of the redundant solves [only employed for redundant; options are "mumps"/"superlu_dist" with default "superlu_dist"]
PETSc_options::Vector{String}: List with (optional) PETSc options
Structure that contains the LaMEM Model Setup and Advection options
msetup::String: Setup type - can be geom (phases are assigned from geometric primitives), files (from julia input), polygons (from geomIO input, which requires poly_file to be specified)
rand_noise::Int64: add random noise to the particle location
rand_noiseGP::Int64: random noise flag, subsequently applied to geometric primitives
bg_phase::Int64: background phase ID
save_mark::Int64: save marker to disk flag
mark_load_file::String: marker input file (extension is .xxxxxxxx.dat), if using msetup=files
mark_save_file::String: marker output file (extension is .xxxxxxxx.dat)
poly_file::String: polygon geometry file (redundant), if using msetup=polygons
temp_file::String: initial temperature file (redundant), if not set on markers
advect::String: advection scheme; options=none (no advection); basic (Euler classical implementation [default]); Euler (Euler explicit in time); rk2 (Runge-Kutta 2nd order in space)
interp::String: velocity interpolation scheme; options = stag (trilinear interpolation from FDSTAG points), minmod ( MINMOD interpolation to nodes, trilinear interpolation to markers + correction), stagp ( STAG_P empirical approach by T. Gerya)
mark_ctrl::String: marker control type; options are subgrid (default; marker control enforced over fine scale grid), none (none), basic (AVD for cells + corner insertion), and avd (pure AVD for all control volumes)
nmark_lim::Vector{Int64}: min/max number per cell (marker control)
Structure that contains the LaMEM passive tracers parameters.
Passive_Tracer::Int64: activate passive tracers?"
PassiveTracer_Box::Union{Nothing, Vector{Float64}}: Dimensions of box in which we distribute passive tracers [Left, Right, Front, Back, Bottom, Top]
PassiveTracer_Resolution::Vector{Int64}: The number of passive tracers in every direction
PassiveTracer_ActiveType::Union{Nothing, String}: Under which condition are they activated? ["Always"], "Melt_Fraction", "Temperature", "Pressure", "Time"
PassiveTracer_ActiveValue::Union{Nothing, Float64}: The value to activate them
BoxVicinity::Union{Nothing, Int64}: 1: only check particles in the vicinity of the box boundaries (2: in all directions)
Parameter_transition::Union{Nothing, String}: [T = Temperature, P = Pressure, Depth = z-coord, X=x-coord, Y=y-coord, APS = accumulated plastic strain, MeltFraction, t = time] parameter that triggers the phase transition
ConstantValue::Union{Nothing, Float64}: Value of the parameter [unit of T,P,z, APS]
number_phases::Union{Nothing, Int64}: The number of involved phases [default=1]
PhaseAbove::Union{Nothing, Vector{Int64}}: Above the chosen value the phase is 1, below it, the value is PhaseBelow
PhaseBelow::Union{Nothing, Vector{Int64}}: Below the chosen value the phase is PhaseBelow, above it, the value is 1
PhaseInside::Union{Nothing, Vector{Int64}}: Phase within the box [use -1 if you don't want to change the phase inside the box]
PhaseOutside::Union{Nothing, Vector{Int64}}: Phase outside the box [use -1 if you don't want to change the phase outside the box. If combined with OutsideToInside, all phases that come in are set to PhaseInside]
PhaseDirection::Union{Nothing, String}: [BothWays=default; BelowToAbove; AboveToBelow] Direction in which transition works
ResetParam::Union{Nothing, String}: [APS] Parameter to reset on particles below PT or within box
PTBox_TempType::Union{Nothing, String}: # Temperature condition witin the box [none, constant, linear, halfspace]
PTBox_topTemp::Union{Nothing, Float64}: Temp @ top of box [for linear & halfspace]
PTBox_botTemp::Union{Nothing, Float64}: Temp @ bottom of box [for linear & halfspace]
PTBox_thermalAge::Union{Nothing, Float64}: Thermal age, usually in geo-units [Myrs] [only in case of halfspace]
PTBox_cstTemp::Union{Nothing, Float64}: Temp within box [only for constant T]
v_box::Union{Nothing, Float64}: [optional] only for NotInAirBox, velocity with which box moves in cm/yr
t0_box::Union{Nothing, Float64}: [optional] beginning time of movemen in Myr
t1_box::Union{Nothing, Float64}: [optional] end time of movement in Myr
FSSA::Float64: free surface stabilization parameter [0 - 1]; The value has to be between 0 and 1
FSSA_allVel::Int64: free surface stabilization parameter applied to all velocity components? Default is yes; if not it is only applied to the z-component
Adiabatic_Heat::Float64: Adiabatic Heating activation flag and efficiency. 0.0 - 1.0
act_temp_diff::Int64: temperature diffusion activation flag
act_therm_exp::Int64: thermal expansion activation flag
act_steady_temp::Int64: steady-state temperature initial guess activation flag
steady_temp_t::Float64: time for (quasi-)steady-state temperature initial guess
nstep_steady::Int64: number of steps for (quasi-)steady-state temperature initial guess (default = 1)
act_heat_rech::Int64: recharge heat in anomalous bodies after (quasi-)steady-state temperature initial guess (=2: recharge after every diffusion step of initial guess)
init_lith_pres::Int64: sets initial pressure to be the lithostatic pressure (stabilizes compressible setups in the first steps)
init_guess::Int64: create an initial guess step (using constant viscosity eta_ref before starting the simulation
p_litho_visc::Int64: use lithostatic instead of dynamic pressure for creep laws
p_litho_plast::Int64: use lithostatic pressure for plasticity
p_lim_plast::Int64: limit pressure at first iteration for plasticity
p_shift::Int64: add a constant value [MPa] to the total pressure field, before evaluating plasticity (e.g., when the domain is located @ some depth within the crust)
act_p_shift::Int64: pressure shift activation flag (enforce zero pressure on average in the top cell layer); note: this overwrites p_shift above!
eta_min::Float64: viscosity lower bound [Pas]
eta_max::Float64: viscosity upper limit [Pas]
eta_ref::Float64: Reference viscosity (used for the initial guess) [Pas]
T_ref::Float64: Reference temperature [C]
RUGC::Float64: universal gas constant (you need to change this only for non-dimensional setups)
min_cohes::Float64: cohesion lower bound [Pa]
min_fric::Float64: friction lower bound [degree]
tau_ult::Float64: ultimate yield stress [Pa]
rho_fluid::Float64: fluid density for depth-dependent density model
gw_level_type::String: ground water level type for pore pressure computation (see below)
gw_level::Float64: ground water level at the free surface (if defined)
biot::Float64: Biot pressure parameter
get_permea::Float64: effective permeability computation activation flag
rescal::Float64: stencil rescaling flag (for internal constraints, for example while computing permeability)
mfmax::Float64: maximum melt fraction affecting viscosity reduction
lmaxit::Int64: maximum number of local rheology iterations
lrtol::Float64: local rheology iterations relative tolerance
act_dike::Int64: dike activation flag (additonal term in divergence)
useTk::Int64: switch to use T-dependent conductivity, 0: not active
dikeHeat::Int64: switch to use Behn & Ito heat source in the dike
adiabatic_gradient::Float64: Adiabatic gradient in combination with Behn & Ito dike
Compute_velocity_gradient::Int64: compute the velocity gradient tensor 1: active, 0: not active. If active, it automatically activates the output in the .pvd file
Phasetrans::Int64: Activate Phase Transitions on Particles or not, 0: not.
Passive_Tracer::Int64: Activate Passive Tracers or not?
SolverType::String: solver employed ["direct" or "multigrid"]
DirectSolver::String: mumps/superlu_dist/pastix/umfpack (requires these external PETSc packages to be installed!)
DirectPenalty::Float64: penalty parameter [employed if we use a direct solver]
MGLevels::Int64: number of MG levels [default=3]
MGSweeps::Int64: number of MG smoothening steps per level [default=10]
MGSmoother::String: type of smoothener used [chebyshev or jacobi]
MGJacobiDamp::Float64: Dampening parameter [only employed for Jacobi smoothener; default=0.6]
MGCoarseSolver::String: coarse grid solver if using multigrid ["direct" / "mumps" / "superlu_dist" or "redundant" - more options specifiable through the command-line options -crs_ksp_type & -crs_pc_type]
MGRedundantNum::Int64: How many times do we copy the coarse grid? [only employed for redundant solver; default is 4]
MGRedundantSolver::String: The coarse grid solver for each of the redundant solves [only employed for redundant; options are "mumps"/"superlu_dist" with default "superlu_dist"]
PETSc_options::Vector{String}: List with (optional) PETSc options
Adds a box with phase & temperature structure to a 3D model setup. This simplifies creating model geometries in geodynamic models See the documentation of the GMG routine for the full options.
Adds a box with phase & temperature structure to a 3D model setup. This simplifies creating model geometries in geodynamic models See the documentation of the GMG routine for the full options.
AddCylinder!(model::Model; # required input
base=Tuple{3}, cap=Tuple{3}, radius=Tuple{1}, # center and radius of the sphere
phase = ConstantPhase(1), # Sets the phase number(s) in the sphere
- T=nothing ) # Sets the thermal structure (various fucntions are available)
AddEllipsoid!(model::Model; # required input
cen=Tuple{3}, axes=Tuple{3}, # center and semi-axes of the ellpsoid
Origin=nothing, StrikeAngle=0, DipAngle=0, # origin & dip/strike
phase = ConstantPhase(1), # Sets the phase number(s) in the box
- T=nothing )
Adds a layer with phase & temperature structure to a 3D model setup. This simplifies creating model geometries in geodynamic models See the documentation of the GMG routine for the full options.
This reads passive tracers with ID from a LaMEM simulation specified by model, and returns a named tuple with the temporal evolution of these passive tracers. We return x,y,z coordinates and all fields specified in FileName for particles number ID.
This updates the default parameters depending on some of the input parameters. If you activate passive tracers, for example, it will also activate output for that
Adds a layer with phase & temperature structure to a 3D model setup. This simplifies creating model geometries in geodynamic models See the documentation of the GMG routine for the full options.
This reads passive tracers with ID from a LaMEM simulation specified by model, and returns a named tuple with the temporal evolution of these passive tracers. We return x,y,z coordinates and all fields specified in FileName for particles number ID.
This updates the default parameters depending on some of the input parameters. If you activate passive tracers, for example, it will also activate output for that
This replaces a phase within a LaMEM Model Setup model with phase_new either based on its Name or ID. Note that it is expected that only one such phase is present in the current setup.
This replaces a phase within a LaMEM Model Setup model with phase_new either based on its Name or ID. Note that it is expected that only one such phase is present in the current setup.
This starts a LaMEM simulation, for using the parameter file ParamFile on cores number of cores. Optional additional command-line parameters can be specified with args.
Example:
You can call LaMEM with:
julia> using LaMEM
julia> ParamFile="../../input_models/BuildInSetups/FallingBlock_Multigrid.dat";
julia> run_lamem(ParamFile)
Do the same on 2 cores with a command-line argument as:
If you, for some reason, do not want to run LaMEM through julia but instead directly from the terminal or powershell, you will have to add the required dynamic libraries and executables. Do this with:
The downloaded LaMEM binaries can also be called from outside julia (directly from the terminal). In that case, you will need to set load correct dynamic libraries (such as PETSc) and call the correct binaries.