List functions
These are all the functions that are provided for the LaMEM Julia Setup interface
LaMEM.LaMEM_Model.BCBlock Type
LaMEM boundary condition `BCBlock` objectnpath::Int64: Number of path points of Bezier curve (path-points only!)path_dim::Int64: Path dimension: 2 = x-y plane (default), 3 = full 3D (path then also moves bot/top z-coordinates)theta::Vector{Float64}: # Orientation angles at path points (counter-clockwise positive)time::Vector{Float64}: Times at path pointspath::Vector{Float64}: Path points coordinates (x-y pairs if path_dim=2, x-y-z triplets if path_dim=3)npoly::Int64: Number of polygon verticespoly::Vector{Float64}: Polygon x-y coordinates at initial timebot::Float64: Polygon bottom coordinatetop::Float64: Polygon top coordinate
LaMEM.LaMEM_Model.BoundaryConditions Type
BoundaryConditionsStructure 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 flagtemp_top::Float64: Constant temperature on the top boundarytemp_bot::Float64: Constant temperature on the bottom boundaryexx_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 intervaleyy_num_periods::Int64: number of intervals of constant background strain rate (y-axis)eyy_time_delims::Vector{Float64}: time delimiters for eyy strain rate intervals (one less than number of intervals)eyy_strain_rates::Vector{Float64}: background strain rates in yy-direction for each intervalexy_num_periods::Int64: number of intervals of constant background simple shear strain rate (xy-plane)exy_time_delims::Vector{Float64}: time delimiters for exy strain rate intervalsexy_strain_rates::Vector{Float64}: background simple shear strain rates in xy-direction for each intervalexz_num_periods::Int64: number of intervals of constant background simple shear strain rate (xz-plane)exz_time_delims::Vector{Float64}: time delimiters for exz strain rate intervalsexz_strain_rates::Vector{Float64}: background simple shear strain rates in xz-direction for each intervaleyz_num_periods::Int64: number of intervals of constant background simple shear strain rate (yz-plane)eyz_time_delims::Vector{Float64}: time delimiters for eyz strain rate intervalseyz_strain_rates::Vector{Float64}: background simple shear strain rates in yz-direction for each intervalbg_ref_point::Vector{Float64}: background strain rate reference point (fixed)VelocityBoxes::Vector{VelocityBox}: List of added velocity boxesBCBlocks::Vector{BCBlock}: List of added Bezier blocksVelCylinders::Vector{VelCylinder}: List of added velocity cylindersbvel_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 velocitybvel_bot::Union{Nothing, Float64}: Bottom coordinate of inflow windowbvel_top::Union{Nothing, Float64}: Top coordinate of inflow windowvelin_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 velin_num_periods>1)bvel_velout::Union{Nothing, Float64}: outflow velocity (if not specified, computed from mass balance)bvel_relax_d::Union{Nothing, Float64}: vert.distance from bvel_bot and bvel_top over which velocity is reduced linearlybvel_velbot::Union{Nothing, Int64}: bottom inflow velocity for use with bvel_face=CompensatingInflowbvel_veltop::Union{Nothing, Int64}: top inflow velocity for use with bvel_face=CompensatingInflowbvel_temperature_inflow::Union{Nothing, String}: bvel_temperature_inflow: Thermal age of the plate, which can be constant if set to Fixed_thermal_age or Constant_T_inflow (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 wellbvel_temperature_mantle::Union{Nothing, Float64}: In dimensional unit. Temperature of the mantlebvel_temperature_top::Union{Nothing, Float64}: In dimensional unit. temperature of the topbvel_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 topbvel_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 ]open_bot_bound::Union{Nothing, Int64}: # Permeable lower boundary flagpermeable_phase_inflow::Union{Nothing, Int64}: Phase of the inflow material from the bottom (The temperature of the inflow phase it is the same of the bottom boundary) in case of open_bot_bound=1fix_phase::Union{Nothing, Int64}: fixed phase (no-flow condition)fix_cell::Union{Nothing, Int64}: fixed cells (no-flow condition)fix_cell_file::Union{Nothing, String}: fixed cells input file (extension is .xxxxxxxx.dat)temp_bot_num_periods::Union{Nothing, Int64}: How many periods with different temp_bot do we have?temp_bot_time_delim::Union{Nothing, Vector{Float64}}: At which time do we switch from one to the next period?Plume_InflowBoundary::Union{Nothing, Int64}: # have a plume-like inflow boundary @ bottomPlume_Type::Union{Nothing, String}: Type of plume inflow boundary."Inflow_type"or"Pressure_type"(circular) or"Permeable_Type"which combines the open bot boundary with the plume boundary condition (the option herein listed overwrites open_bot, so do not activate that)
Plume_Dimension::Union{Nothing, String}: 2D or 3D (circular)Plume_areaFrac::Union{Nothing, Float64}: how much of the plume is actually in the model. This usually 1 (default) but lower if the plume is in a corner of a symmetric setup and matters for the outflowPlume_Phase::Union{Nothing, Int64}: phase of plume materialPlume_Depth::Union{Nothing, Float64}: # depth of provenience of the plume (i.e. how far from the bottom of the model the plume source is)Plume_Mantle_Phase::Union{Nothing, Int64}: # Astenosphere phase (if the inflow occurs outside the plume radius)Plume_Temperature::Union{Nothing, Float64}: # temperature of inflow plumePlume_Inflow_Velocity::Union{Nothing, Float64}: # Inflow velocity (not required if Pressure_Type) in cm/year if using GEOunitsPlume_VelocityType::Union{Nothing, String}:"Gaussian"or"Poiseuille"Plume_Center::Union{Nothing, Vector{Float64}}: # [X,Y] of center (2nd only in case of 3D plume)Plume_Radius::Union{Nothing, Float64}: # Width/Radius of plumePlume_Phase_Mantle::Union{Nothing, Int64}: # Inflow phase. If the velocity happens to be positive in the domain, the inflow material has a constant phase and the temperature of the bottompres_top::Union{Nothing, Float64}: Pressure on the top boundarypres_bot::Union{Nothing, Float64}: Pressure on the bottom boundaryinit_pres::Union{Nothing, Int64}: pressure initial guess flag; linear profile between pres_top and pres_bot in the unconstrained cellsinit_temp::Union{Nothing, Int64}: temperature initial guess flag; linear profile between temp_top and temp_bot
LaMEM.LaMEM_Model.Dike Type
Defines the properties related to inserting dikesID::Int64: Material phase IDMf::Float64: value for dike/magma- accommodated extension, between 0 and 1, in the front of the box, for phase dikeMc::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 usedy_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 usedMb::Union{Nothing, Float64}: value for dike/magma-accommodated extension, between 0 and 1, in the back of the box, for phase dikePhaseID::Union{Nothing, Int64}: Phase IDPhaseTransID::Union{Nothing, Int64}: Phase transition ID
LaMEM.LaMEM_Model.FreeSurface Type
Structure that contains the LaMEM free surface information.surf_use::Int64: Free surface activation flagsurf_corr_phase::Int64: air phase ratio correction flag (phases in an element that contains are modified based on the surface position)surf_level::Union{Nothing, Float64}: initial level of the free surfacesurf_air_phase::Union{Nothing, Int64}: phase ID of sticky air layersurf_max_angle::Float64: maximum angle with horizon (smoothed if larger)surf_topo_file::String: initial topography file (redundant)erosion_model::Int64: erosion model [0-none (default), 1-infinitely fast, 2-prescribed rate with given level]er_num_phases::Int64: number of erosion phaseser_time_delims::Vector{Float64}: erosion time delimiters (one less than number)er_rates::Vector{Float64}: constant erosion rates in different time periodser_levels::Vector{Int64}: levels above which we apply constant erosion rates in different time periodser_x_min::Union{Nothing, Vector{Float64}}: [only used if erosion_model=3] minimum x-coordinates of the spatially limited erosion zone, per erosion phaseer_x_max::Union{Nothing, Vector{Float64}}: [only used if erosion_model=3] maximum x-coordinates of the spatially limited erosion zone, per erosion phasetopo_diff::Int64: activate topographic diffusion of the free surface [0-none (default), 1-active]topo_diffusivity::Float64: topographic diffusivity used if topo_diff=1sediment_model::Int64: sedimentation model [0-none (dafault), 1-prescribed rate with given level, 2-cont. margin]sed_num_layers::Int64: number of sediment layerssed_time_delims::Vector{Float64}: sediment layers time delimiters (one less than number)sed_rates::Vector{Float64}: sediment rates in different time periodssed_levels::Vector{Float64}: levels below which we apply constant sediment rates in different time periodssed_phases::Vector{Int64}: sediment layers phase numbers in different time periodsmarginO::Vector{Float64}: lateral coordinates of continental margin - originmarginE::Vector{Float64}: lateral coordinates of continental margin - 2nd pointhUp::Float64: up dip thickness of sediment cover (onshore)hDown::Float64: down dip thickness of sediment cover (off shore)dTrans::Float64: half of transition zoneTopography::Union{Nothing, GeophysicalModelGenerator.CartData}: Topography grid
LaMEM.LaMEM_Model.GeomBox Type
LaMEM geometric primitive `Box` objectphase::Int64: phasebounds::Vector{Float64}: box bound coordinates:left,right,front,back,bottom,topTemperature::Union{Nothing, String}: optional: Temperature structure. possibilities: [constant, linear, halfspace]cstTemp::Union{Nothing, Float64}: required in case of [constant]: temperature value [in Celcius in case of GEO units]topTemp::Union{Nothing, Float64}: required in case of [linear,halfspace]: temperature @ top [in Celcius in case of GEO units]botTemp::Union{Nothing, Float64}: required in case of [linear,halfspace]: temperature @ top [in Celcius in case of GEO units]thermalAge::Union{Nothing, Float64}: required in case of [halfspace]: thermal age of lithosphere [in Myrs if GEO units are used]
LaMEM.LaMEM_Model.GeomCylinder Type
LaMEM geometric primitive `Cylinder` objectphase::Int64: phaseradius::Float64: radius of cylinderbase::Vector{Float64}: center of base of cylindercap::Vector{Float64}: center of cap of cylinderTemperature::Union{Nothing, String}: optional: Temperature structure. possibilities: [constant]cstTemp::Union{Nothing, Float64}: required in case of [constant]: temperature value [in Celcius in case of GEO units]
LaMEM.LaMEM_Model.GeomEllipsoid Type
LaMEM geometric primitive `Ellipsoid` objectphase::Int64: phaseaxes::Vector{Float64}: semi-axes of ellipsoid inx,yandzcenter::Vector{Float64}: center of sphereTemperature::Union{Nothing, String}: optional: Temperature of the sphere. possibilities: [constant, or nothing]cstTemp::Union{Nothing, Float64}: required in case of [constant]: temperature value [in Celcius in case of GEO units]
LaMEM.LaMEM_Model.GeomHex Type
LaMEM geometric primitive `Hex` object to define hexahedral elementsphase::Int64: phasecoord::Vector{Float64}:x-y-zcoordinates for each of 8 nodes (24 parameters) (counter)-clockwise for an arbitrary face, followed by the opposite face
LaMEM.LaMEM_Model.GeomLayer Type
LaMEM geometric primitive `Layer` objectphase::Int64: phasetop::Float64: top of layerbottom::Float64: bottom of layercosine::Union{Nothing, Int64}: optional: add a cosine perturbation on top of the interface (if 1)wavelength::Union{Nothing, Float64}: required if cosine: wavelength in x-directionamplitude::Union{Nothing, Float64}: required if cosine: amplitude of perturbationTemperature::Union{Nothing, String}: optional: Temperature structure. possibilities: [constant, linear, halfspace]cstTemp::Union{Nothing, Float64}: required in case of [constant]: temperature value [in Celcius in case of GEO units]topTemp::Union{Nothing, Float64}: required in case of [linear,halfspace]: temperature @ top [in Celcius in case of GEO units]botTemp::Union{Nothing, Float64}: required in case of [linear,halfspace]: temperature @ top [in Celcius in case of GEO units]thermalAge::Union{Nothing, Float64}: required in case of [halfspace]: thermal age of lithosphere [in Myrs if GEO units are used]
LaMEM.LaMEM_Model.GeomRidgeSeg Type
LaMEM geometric primitive `RidgeSeg` objectphase::Int64: phasebounds::Vector{Float64}: box bound coordinates:left,right,front,back,bottom,topridgeseg_x::Vector{Float64}: coordinate order: left, right [can be different for oblique ridge]ridgeseg_y::Vector{Float64}: coordinate order: front, back [can be different for oblique ridge]Temperature::String: initial temperature structure [ridge must be set tohalfspace_age–> setTemp=4]topTemp::Float64: required in case of [linear,halfspace]: temperature @ top [in Celcius in case of GEO units]botTemp::Float64: required in case of [linear,halfspace]: temperature @ top [in Celcius in case of GEO units]age0::Float64: minimum age of seafloor at ridge [inMyrin case of GEO units]maxAge::Union{Nothing, Float64}: [optional] parameter that indicates the maximum thermal age of a platev_spread::Union{Nothing, Float64}: [optional] parameter that indicates the spreading velocity of the plate; if not defined it uses bvel_velin specified elsewhere
LaMEM.LaMEM_Model.GeomSphere Type
LaMEM geometric primitive `sphere` objectphase::Int64: phaseradius::Float64: radius of spherecenter::Vector{Float64}: center of sphereTemperature::Union{Nothing, String}: optional: Temperature of the sphere. possibilities: [constant, or nothing]cstTemp::Union{Nothing, Float64}: required in case of [constant]: temperature value [in Celcius in case of GEO units]
LaMEM.LaMEM_Model.Grid Type
Structure that contains the LaMEM grid informationnmark_x::Int64: number of markers/element in x-directionnmark_y::Int64: number of markers/element in y-directionnmark_z::Int64: number of markers/element in x-directionnel_x::Vector{Int64}: number of elements in x-directionnel_y::Vector{Int64}: number of elements in y-directionnel_z::Vector{Int64}: number of elements in z-directioncoord_x::Vector{Float64}: coordinates in x-directioncoord_y::Vector{Float64}: coordinates in y-directioncoord_z::Vector{Float64}: coordinates in z-directionnseg_x::Int64: number of segments in x-direction (if we employ variable grid spacing in x-direction)nseg_y::Int64: number of segments in y-direction (if we employ variable grid spacing in y-direction)nseg_z::Int64: number of segments in z-direction (if we employ variable grid spacing in z-direction)bias_x::Vector{Float64}: bias in x-direction (if we employ variable grid spacing in x-direction)bias_y::Vector{Float64}: bias in y-direction (if we employ variable grid spacing in y-direction)bias_z::Vector{Float64}: bias in z-direction (if we employ variable grid spacing in z-direction)Grid::GeophysicalModelGenerator.LaMEM_grid: Contains the LaMEM Grid objectPhases::Array{Int32}: Phases; 3D phase informationTemp::Array{Float64}: Temp; 3D phase informationAPS::Array{Float64}: APS; accumulated plastic strain
Example 1
julia> d=LaMEM.Grid(coord_x=[0.0, 0.7, 0.8, 1.0], bias_x=[0.3,1.0,3.0], nel_x=[10,4,2])
LaMEM grid with 1D refinement:
nel : ([10, 4, 2], [16], [16])
marker/cell : (3, 3, 3)
x ϵ [0.0, 0.7, 0.8, 1.0], bias=[0.3, 1.0, 3.0], nseg=3, Δmin=0.025000000000000022, Δmax=0.1499999999999999
y ϵ [-10.0 : 0.0]
z ϵ [-10.0 : 0.0]Example 2
julia> d=LaMEM.Grid(nel=(10,20))
LaMEM grid with constant Δ:
nel : ([10], [1], [20])
marker/cell : (3, 3, 3)
x ϵ [-10.0 : 10.0]
y ϵ [-10.0 : 0.0]
z ϵ [-10.0 : 0.0]LaMEM.LaMEM_Model.Materials Type
Structure that contains the material properties in the current simulationPhases::Vector{Phase}: Different Materials implementedSofteningLaws::Vector{Softening}: Softening laws implementedPhaseTransitions::Vector{PhaseTransition}: Internal Phase Transitions (that change the ID of markers) implementedDikes::Vector{Dike}: Dikes implemented (mostly for MOR simulations)PhaseAggregates::Vector{PhaseAggregate}: Phase aggregates (combines different phases such as upper_lower crust into one for visualization purposes)
LaMEM.LaMEM_Model.Model Type
ModelStructure that holds all the information to create a LaMEM input file
Scaling::Scaling: Scaling parametersGrid::Grid: LaMEM GridTime::Any: Time optionsFreeSurface::Any: Free surface optionsBoundaryConditions::Any: Boundary conditionsSolutionParams::Any: Global solution parametersSolver::Any: Solver options and optional PETSc optionsModelSetup::Any: Model setupOutput::Any: Output optionsPassiveTracers::Any: Passive tracersMaterials::Any: Material parameters for each of the phases
LaMEM.LaMEM_Model.Model Method
Model(args...)Allow to define a model setup by specifying some of the basic objects
Example
julia> d = Model(Grid(nel=(10,1,20)), Scaling(NO_units()))
LaMEM Model setup
|
|-- Scaling : GeoParams.Units.GeoUnits{GeoParams.Units.NONE}
|-- Grid : nel=(10, 1, 20); xϵ(-10.0, 10.0), yϵ(-10.0, 0.0), zϵ(-10.0, 0.0)
|-- Time : nstep_max=50; nstep_out=1; time_end=1.0; dt=0.05
|-- Boundary conditions : noslip=[0, 0, 0, 0, 0, 0]
|-- Solution parameters :
|-- Solver options : direct solver; superlu_dist; penalty term=10000.0
|-- Model setup options : Type=geom;
|-- Output options : filename=output; pvd=1; avd=0; surf=0
|-- Materials : 1 phases;LaMEM.LaMEM_Model.Model Method
Model(;
Scaling=Scaling(GEO_units()),
Grid=Grid(),
Time=Time(),
FreeSurface=FreeSurface(),
BoundaryConditions=BoundaryConditions(),
SolutionParams=SolutionParams(),
Solver=Solver(),
ModelSetup=ModelSetup(),
Output=Output(),
PassiveTracers=PassiveTracers(),
Materials=Materials()
)Creates a LaMEM Model setup.
Scaling::ScalingGrid::GridTime::AnyFreeSurface::AnyBoundaryConditions::AnySolutionParams::AnySolver::AnyModelSetup::AnyOutput::AnyPassiveTracers::AnyMaterials::Any
LaMEM.LaMEM_Model.ModelSetup Type
Structure that contains the LaMEM Model Setup and Advection optionsmsetup::String: Setup type - can begeom(phases are assigned from geometric primitives, usingadd_geom!(model, ...)),files(from julia input),polygons(from geomIO input, which requirespoly_fileto be specified)rand_noise::Int64: add random noise to the particle locationrand_noiseGP::Int64: random noise flag, subsequently applied to geometric primitivesbg_phase::Int64: background phase IDsave_mark::Int64: save marker to disk flagmark_load_file::String: marker input file (extension is .xxxxxxxx.dat), if usingmsetup=filesmark_save_file::String: marker output file (extension is .xxxxxxxx.dat)poly_file::String: polygon geometry file (redundant), if usingmsetup=polygonstemp_file::String: initial temperature file (redundant), if not set on markersadvect::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)stagp_a::Float64: STAG_P velocity interpolation parametermark_ctrl::String: marker control type; options aresubgrid(default; marker control enforced over fine scale grid),none(none),basic(AVD for cells + corner insertion), andavd(pure AVD for all control volumes)nmark_lim::Vector{Int64}: min/max number per cell (marker control)nmark_avd::Vector{Int64}: x-y-z AVD refinement factors (avd marker control)nmark_sub::Int64: max number of same phase markers per subcell (subgrid marker control)geom_primitives::Vector: Different geometric primitives that can be selected if wemsetup``=geom; seeGeomSphere`
LaMEM.LaMEM_Model.Multigrid Type
Structure that has info about setting up multigrid for LaMEMnel::Tuple{Int64, Int64, Int64}: Number of elements at the fine levellevels::Int64: Number of levelssmooth::Int64: number of smoothening steps per levelsmooth_jacobi_factor::Float64: factor for jacbi smoothener oer levelsmoother::String: smoother used at every levelcoarse_ksp::String: coarse grid ksp type preonly or fgmrescoarse_pc::String: coarse grid pc type ["superlu_dist", "mumps", "gamg", "telescope","redundant"]coarse_coarse_pc::String: coarse coarse grid solver in case we use redundant or telescope coarse grid solvescoarse_coarse_ksp::String: coarse coarse grid solver in case we use redundant or telescope coarse grid solvescores::Int64: number of cores used in the simulationcores_coarse::Int64: number of cores used for coarse grid solver (in case we use pctelescope)gamg_threshold::Float64: GAMG thresholdgamg_coarse_eq_limit::Int64: GAMG coarse grid equation limitgamg_repartition::Bool: GAMG repartition coarse grids? (default=false)gamg_parallel_coarse::Bool: GAMG parallel coarse grid solver? (default=false)
LaMEM.LaMEM_Model.Output Type
Structure that contains the LaMEM output optionsout_file_name::Any: output file nameout_dir::Any: output directoryparam_file_name::Any: parameter filenamewrite_VTK_setup::Any: write VTK initial model setupout_pvd::Any: activate writing .pvd fileout_phase::Any: dominant phaseout_density::Any: densityout_visc_total::Any: total (viscoelastoplastic) viscosityout_visc_creep::Any: creep viscosityout_velocity::Any: velocityout_pressure::Any: (dynamic) pressureout_tot_press::Any: total pressureout_eff_press::Any: effective pressureout_over_press::Any: out_over_pressout_litho_press::Any: lithospheric pressureout_pore_press::Any: pore pressureout_temperature::Any: temperatureout_dev_stress::Any: deviatoric strain rate tensorout_j2_dev_stress::Any: second invariant of deviatoric stress tensorout_strain_rate::Any: deviatoric strain rate tensorout_j2_strain_rate::Any: second invariant of strain rate tensorout_shmax::Any: sh maxout_ehmax::Any: eh maxout_yield::Any: yield stressout_rel_dif_rate::Any: relative proportion of diffusion creep strainrateout_rel_dis_rate::Any: relative proportion of dislocation creep strainrateout_rel_prl_rate::Any: relative proportion of peierls creep strainrateout_rel_pl_rate::Any: relative proportion of plastic strainrateout_plast_strain::Any: accumulated plastic strainout_plast_dissip::Any: plastic dissipationout_tot_displ::Any: total displacementout_moment_res::Any: momentum residualout_cont_res::Any: continuity residualout_energ_res::Any: energy residualout_melt_fraction::Any: Melt fractionout_fluid_density::Any: fluid densityout_conductivity::Any: conductivityout_vel_gr_tensor::Any: velocity gradient tensorout_surf::Any: activate surface outputout_surf_pvd::Any: activate writing .pvd fileout_surf_velocity::Any: surface velocityout_surf_topography::Any: surface topographyout_surf_amplitude::Any: amplitude of topography (=topo-average(topo))out_mark::Any: activate marker outputout_mark_pvd::Any: activate writing .pvd fileout_avd::Any: activate AVD phase outputout_avd_pvd::Any: activate writing .pvd fileout_avd_ref::Any: AVD grid refinement factorout_ptr::Any: activateout_ptr_ID::Any: ID of the passive tracersout_ptr_phase::Any: phase of the passive tracersout_ptr_Pressure::Any: interpolated pressureout_ptr_Temperature::Any: temperatureout_ptr_APS::Any: accumulated plastic strainout_ptr_MeltFraction::Any: melt fraction computed using P-T of the markerout_ptr_Active::Any: option that highlight the marker that are currently activeout_ptr_Grid_Mf::Any: option that allow to store the melt fraction seen within the cell
LaMEM.LaMEM_Model.PassiveTracers Type
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 directionPassiveTracer_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
LaMEM.LaMEM_Model.Phase Type
Defines the material properties for each of the phasesID::Union{Nothing, Int64}: Material phase IDName::Union{Nothing, String}: Description of the phaserho::Union{Nothing, Float64}: Density [kg/m^3]eta::Union{Nothing, Float64}: Linear viscosity [Pas]visID::Union{Nothing, Int64}: material ID for phase visualization (default is ID)diff_prof::Union{Nothing, String}: Build-in DIFFUSION creep profiles: Example:"Dry__Olivine_diff_creep-Hirth_Kohlstedt_2003"Available build-in diffusion creep rheologies are:- From [Hirth, G. and Kohlstedt D. (2003), Rheology of the upper mantle and the mantle wedge: A view from the experimentalists]:
"Dry_Olivine_diff_creep-Hirth_Kohlstedt_2003""Wet_Olivine_diff_creep-Hirth_Kohlstedt_2003_constant_C_OH""Wet_Olivine_diff_creep-Hirth_Kohlstedt_2003"
- From [Rybacki and Dresen, 2000, JGR]:
"Dry_Plagioclase_RybackiDresen_2000""Wet_Plagioclase_RybackiDresen_2000"
Note that you can always specify your own, by setting
Bd,Ed,Vdaccordingly.disl_prof::Union{Nothing, String}: Build-in DISLOCATION creep profiles: Example:"Granite-Tirel_et_al_2008"Available build-in dislocation creep rheologies are:- From [Ranalli 1995]:
"Dry_Olivine-Ranalli_1995""Wet_Olivine-Ranalli_1995""Wet_Quarzite-Ranalli_1995""Quarzite-Ranalli_1995""Mafic_Granulite-Ranalli_1995""Plagioclase_An75-Ranalli_1995"
- From [Carter and Tsenn (1986). Flow properties of continental lithosphere - page 18]:
"Quartz_Diorite-Hansen_Carter_1982"
- From [J. de Bremond d'Ars et al. Tectonophysics (1999). Hydrothermalism and Diapirism in the Archaean: gravitational instability constrains. - page 5]
"Diabase-Caristan_1982""Tumut_Pond_Serpentinite-Raleigh_Paterson_1965"
- From [Mackwell, Zimmerman & Kohlstedt (1998). High-temperature deformation]:
"Maryland_strong_diabase-Mackwell_et_al_1998"
- From [Ueda et al (PEPI 2008)]:
"Wet_Quarzite-Ueda_et_al_2008"
- From [Huismans et al 2001]:
"Diabase-Huismans_et_al_2001""Granite-Huismans_et_al_2001"
- From [Burg And Podladchikov (1999)]:
"Dry_Upper_Crust-Schmalholz_Kaus_Burg_2009""Weak_Lower_Crust-Schmalholz_Kaus_Burg_2009""Olivine-Burg_Podladchikov_1999"
- From [Rybacki and Dresen, 2000, JGR]:
"Dry_Plagioclase_RybackiDresen_2000""Wet_Plagioclase_RybackiDresen_2000"
- From [Hirth, G. & Kohlstedt (2003), D. Rheology of the upper mantle and the mantle wedge: A view from the experimentalists]:
"Wet_Olivine_disl_creep-Hirth_Kohlstedt_2003""Wet_Olivine_disl_creep-Hirth_Kohlstedt_2003_constant_C_OH""Dry_Olivine_disl_creep-Hirth_Kohlstedt_2003"
- From [SchmalholzKausBurg(2009), Geology (wet olivine)]:
"Wet_Upper_Mantle-Burg_Schmalholz_2008""Granite-Tirel_et_al_2008"
- From [Urai et al.(2008)]:
"Ara_rocksalt-Urai_et_al.(2008)"
- From [Bräuer et al. (2011) Description of the Gorleben site (PART 4): Geotechnical exploration of the Gorleben salt dome - page 126]:
"RockSaltReference_BGRa_class3-Braeumer_et_al_2011"
- From [Mueller and Briegel (1978)]:
"Polycrystalline_Anhydrite-Mueller_and_Briegel(1978)"
Note that you can always specify your own, by setting
Bn,En,Vn, andnaccordingly.peir_prof::Union{Nothing, String}: Build-in PEIERLS creep profiles: example:"Olivine_Peierls-Kameyama_1999"Available profiles:"Olivine_Peierls-Kameyama_1999"
rho_n::Union{Nothing, Float64}: depth-dependent density model parameterrho_c::Union{Nothing, Float64}: depth-dependent density model parameterbeta::Union{Nothing, Float64}: pressure-dependent density model parameterG::Union{Nothing, Float64}: shear modulusKb::Union{Nothing, Float64}: bulk modulusE::Union{Nothing, Float64}: Young's modulusnu::Union{Nothing, Float64}: Poisson's ratioKp::Union{Nothing, Float64}: pressure dependence parameterBd::Union{Nothing, Float64}: DIFFUSION creep pre-exponential constantEd::Union{Nothing, Float64}: activation energyVd::Union{Nothing, Float64}: activation volumeeta0::Union{Nothing, Float64}: POWER LAW reference viscositye0::Union{Nothing, Float64}: reference strain rateBn::Union{Nothing, Float64}: DISLOCATION creep pre-exponential constantEn::Union{Nothing, Float64}: activation energyVn::Union{Nothing, Float64}: activation volumen::Union{Nothing, Float64}: power law exponentBp::Union{Nothing, Float64}: PEIERLS creep pre-exponential constantEp::Union{Nothing, Float64}: activation energyVp::Union{Nothing, Float64}: activation volumetaup::Union{Nothing, Float64}: scaling stressgamma::Union{Nothing, Float64}: approximation parameterq::Union{Nothing, Float64}: stress-dependence parametereta_fk::Union{Nothing, Float64}: reference viscosity for Frank-Kamenetzky viscositygamma_fk::Union{Nothing, Float64}: gamma parameter for Frank-Kamenetzky viscosityTRef_fk::Union{Nothing, Float64}: reference Temperature for Frank-Kamenetzky viscosity (if not set it is 0°C)ch::Union{Nothing, Float64}: cohesionfr::Union{Nothing, Float64}: friction angleeta_st::Union{Nothing, Float64}: stabilization viscosity (default is eta_min)eta_vp::Union{Nothing, Float64}: viscoplastic plasticity regularisation viscosityrp::Union{Nothing, Float64}: pore-pressure ratiochSoftID::Union{Nothing, Int64}: friction softening law IDfrSoftID::Union{Nothing, Int64}: cohesion softening law IDhealID::Union{Nothing, Int64}: healing ID, points to healTau in Softeningalpha::Union{Nothing, Float64}: thermal expansivityCp::Union{Nothing, Float64}: specific heat (capacity), J⋅K−1⋅kg−1k::Union{Nothing, Float64}: thermal conductivityA::Union{Nothing, Float64}: radiogenic heat productionT::Union{Nothing, Float64}: optional temperature to set within the phaseLatent_hx::Union{Nothing, Float64}: optional, used for dike heating, J/kgT_liq::Union{Nothing, Float64}: optional, used for dike heating, liquidus temperature of material, celsiusT_sol::Union{Nothing, Float64}: optional, used for dike heating, solidus temperature of material, celsiusT_Nu::Union{Nothing, Float64}: default value for thermal conductivity boundarynu_k::Union{Nothing, Float64}: optional parameter, Nusselt number for use with conductivityrho_ph::Union{Nothing, String}: name of the phase diagram you want to use (still needs rho to be defined for the initial guess of pressure)rho_ph_dir::Union{Nothing, String}: in case the phase diagram has a different path provide the path (without the name of the actual PD) heremfc::Union{Nothing, Float64}: melt fraction viscosity correction factor (positive scalar)GeoParams::Union{Nothing, Vector{GeoParams.MaterialParameters.ConstitutiveRelationships.AbstractCreepLaw}}: GeoParams creeplaws Set diffusion or dislocation creeplaws as provided by the GeoParams package:juliajulia> using GeoParams julia> a = SetDiffusionCreep(GeoParams.Diffusion.dry_anorthite_Rybacki_2006); julia> p = Phase(ID=1,Name="test", GeoParams=[a]);Note that GeoParams should be a vector, as you could, for example, have diffusion and dislocation creep parameters Note also that this will overwrite any other creeplaws provided in the Phase struct.
grainsize::Union{Nothing, Float64}: grainsize [m] (not used in LaMEM) This is not actually used in LaMEM, but is required when setting diffusion creep parameters by using GeoParams
LaMEM.LaMEM_Model.PhaseAggregate Type
Defines phase aggregates, which can be useful for visualization purposesname::String: Name of the phase aggregatephaseID::Union{Nothing, Vector{Int64}}: Phases to be combinednumPhase::Union{Nothing, Int64}: number of aggregated phases
LaMEM.LaMEM_Model.PhaseTransition Type
Defines phase transitions on markers (that change the Phase ID of a marker depending on some conditions)ID::Int64: Phase_transition law IDType::String: [Constant, Clapeyron, Box]: Constant - the phase transition occurs only at a fixed value of the parameter; Clapeyron - clapeyron slopeName_Clapeyron::Union{Nothing, String}: Type of predefined Clapeyron slope, such as Mantle_Transition_660kmPTBox_Bounds::Union{Nothing, Vector{Float64}}: box bound coordinates: [left, right, front, back, bottom, top]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 transitionConstantValue::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 PhaseBelowPhaseBelow::Union{Nothing, Vector{Int64}}: Below the chosen value the phase is PhaseBelow, above it, the value is 1PhaseInside::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 worksResetParam::Union{Nothing, String}: [APS] Parameter to reset on particles below PT or within boxPTBox_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/yrt0_box::Union{Nothing, Float64}: [optional] beginning time of movemen in Myrt1_box::Union{Nothing, Float64}: [optional] end time of movement in Myrclapeyron_slope::Union{Nothing, Float64}: [optional] clapeyron slope of phase transition [in K/MPa];P = ( T - T0_clapeyron ) * clapeyron_slope + P0_clapeyronP0_clapeyron::Union{Nothing, Float64}: [optional] P0_clapeyron [Pa]T0_clapeyron::Union{Nothing, Float64}: [optional] T0_clapeyron [C]numberofequation::Union{Nothing, Int64}: Number of phase transition equations. Must be 1 or 2 for Clapeyron phase transitions
LaMEM.LaMEM_Model.Scaling Type
Scaling{T} is a structure that contains the scaling info, employed in the current simulationScaling::Any: Scaling object (as in GeoParams), which can beGEO_units(),NO_units(), orSI_units()
LaMEM.LaMEM_Model.Softening Type
Defines strain softening parametersID::Int64: softening law IDAPS1::Float64: Begin of softening, in units of accumulated plastic strain (APS)APS2::Float64: End of softening, in units of accumulated plastic strain (APS)A::Float64: Reduction ratioLm::Union{Nothing, Float64}: Material length scale (in selected units, e.g. km in geo)APSheal2::Union{Nothing, Float64}: APS when healTau2 activateshealTau::Union{Nothing, Float64}: healing timescale parameter [Myr]healTau2::Union{Nothing, Float64}: healing timescale parameter [Myr] starting at APS=APSheal2
LaMEM.LaMEM_Model.SolutionParams Type
Structure that contains the LaMEM global solution parameters.gravity::Vector{Float64}: gravitational acceleration vectorFSSA::Float64: free surface stabilization parameter [0 - 1]; The value has to be between 0 and 1FSSA_allVel::Int64: free surface stabilization parameter applied to all velocity components? Default is yes; if not it is only applied to the z-componentshear_heat_eff::Float64: shear heating efficiency parameter [0 - 1]Adiabatic_Heat::Float64: Adiabatic Heating activation flag and efficiency. [0.0 - 1.0] (e.g., 0.5 means that only 50 percent of the potential adiabatic heating affects the energy equation)act_temp_diff::Int64: temperature diffusion activation flagact_therm_exp::Int64: thermal expansion activation flagact_steady_temp::Int64: steady-state temperature initial guess activation flagsteady_temp_t::Float64: time for (quasi-)steady-state temperature initial guessnstep_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 viscosityeta_refbefore starting the simulationp_litho_visc::Int64: use lithostatic instead of dynamic pressure for creep lawsp_litho_plast::Int64: use lithostatic pressure for plasticityp_lim_plast::Int64: limit pressure at first iteration for plasticityp_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 modelgw_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 parameterget_permea::Float64: effective permeability computation activation flagrescal::Float64: stencil rescaling flag (for internal constraints, for example while computing permeability)mfmax::Float64: maximum melt fraction affecting viscosity reductionlmaxit::Int64: maximum number of local rheology iterationslrtol::Float64: local rheology iterations relative toleranceact_dike::Int64: dike activation flag (additonal term in divergence)useTk::Int64: switch to use T-dependent conductivity, 0: not activedikeHeat::Int64: switch to use Behn & Ito heat source in the dikeadiabatic_gradient::Float64: Adiabatic gradient in combination with Behn & Ito dikeCompute_velocity_gradient::Int64: compute the velocity gradient tensor 1: active, 0: not active. If active, it automatically activates the output in the .pvd filePhasetrans::Int64: Activate Phase Transitions on Particles or not, 0: not.Passive_Tracer::Int64: Activate Passive Tracers or not?
LaMEM.LaMEM_Model.Solver Type
Structure that contains the LaMEM solver optionsSolverType::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
LaMEM.LaMEM_Model.Time Type
Structure that contains the LaMEM timestepping information. An explanation of the paramneters is given in the struct `Time_info`time_end::Float64: simulation end timedt::Float64: initial time stepdt_min::Float64: minimum time step (declare divergence if lower value is attempted)dt_max::Float64: maximum time stepdt_out::Float64: output step (output at least at fixed time intervals)inc_dt::Float64: time step increment per time step (fraction of unit)CFL::Float64: CFL (Courant-Friedrichs-Lewy) criterionCFLMAX::Float64: CFL criterion for elasticitynstep_max::Int64: maximum allowed number of steps (lower bound: time_end/dt_max)nstep_out::Int64: save output every n steps; Set this to -1 to deactivate saving outputnstep_rdb::Int64: save restart database every n stepsnum_dt_periods::Int64: number of time stepping periodstime_dt_periods::Vector{Int64}: timestamps where timestep should be fixed (first entry has to 0)step_dt_periods::Vector{Float64}: target timesteps ar timestamps abovenstep_ini::Int64: save output for n initial stepstime_tol::Float64: relative tolerance for time comparisons
LaMEM.LaMEM_Model.VelCylinder Type
LaMEM boundary condition internal velocty cylinder `VelCylinder` objectbaseX::Float64: X-coordinate of base of cylinderbaseY::Float64: Y-coordinate of base of cylinderbaseZ::Float64: Z-coordinate of base of cylindercapX::Float64: X-coordinate of cap of cylindercapY::Float64: Y-coordinate of cap of cylindercapZ::Float64: Z-coordinate of cap of cylinderradius::Float64: radius of cylindervx::Union{Nothing, Float64}: Vx velocity of cylinder (default is unconstrained)vy::Union{Nothing, Float64}: Vy velocity of cylinder (default is unconstrained)vz::Union{Nothing, Float64}: Vz velocity of cylinder (default is unconstrained)advect::Int64: cylinder advection flagvmag::Float64: magnitude of velocity applied along the cylinder's axis of orientationtype::String: velocity profile [uniform or parabolic]
LaMEM.LaMEM_Model.VelocityBox Type
VelocityBoxDefines a velocity region within the modelling domain by specifying its center point and width along the three axes.
cenX::Float64: X-coordinate of center of boxcenY::Float64: Y-coordinate of center of boxcenZ::Float64: Z-coordinate of center of boxwidthX::Float64: Width of box in x-directionwidthY::Float64: Width of box in y-directionwidthZ::Float64: Width of box in Z-directionvx::Union{Nothing, Float64}: Vx velocity of box (default is unconstrained)vy::Union{Nothing, Float64}: Vx velocity of box (default is unconstrained)vz::Union{Nothing, Float64}: Vx velocity of box (default is unconstrained)advect::Int64: box advection flag
GeophysicalModelGenerator.above_surface Method
above_surface(model::Model, DataSurface_Cart::CartData)Returns a boolean grid that is true if the Phases/Temp grid are above the surface
GeophysicalModelGenerator.add_box! Method
add_box!(model::Model; xlim=Tuple{2}, [ylim=Tuple{2}], zlim=Tuple{2},
Origin=nothing, StrikeAngle=0, DipAngle=0,
phase = ConstantPhase(1),
T=nothing )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.
sourceGeophysicalModelGenerator.add_cylinder! Method
add_cylinder!(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)See the documentation of the GMG routine
sourceGeophysicalModelGenerator.add_ellipsoid! Method
add_ellipsoid!(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 )See the documentation of the GMG routine
sourceGeophysicalModelGenerator.add_layer! Method
add_layer!(model::Model; xlim, ylim, zlim=Tuple{2},
phase = ConstantPhase(1),
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.
sourceGeophysicalModelGenerator.add_polygon! Method
add_polygon!(model::Model; # required input
xlim::Vector,
ylim=Vector,
zlim=Vector(),
phase = ConstantPhase(1), # Sets the phase number(s) in the box
T=nothing)See the documentation of the GMG routine
sourceGeophysicalModelGenerator.add_slab! Method
add_slab!(model::Model; # required input
trench::Trench;
phase = ConstantPhase(1), # Sets the phase number(s) in the box
T=nothing)See the documentation of the GMG routine
sourceGeophysicalModelGenerator.add_sphere! Method
add_sphere!(model::Model; cen=Tuple{3}, radius=Tuple{1}, phase = ConstantPhase(1), T=nothing)See the documentation of the GMG routine
sourceGeophysicalModelGenerator.add_stripes! Method
add_stripes!(Phase, Grid::AbstractGeneralGrid;
stripAxes = (1,1,0),
stripeWidth = 0.2,
stripeSpacing = 1,
Origin = nothing,
StrikeAngle = 0,
DipAngle = 10,
phase = ConstantPhase(3),
stripePhase = ConstantPhase(4))See the documentation of the GMG routine
sourceGeophysicalModelGenerator.below_surface Method
below_surface(model::Model, DataSurface_Cart::CartData)Returns a boolean grid that is true if the Phases/Temp grid are below the surface
LaMEM.IO_functions.passivetracer_time Function
passivetracer_time(model::Model, cores::Int64=1, args::String=""; wait=true)Placeholder for passive tracer time evolution using the configuration in model. See the passivetracer_time(ID, model::Model) method to retrieve tracer data by particle ID.
LaMEM.IO_functions.passivetracer_time Method
PT = passivetracer_time(ID::Union{Vector{Int64},Int64}, model::Model)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.
LaMEM.IO_functions.project_onto_crosssection Method
project_onto_crosssection(model::Model, Cross::CartData)Reads the output of a LaMEM simulation and projects it onto a 2D cross-section Cross
LaMEM.IO_functions.read_LaMEM_simulation Method
Timestep, FileNames, Time = read_LaMEM_simulation(model::Model; phase=false, surf=false, passive_tracers=false)Reads a LaMEM simulation as specified in model and returns the timesteps, times and filenames of that simulation once it is finished.
LaMEM.IO_functions.read_LaMEM_timestep Function
data, time = read_LaMEM_timestep(model::Model, TimeStep::Int64=0; fields=nothing, phase=false, surf=false, last=true)Reads a specific Timestep from a simulation specified in model
LaMEM.LaMEM_Model.Check_LaMEM_Model Method
Check_LaMEM_Model(m::Model; warn_constant_grid=true)Checks the LaMEM Setup Model m for errors.
warn_constant_grid toggles the warning that is emitted when both the initial Phases and Temp grids are constant. Set it to false for intentionally uniform setups (e.g. the 0D rheology benchmark in stress_strainrate_0D).
LaMEM.LaMEM_Model.UpdateDefaultParameters Method
model = UpdateDefaultParameters(model::Model)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
sourceLaMEM.LaMEM_Model.above_surface! Method
above_surface!(model::Model, DataSurface_Cart::CartData; phase::Int64=nothing, T::Number=nothing)Sets the Temp or Phases above the surface DataSurface_Cart to a constant value.
LaMEM.LaMEM_Model.add_dike! Method
add_dike!(model::Model, dike::Dike)This adds a phase transition phase_trans to model
LaMEM.LaMEM_Model.add_geom! Method
add_geom!(model::Model, geom_object)This adds an internal geometric primitive object geom_object to the LaMEM Model Setup model.
Currently available primitive geom objects are:
GeomSphereGeomEllipsoidGeomBoxGeomLayerGeomCylinderGeomRidgeSegGeomHex
LaMEM.LaMEM_Model.add_geom! Method
add_geom!(model::Model, geom_object)Add several geometric objects @ once.
sourceLaMEM.LaMEM_Model.add_petsc! Method
add_petsc!(model::Model, option::String)Adds one or more PETSc options to the model
Example
julia> d = Model()
julia> add_petsc!(d,"-snes_npicard 3")LaMEM.LaMEM_Model.add_phase! Method
add_phase!(model::Model, phase::Phase)This adds a phase (with material properties) to model
LaMEM.LaMEM_Model.add_phase! Method
add_phase!(model::Model, phases...)Add several phases @ once.
sourceLaMEM.LaMEM_Model.add_phaseaggregate! Method
add_phaseaggregate!(model::Model, phaseagg::PhaseAggregate)This adds a phase aggregate law phaseagg to model
LaMEM.LaMEM_Model.add_phasetransition! Method
add_phasetransition!(model::Model, phase_trans::PhaseTransition)This adds a phase transition phase_trans to model
LaMEM.LaMEM_Model.add_softening! Method
add_softening!(model::Model, soft::Softening)This adds a plastic softening law soft to model
LaMEM.LaMEM_Model.add_topography! Method
add_topography!(model::Model, topography::CartData; surf_air_phase=0, surf_topo_file="topography.txt", open_top_bound=1, surf_level=0.0)Adds the topography surface to the model
sourceLaMEM.LaMEM_Model.add_vbox! Method
add_vbox!(model::Model, vboxes...)Add several phases @ once.
sourceLaMEM.LaMEM_Model.add_vbox! Method
add_vbox!(model::Model, vbox::VelocityBox)This adds a vbox (with its properties) to model
LaMEM.LaMEM_Model.adjust_for_platforms Method
model, cores = adjust_for_platforms(model, cores::Int64)On certain platforms we have restrictions (MPI is broken on windows currently, so we need to adjust things accordingly)
sourceLaMEM.LaMEM_Model.below_surface! Method
below_surface!(model::Model, DataSurface_Cart::CartData; phase::Union{Int64,Nothing}=nothing, T::Union{Number,Nothing}=nothing)Sets the Temp or Phases below the surface DataSurface_Cart to a constant value.
LaMEM.LaMEM_Model.compute_dof Method
Returns the total degrees of freedom for a LaMEM simulation
sourceLaMEM.LaMEM_Model.copy_phase Method
copy_phase(phase::Phase; kwargs...)This copies a phase with material properties, while allowing to change some parameters
sourceLaMEM.LaMEM_Model.create_initialsetup Function
create_initialsetup(model::Model, cores::Int64=1, args::String=""; verbose=verbose)Creates the initial model setup of LaMEM from model, which includes:
- Writing the LaMEM (*.dat) input file
and in case we do not employ geometric primitives to create the setup:
Write the VTK file (if requested when
model.Output.write_VTK_setup=true)Write the marker files to disk (if
model.ModelSetup.msetup="files")
LaMEM.LaMEM_Model.cross_section Function
Cross = cross_section(cart::CartData, field::Symbol =:phase; x=nothing, y=nothing, z=nothing)Creates a cross-section through the data and returns x,z coordinates
LaMEM.LaMEM_Model.cross_section Function
data_tuple, axes_str = cross_section(model::LaMEM.Model, field=:phases; x=nothing, y=nothing, z=nothing)This creates a cross-section through the initial model setup & returns a 2D array
sourceLaMEM.LaMEM_Model.digitsep Method
digitsep(value::Integer; separator=",", per_separator=3)Convert an integer to a string, separating each per_separator digits by separator.
digitsep(12345678) # "12,345,678"
digitsep(12345678, seperator= "'") # "12'345'678"
digitsep(12345678, seperator= "-", per_separator=4) # "1234-5678"LaMEM.LaMEM_Model.flatten Method
data_tuple, axes_str = flatten(cross::CartData, field::Symbol, x, y, z)Creates a 2D array out of a cross-section cross for the specified data field. Returns a named tuple (x, z, data) and axis/title strings.
LaMEM.LaMEM_Model.hasplasticity Method
hasplasticity(p::Phase)true if p contains plastic parameters (cohesion or friction angle)
LaMEM.LaMEM_Model.is_rectilinear Method
is_rectilinear(topography::CartData)Checks whether topography is rectilinear
LaMEM.LaMEM_Model.isdefault Method
isdefault(s1::S, s_default::S)Checks whether a struct s1 has default parameters s_default
LaMEM.LaMEM_Model.prepare_lamem Function
prepare_lamem(model::Model, cores::Int64=1, args::String=""; verbose=false, add_APS=false)Prepares a LaMEM run for the parameters specified in model, without running the simulation: 1) Create the *.dat file 2) Write markers to disk in case we use a "files" setup
This is useful if you want to prepare a model on one machine but run it on another one (e.g. a cluster).
add_APS: iftrue, write accumulated plastic strain (APS) to marker files (requires LaMEM ≥ 2.2.1)
Set model.Output.write_VTK_setup to true if you want to write a VTK file of the model setup.
LaMEM.LaMEM_Model.print_short Method
This creates a single string, so we can use it in the command line
sourceLaMEM.LaMEM_Model.replace_phase! Method
replace_phase!(model::Model, phase_new::Phase; ID::Int64=nothing, Name::String=nothing)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.
LaMEM.LaMEM_Model.rm_geom! Method
rm_geom!(model::Model)This removes all existing geometric objects from model
LaMEM.LaMEM_Model.rm_last_phase! Method
rm_last_phase!(model::Model, phase::Phase)This removes the last added phase from model
LaMEM.LaMEM_Model.rm_last_vbox! Method
rm_last_vbox!(model::Model)This removes the last added vbox from model
LaMEM.LaMEM_Model.rm_phase! Method
rm_phase!(model::Model, ID::Int64)This removes a phase with ID from model
LaMEM.LaMEM_Model.rm_phase! Method
rm_phase!(model::Model)This removes all existing phases from model
LaMEM.LaMEM_Model.rm_vbox! Method
rm_vbox!(model::Model)This removes all existing velocity boxes from model
LaMEM.LaMEM_Model.set_air Method
set_air(; Name="air", ID=0, rho=1, alpha=nothing, eta=1e17, G=nothing, nu=nothing, fr=nothing, ch=nothing, k=30,Cp=1000)Sets an air phase, with high conductivity
sourceLaMEM.LaMEM_Model.set_geom! Method
set_geom!(model::Model, d::GeomSphere)Sets the geometry of the model using the GeomSphere geometric primitive d. This populates model.Grid.Phases and model.Grid.Temp using the GMG sphere primitive.
LaMEM.LaMEM_Model.stress_strainrate_0D Method
τ = stress_strainrate_0D(rheology, ε_vec::Vector; n=8, T=700, nstep_max=2, clean=true)Computes the stress for a given strain rate and 0D rheology setup, for viscous creep rheologies. n is the resolution in x,z, T the temperature, nstep_max the number of time steps, ε_vec the strainrate vector (in 1/s).
LaMEM.LaMEM_Model.within_bounds Method
within_bounds(model::Model, topography::CartData)Verifies that the bounds of the topography grid are larger than that of the model
sourceLaMEM.LaMEM_Model.write_LaMEM_inputFile Function
write_LaMEM_inputFile(d::Model,fname::String; dir=pwd())Writes a LaMEM input file based on the data stored in Model
sourceLaMEM.LaMEM_Model.write_LaMEM_inputFile Method
write_LaMEM_inputFile(io, d::BoundaryConditions)Writes the boundary conditions related parameters to file
sourceLaMEM.LaMEM_Model.write_LaMEM_inputFile Method
write_LaMEM_inputFile(io, d::FreeSurface)Writes the free surface related parameters to file
sourceLaMEM.LaMEM_Model.write_LaMEM_inputFile Method
write_LaMEM_inputFile(io, d::GeomEllipsoid)LaMEM.LaMEM_Model.write_LaMEM_inputFile Method
write_LaMEM_inputFile(io, d::Grid)This writes grid info to a LaMEM input file
Example
julia> d=LaMEM.Grid(coord_x=[0.0, 0.7, 0.8, 1.0], bias_x=[0.3,1.0,3.0], nel_x=[10,4,2])
julia> io = open("test.dat","w")
julia> LaMEM.write_LaMEM_inputFile(io, d)
julia> close(io)LaMEM.LaMEM_Model.write_LaMEM_inputFile Method
write_LaMEM_inputFile(io, d::Output)Writes the free surface related parameters to file
sourceLaMEM.LaMEM_Model.write_LaMEM_inputFile Method
write_LaMEM_inputFile(io, d::ModelSetup)Writes options related to the Model Setup to disk
sourceLaMEM.LaMEM_Model.write_LaMEM_inputFile Method
write_LaMEM_inputFile(io, d::Output)Writes the free surface related parameters to file
sourceLaMEM.LaMEM_Model.write_LaMEM_inputFile Method
write_LaMEM_inputFile(io, d::PassiveTracers)Writes the boundary conditions related parameters to file
sourceLaMEM.LaMEM_Model.write_LaMEM_inputFile Method
write_LaMEM_inputFile(io, d::Scaling)Writes the scaling/units section to the LaMEM input file io.
LaMEM.LaMEM_Model.write_LaMEM_inputFile Method
write_LaMEM_inputFile(io, d::SolutionParams)Writes the boundary conditions related parameters to file
sourceLaMEM.LaMEM_Model.write_LaMEM_inputFile Method
write_LaMEM_inputFile(io, d::Solver)Writes the free surface related parameters to file
sourceLaMEM.LaMEM_Model.write_LaMEM_inputFile_PETSc Method
write_LaMEM_inputFile_PETSc(io, d::Solver)Writes the (optional) PETSc options to file
sourceLaMEM.Run.run_lamem Function
run_lamem(model::Model, cores::Int64=1, args::String=""; wait=true, add_APS=false)Performs a LaMEM run for the parameters specified in model.
cores: number of MPI cores to useargs: additional command-line arguments passed to LaMEMwait: iftrue, wait for the simulation to finish before returningadd_APS: iftrue, write accumulated plastic strain (APS) to marker files. Requires LaMEM ≥ 2.2.1 (header 1211215). Default isfalse(LaMEM ≥ 2.2.0).

