IO - Functions
Index
PeriLab.IO.BondBlockPeriLab.InputDeck.BondFilterPeriLab.InputDeck.CalculationOptionsPeriLab.InputDeck.ContactInputPeriLab.InputDeck.FallbackParamsPeriLab.InputDeck.PeriLabInputPeriLab.InputDeck.SolverOptionsPeriLab.InputDeck.SolverParamsBase.:|PeriLab.IO._init_overlap_map_PeriLab.IO.bond_component_sizePeriLab.IO.bond_element_id_offsetPeriLab.IO.bond_export_sizesPeriLab.IO.calculate_blockPeriLab.IO.calculate_nodelistPeriLab.IO.check_block_selectionPeriLab.IO.check_for_duplicate_in_dataframePeriLab.IO.check_mesh_elementsPeriLab.IO.check_types_in_dataframePeriLab.IO.clearNP1PeriLab.IO.close_result_filePeriLab.IO.close_result_filesPeriLab.IO.close_result_filesPeriLab.IO.compute_bond_connectivityPeriLab.IO.create_and_distribute_bond_normPeriLab.IO.create_bond_overlap_map!PeriLab.IO.create_distributionPeriLab.IO.create_distribution_neighbor_basedPeriLab.IO.create_distribution_node_basedPeriLab.IO.create_global_to_local_mappingPeriLab.IO.create_neighborhoodlistPeriLab.IO.create_overlap_mapPeriLab.IO.create_result_filePeriLab.IO.create_result_filePeriLab.IO.csv_readerPeriLab.IO.define_nsetsPeriLab.IO.delete_filesPeriLab.IO.distribute_neighborhoodlist_to_coresPeriLab.IO.distribution_to_coresPeriLab.IO.element_block_sizesPeriLab.IO.element_distributionPeriLab.IO.exodus_num_nodesPeriLab.IO.external_topology_filePeriLab.IO.extrude_surface_meshPeriLab.IO.find_global_core_value!PeriLab.IO.gather_bond_valuesPeriLab.IO.get_block_nodesPeriLab.IO.get_bond_geometryPeriLab.IO.get_file_sizePeriLab.IO.get_global_valuesPeriLab.IO.get_headerPeriLab.IO.get_local_element_topologyPeriLab.IO.get_local_neighborsPeriLab.IO.get_local_overlap_mapPeriLab.IO.get_mpi_rank_stringPeriLab.IO.get_number_of_neighbornodesPeriLab.IO.get_paraview_coordinatesPeriLab.IO.get_results_mappingPeriLab.IO.global_value_avgPeriLab.IO.global_value_maxPeriLab.IO.global_value_minPeriLab.IO.global_value_sumPeriLab.IO.init_bond_information_exportPeriLab.IO.init_dataPeriLab.IO.init_orientationsPeriLab.IO.init_results_in_exodusPeriLab.IO.init_write_resultsPeriLab.IO.initialize_dataPeriLab.IO.is_bond_field_typePeriLab.IO.load_and_evaluate_meshPeriLab.IO.local_nodes_from_dictPeriLab.IO.merge_exodus_filePeriLab.IO.merge_exodus_filesPeriLab.IO.neighborsPeriLab.IO.node_distributionPeriLab.IO.open_result_filePeriLab.IO.paraview_specificsPeriLab.IO.read_external_topologyPeriLab.IO.read_inputPeriLab.IO.read_input_deckPeriLab.IO.read_node_setsPeriLab.IO.resolve_block_selectionPeriLab.IO.set_anglesPeriLab.IO.set_dofPeriLab.IO.set_fallback_output_frequencyPeriLab.IO.set_output_frequencyPeriLab.IO.show_block_summaryPeriLab.IO.show_mpi_summaryPeriLab.IO.split_output_fieldsPeriLab.IO.validate_inputPeriLab.IO.write_bond_results_in_exodusPeriLab.IO.write_global_results_in_csvPeriLab.IO.write_global_results_in_exodusPeriLab.IO.write_nodal_results_in_exodusPeriLab.IO.write_resultsPeriLab.IO.write_step_and_timePeriLab.InputDeck.active_computesPeriLab.InputDeck.bc_node_set_namesPeriLab.InputDeck.bc_step_idsPeriLab.InputDeck.block_anglesPeriLab.InputDeck.block_by_idPeriLab.InputDeck.block_names_and_idsPeriLab.InputDeck.bond_filterPeriLab.InputDeck.check_for_duplicatesPeriLab.InputDeck.compute_namesPeriLab.InputDeck.contact_blocksPeriLab.InputDeck.contact_search_frequencyPeriLab.InputDeck.describePeriLab.InputDeck.end_timePeriLab.InputDeck.fallback_output_frequenciesPeriLab.InputDeck.fem_degreePeriLab.InputDeck.gcode_block_idsPeriLab.InputDeck.generate_parameter_docsPeriLab.InputDeck.mesh_node_fieldsPeriLab.InputDeck.mesh_scalingPeriLab.InputDeck.model_optionsPeriLab.InputDeck.output_fieldnamesPeriLab.InputDeck.output_filenamesPeriLab.InputDeck.output_frequenciesPeriLab.InputDeck.parse_contactPeriLab.InputDeck.parse_modelsPeriLab.InputDeck.parse_pre_calculation_switchesPeriLab.InputDeck.parse_single_modelsPeriLab.InputDeck.read_inputPeriLab.InputDeck.register_bond_filterPeriLab.InputDeck.solver_namePeriLab.InputDeck.solver_stepPeriLab.InputDeck.solver_stepsPeriLab.InputDeck.start_timePeriLab.InputDeck.step_valuePeriLab.InputDeck.to_json_schema
IO
PeriLab.IO._init_overlap_map_ — Method
_init_overlap_map_(size)Initialize the overlap map.
Arguments
size::Int64: The number of ranks.
Returns
overlap_map::Dict{Int64,Dict{Int64,Dict{String,Vector{Int64}}}}: The overlap map.
PeriLab.IO.bond_component_size — Method
bond_component_size(datafield)Returns the size of a single bond value, i.e. () for a scalar bond field, (dof,) for a vector one such as Deformed Bond Geometry, and (i_dof, j_dof) for a tensor one.
Bond fields are indexed as field[node][neighbor], the bond value being a number, an SVector or an SMatrix. Nodes without neighbours are skipped, so a boundary node cannot make a vector field look scalar.
Arguments
datafield: The bond field, indexed by node
Returns
::Tuple: The component size
PeriLab.IO.bond_element_id_offset — Method
bond_element_id_offset(element_ids, n_bond_elements)Returns the offset after which this rank numbers its bond elements: bond element ids start after all node elements and are then handed out rank by rank.
rank 0: base + 1 ... base + n_0
rank 1: base + n_0 + 1 ... base + n_0 + n_1
rank 2: base + n_0 + n_1 + 1 ... base + n_0 + n_1 + n_2base is the total number of nodes over all ranks, so the bond ids start behind the node elements. n_r is the bond count of rank r, obtained from an Allgather, so every rank can compute the sum of all lower ranks itself.
Points and FE elements take their global ids from loc_to_glob, because there is exactly one element per node. A node owns many bonds, so that map cannot be reused.
A directed bond i -> j is written only by the rank owning node i, so nothing has to be merged; the ranges only have to be disjoint.
Calls MPI.Allreduce and MPI.Allgather, so every rank has to reach this function, including ranks that hold no bonds at all.
Arguments
element_ids::AbstractVector: Element ids already assigned on this rank, used as the base in the serial case and for the FE partn_bond_elements::Int64: Number of bond elements on this rank
Returns
::Int64: Offset for the first bond element id of this rank
PeriLab.IO.bond_export_sizes — Method
bond_export_sizes(bond_blocks)Returns the numbers needed by create_result_file for a given bond connectivity.
Arguments
bond_blocks: Result ofcompute_bond_connectivity
Returns
n_bond_elements::Int64: Total number of BAR2 elementsn_bond_blocks::Int64: Number of additional element blocks
PeriLab.IO.calculate_block — Method
calculate_block( field_key::String, dof::Int64, calculation_type::String, block::Int64)Calculate the global value of a field for a given block.
Arguments
field_key::String: Field key.dof::Union{Int64,Vector{Int64}}: Degree of freedomcalculation_type::String: Calculation type.block::Int64: Block number.
Returns
value::Float64: Global value.nnodes::Int64: Number of nodes.
PeriLab.IO.calculate_nodelist — Method
calculate_nodelist(field_key::String, dof::Union{Int64,Vector{Int64}}, calculation_type::String, local_nodes::Vector{Int64})Calculate the global value of a field for a given set of nodes.
Arguments
field_key::String: Field key.dof::Union{Int64,Vector{Int64}}: Degree of freedomcalculation_type::String: Calculation type.local_nodes::Vector{Int64}: Node set.
Returns
value::Vector: Global value.nnodes::Int64: Number of nodes.
PeriLab.IO.check_block_selection — Method
check_block_selection(blocks, n_blocks)Verifies that every index of a "Bond Blocks" selection refers to an existing block.
resolve_block_selection only parses; it has no idea which blocks exist. Without this check an out-of-range index is silently skipped by the export loop, and the user gets fewer bond blocks than asked for with no hint why.
Arguments
blocks::Union{Nothing,AbstractVector{Int64}}: The parsed selection,nothingfor all blocksn_blocks::Int64: Number of existing material blocks
Returns
blocks: The unchanged input, so the call can be chained
PeriLab.IO.check_for_duplicate_in_dataframe — Method
check_for_duplicate_in_dataframe(mesh::DataFrame)check duplicated entries and throws an error if one is there. If not everything is ok.
Arguments
mesh::DataFrame: The input mesh data represented as a DataFrame.
PeriLab.IO.check_mesh_elements — Method
check_mesh_elements(mesh, dof)Process and analyze mesh data to create an dictionary containing information about mesh elements for further processing.
Arguments
mesh::DataFrame: The input mesh data represented as a DataFrame.dof::Int64: The degrees of freedom (DOF) for the mesh elements.
Returns
A dictionary containing information about mesh elements, which can be used for further processing or uploading.
Example
`julia meshdata = DataFrame(x1 = [1.0, 2.0, 3.0], x2 = [4.0, 5.0, 6.0], volume = [10.0, 20.0, 30.0]) dof = 3 result = checkmeshelements(meshdata, dof)
PeriLab.IO.check_types_in_dataframe — Method
check_types_in_dataframe(mesh::DataFrame)check if block_id in mesh contains only int.
Arguments
mesh::DataFrame: The input mesh data represented as a DataFrame.
PeriLab.IO.clearNP1 — Method
clearNP1(name::String)Clears the NP1 from the name
Arguments
name::String: The name
Returns
name::String: The cleared name
PeriLab.IO.close_result_file — Method
close_result_file(result_file::Dict)Closes the result file
Arguments
result_file::Dict: The result file
PeriLab.IO.close_result_files — Method
close_result_files(result_files::Vector{Dict}, outputs::Dict{Int64,Dict{}})Closes the result files if the flush_file flag is not set
Arguments
result_files::Vector{Dict}: The result filesoutputs::Dict{Int64,Dict{}}: The output settings
PeriLab.IO.close_result_files — Method
close_result_files(result_files::Vector{Dict})Closes the result files
Arguments
result_files::Vector{Dict}: The result files
Returns
true: File is closedfalse: File was already closed
PeriLab.IO.compute_bond_connectivity — Method
compute_bond_connectivity(block_Id, n_blocks, nlist; blocks = nothing)Builds the BAR2 connectivity for the bond export once, so that the element count used at initialisation, the connectivity written into the file, and the result values written per time step all follow the same ordering.
Bonds are directed, which is what the peridynamic data structure actually holds: nlist[i] containing j does not imply that nlist[j] contains i, and even when both exist they carry separate state (bond damage, bond forces and so on differ per direction). Each entry of each neighbourhood list therefore becomes its own BAR2 element, owned by the block of node i. Two elements on the same node pair are legal in exodusII; they simply overlap geometrically.
Bonds are owned by the block of node i, and only nodes this rank owns are iterated, so every directed bond exists exactly once across all ranks.
The partner j may be a responder node. Those bonds are written too, which is why the file has to contain the responder nodes as well; see init_write_results, where num_nodes counts them and num_owned_nodes does not.
A selected block with no local bonds is kept with zero elements. Which blocks are selected is the same on every rank, whether they hold bonds locally is not, and epu needs the same block structure in every per-rank file.
Arguments
block_Id::AbstractVector{Int64}: Block id per owned noden_blocks::Int64: Number of material blocksnlist::AbstractVector: Neighbourhood listblocks: Optional subset of block indices to export bonds for
Returns
bond_blocks::OrderedDict{Int64,BondBlock}: Block index -> bond block
PeriLab.IO.create_and_distribute_bond_norm — Method
create_and_distribute_bond_norm(comm::MPI.Comm, nlist::NestedNeighborhoodList, nlist_filtered_ids::NestedNeighborhoodList, distribution::Vector{Int64}, bond_norm::Vector{Float64}, dof::Int64)Create and distribute the bond norm
Arguments
comm::MPI.Comm: MPI communicatornlist::NestedNeighborhoodList: The global neighborhood listnlist_filtered_ids::NestedNeighborhoodList: The filtered neighborhood listdistribution::Vector{Int64}: The distributionbond_norm::Vector{Float64}: The bond normdof::Int64: The degree of freedom
PeriLab.IO.create_bond_overlap_map! — Method
create_bond_overlap_map!(overlap_map, nlist, distribution, rank)Adds the flat bond indices exchanged between the ranks to the overlap map. A responder row only holds the bonds to neighbors that exist on its rank, in the order of the global neighborhood list. The owner of the node holds the full row, so for every rank it sends exactly these bonds ("Bond Controller"), and the responder receives its whole rows ("Bond Responder"). Indices refer to flatview of a bond field.
Arguments
overlap_map: local overlap map, extended in placenlist::BondScalarState{Int64}: local neighborhood listdistribution::Vector{Vector{Int64}}: global node ids of all ranksrank::Int64: this rank, starting at 1
PeriLab.IO.create_distribution — Method
create_distribution(nnodes::Int64, size::Int64)Calculate the initial size of each chunk for a nearly equal number of nodes vs. cores this algorithm might lead to the problem, that the last core is not equally loaded
Arguments
nnodes::Int64: The number of nodes.size::Int64: The number of cores.
Returns
distribution::Array{Int64,1}: The distribution of the nodes.point_to_core::Array{Int64,1}: The number of nodes in each rank.
PeriLab.IO.create_distribution_neighbor_based — Method
create_distribution_neighbor_based(nnodes::Int64,nlist::NestedNeighborhoodList, size::Int64)Calculate the initial size of each chunk for a nearly equal number of nodes vs. cores this algorithm might lead to the problem, that the last core is not equally loaded
Arguments
nnodes::Int64: The number of nodes.nlist::NestedNeighborhoodList: The neighborhood list.size::Int64: The number of cores.
Returns
distribution::Array{Int64,1}: The distribution of the nodes.point_to_core::Array{Int64,1}: The number of nodes in each rank.
PeriLab.IO.create_distribution_node_based — Method
create_distribution_node_based(nnodes::Int64,nlist::NestedNeighborhoodList, size::Int64)Calculate the initial size of each chunk for a nearly equal number of nodes vs. cores this algorithm might lead to the problem, that the last core is not equally loaded
Arguments
nnodes::Int64: The number of nodes.nlist::NestedNeighborhoodList: The neighborhood list.size::Int64: The number of cores.
Returns
distribution::Array{Int64,1}: The distribution of the nodes.point_to_core::Array{Int64,1}: The number of nodes in each rank.
PeriLab.IO.create_global_to_local_mapping — Method
glob_to_loc(distribution)Get the global to local mapping
Arguments
distribution: The distribution
Returns
create_global_to_local_mapping: The global to local mapping
PeriLab.IO.create_neighborhoodlist — Method
create_neighborhoodlist(mesh::DataFrame, blocks::Dict{String,BlockParams}, scaling::Vector{Float64}, dof::Int64)Create the neighborhood list of the mesh elements.
Arguments
mesh::DataFrame: The input mesh data represented as a DataFrame.blocks::Dict{String,BlockParams}: The blocks of the input deck (horizon per block).scaling::Vector{Float64}: Horizon scaling per direction.dof::Int64: The degrees of freedom (DOF) for the mesh elements.
Returns
nlist::Array{Array{Int64,1},1}: The neighborhood list of the mesh elements.
PeriLab.IO.create_overlap_map — Method
create_overlap_map(distribution, ptc, size)Create the overlap map.
Arguments
distribution::Array{Int64,1}: The distribution of the nodes.ptc::Array{Int64,1}: The number of nodes in each rank.size::Int64: The number of ranks.
Returns
overlap_map::Dict{Int64,Dict{Int64,Dict{String,Vector{Int64}}}}: The overlap map.
PeriLab.IO.create_result_file — Function
create_result_file(filename, num_nodes, num_dim, num_elem_blks, num_node_sets,
num_elements = 0, FEtopology = nothing)Creates an exodus file for the results.
num_elem_blks must be the total number of element blocks that will later be written, i.e. the number of material blocks plus the number of bond blocks. Use bond_export_sizes to obtain the latter. exodusII fixes this count at initialisation; writing a different number of blocks makes ex_put_block fail, and in an MPI run it makes the per-rank files inconsistent so that epu cannot merge them.
Arguments
filename::AbstractString: The name of the file to createnum_nodes::Int64: The number of nodesnum_dim::Int64: The number of dimensionsnum_elem_blks::Int64: Total number of element blocks (material + bond blocks)num_node_sets::Int64: The number of node setsnum_elements::Int64: Number of additional elements (FE elements + bond elements)FEtopology::Union{Nothing,Matrix{Int64}}: FE topology, if a FE part is present
Keywords
num_owned_nodes::Int64: Master nodes of this rank, one SPHERE element each. Defaults tonum_nodes, which is right whenever the file holds no responder nodes.
Returns
result_file::Dict{String,Any}: A dictionary containing the filename and the exodus file
PeriLab.IO.create_result_file — Method
create_result_file(filename::String, outputs::Dict)Creates a csv file for the results
Arguments
filename::String: The name of the file to createoutputs::Dict: The outputs dictionary
Returns
Dict: The result file
PeriLab.IO.csv_reader — Method
csv_reader(filename::String)Read csv and return it as a DataFrame.
Arguments
filename::String: The path to the mesh file.
Returns
csvData::DataFrame: The csv data a DataFrame.
PeriLab.IO.define_nsets — Method
define_nsets(nsets::Dict{String,Vector{Int64}})Defines the node sets
Arguments
nsets::Dict{String,Vector{Int64}}: Node sets read from files
PeriLab.IO.delete_files — Method
delete_files(result_files::Vector{Dict})Deletes the result files
Arguments
result_files: The result files
PeriLab.IO.distribute_neighborhoodlist_to_cores — Method
distribute_neighborhoodlist_to_cores(comm::MPI.Comm, nlist, distribution)Distributes the neighborhood list to the cores.
Arguments
comm::MPI.Comm: MPI communicatornlist: neighborhood listdistribution Array{Int64}: global nodes distribution at cores
PeriLab.IO.distribution_to_cores — Method
distribution_to_cores(comm::MPI.Comm, mesh, distribution, dof::Int64)Distributes the mesh data to the cores
Arguments
comm::MPI.Comm: MPI communicatormesh: Meshdistribution Array{Int64}: global nodes distribution at coresdof::Int64: Degree of freedom
PeriLab.IO.element_block_sizes — Method
element_block_sizes(block_Id, n_blocks, bond_blocks)Returns the number of elements per exodus block id, for both the material (SPHERE) blocks and the bond (BAR2) blocks.
Exodus.jl exposes no truth table API, so an element variable has to be written for every element block, not only for the bond blocks. This mapping supplies the lengths of the zero vectors used for the material blocks. Blocks with no local nodes are kept with a count of zero, because they exist in the file as well.
Arguments
block_Id::AbstractVector{Int64}: Block id per noden_blocks::Int64: Number of material blocksbond_blocks::AbstractDict{Int64,BondBlock}: The bond blocks
Returns
sizes::OrderedDict{Int64,Int64}: exodus block id -> number of elements
PeriLab.IO.element_distribution — Method
element_distribution(topology::Vector{Vector{Int64}}, ptc::Vector{Int64}, size::Int64)Create the distribution of the finite elements. Is needed to avoid multiple element calls. Each element should run only one time at the cores.
Arguments
topology::Vector{Vector{Int64}}: The topology list of the mesh elements.nlist::NestedNeighborhoodList: The neighborhood list of the mesh elements.size::Int64: The number of ranks.
Returns
distribution::Vector{Vector{Int64}}: The distribution of the nodes.etc::Vector{Int64}: The number of nodes in each rank.
PeriLab.IO.exodus_num_nodes — Method
exodus_num_nodes(exo::ExodusDatabase)Number of nodes the database was initialised with.
Exodus.jl carries the initialisation as type parameters, Initialization{num_dim, num_nodes, num_elems, num_elem_blks, num_node_sets, num_side_sets} — the same order create_result_file builds it in. There is no exported accessor, so the parameter is read off the type.
Arguments
exo::ExodusDatabase: The exodus file
Returns
::Int64: Node count of the file
PeriLab.IO.external_topology_file — Method
external_topology_file(d, path)File name of the external element topology, or nothing. Aborts if the file does not exist in path.
PeriLab.IO.extrude_surface_mesh — Method
extrude_surface_mesh(mesh::DataFrame, extrusion::Union{Nothing,SurfaceExtrusionParams})extrude the mesh at the surface of the block
Arguments
mesh::DataFrame: The input mesh data represented as a DataFrame.extrusion::Union{Nothing,SurfaceExtrusionParams}: TheSurface Extrusionsection, ornothing.
PeriLab.IO.find_global_core_value! — Method
find_global_core_value!(global_value::Union{Int64,Float64}, calculation_type::String, nnodes::Int64)Find global core value.
Arguments
global_value::Union{Int64,Float64}: The global valuecalculation_type::String: The calculation typennodes::Int64: The number of nodes
Returns
global_value::Union{Int64,Float64}: The global value
PeriLab.IO.gather_bond_values — Method
gather_bond_values(field, bond_block, dof)Extracts the values of one bond variable in exactly the order of the bond connectivity.
field[node][neighbor] is the bond value: a number for a scalar field, an SVector for a vector field such as Deformed Bond Geometry and an SMatrix for a tensor field.
Arguments
field: The bond fieldbond_block::BondBlock: The bond blockdof:nothingfor scalars, anIntegerfor vectors, a 2-element collection for tensors
Returns
values::Vector{Float64}: One value per bond
PeriLab.IO.get_block_nodes — Method
get_block_nodes(block_Id::AbstractVector{Int64}, block::Int64)Returns the nodes of a block as a 1 x n matrix, which is the layout exodusII expects for a SPHERE block (one node per element).
Arguments
block_Id::AbstractVector{Int64}: The block Idblock::Int64: The block
Returns
nodes::Matrix{Int64}: The nodes of the block, shaped1 x n
PeriLab.IO.get_bond_geometry — Method
get_bond_geometry()Gets the bond geometry
PeriLab.IO.get_file_size — Method
get_file_size(result_files::Vector{Dict})Gets the file size of the result files
Arguments
result_files: The result files
Returns
total_file_size: The total file size
PeriLab.IO.get_global_values — Method
get_global_values(output::Dict,)Get global values.
Arguments
output::Dict: The output
Returns
global_values::Vector: The global values
PeriLab.IO.get_header — Method
get_header(filename::Union{String,AbstractString})Returns the header line and the header.
Arguments
filename::Union{String,AbstractString}: The filename of the file.
Returns
header_line::Int: The header line.header::Vector{String}: The header.
PeriLab.IO.get_local_element_topology — Method
get_local_element_topology(topology::Vector{Vector{Int64}}, distribution::Vector{Int64})Get the local element topology
Arguments
topology::Vector{Vector{Int64}}: The topologydistribution::Vector{Int64}: The distribution
PeriLab.IO.get_local_neighbors — Method
get_local_neighbors(mapping, nlist_core)Gets the local neighborhood list from the global neighborhood list
Arguments
mapping: mapping functionnlist_core: global neighborhood list
Returns
nlist_core: local neighborhood list
PeriLab.IO.get_local_overlap_map — Method
get_local_overlap_map()Changes entries in the overlap map from the global numbering to the local computer core one.
Arguments
overlap_map::Dict{Int64, Dict{Int64, String}}: overlap map with global nodes.distribution::Vector{Vector{Int64}}: global nodes distribution at cores, needed for the gobal to local mappingranks Array{Int64}: number of used computer cores
Returns
overlap_map::Dict{Int64, Dict{Int64, String}}: returns overlap map with local nodes.
Example:
get_local_overlap_map(overlap_map, distribution, ranks) # returns local nodesPeriLab.IO.get_mpi_rank_string — Method
get_mpi_rank_string(rank::Int64, max_rank::Int64)Get MPI rank string.
Arguments
value::Int64: The rankmax_rank::Int64: The max rank
Returns
result::String: The result
PeriLab.IO.get_number_of_neighbornodes — Method
get_number_of_neighbornodes(nlist::NestedNeighborhoodList)Get the number of neighbors for each node.
Arguments
nlist::NestedNeighborhoodList: The neighborhood list of the mesh elements.
Returns
length_nlist::Vector{Int64}: The number of neighbors for each node.
PeriLab.IO.get_paraview_coordinates — Method
get_paraview_coordinates(dof::Int64, refDof::Int64)Returns the paraview specific dof
Arguments
dof::Int64: The degrees of freedomrefDof::Int64: The reference degrees of freedom
Returns
paraview_specifics::String: The paraview specific dof
PeriLab.IO.get_results_mapping — Method
get_results_mapping(input::PeriLabInput, path::String)Gets the results mapping
Arguments
input::PeriLabInput: The typed input deckpath::String: The path
Returns
output_mapping::Dict{Int64,Dict{}}: The results mapping
PeriLab.IO.global_value_avg — Method
global_value_avg(field::Union{NodeScalarField{Float64},NodeVectorField{Float64}}, dof::Union{Int64,Vector{Int64}}, nodes::AbstractVector{Int64})Calculate the global average of a field for given nodes.
Arguments
field::Union{NodeScalarField{Float64},NodeVectorField{Float64}}: Field.dof::Union{Int64,Vector{Int64}}: Degree of freedomnodes::AbstractVector{Int64}: Nodes.
Returns
returnValue::Vector: Global value.
PeriLab.IO.global_value_max — Method
global_value_max(field::Union{NodeScalarField{Float64},NodeVectorField{Float64}}, dof::Union{Int64,Vector{Int64}}, nodes::AbstractVector{Int64})Calculate the global maximum of a field for given nodes.
Arguments
field::Union{NodeScalarField{Float64},NodeVectorField{Float64}}: Field.dof::Union{Int64,Vector{Int64}}: Degree of freedomnodes::AbstractVector{Int64}: Nodes.
Returns
returnValue::Vector: Global value.
PeriLab.IO.global_value_min — Method
global_value_min(field::Union{NodeScalarField{Float64},NodeVectorField{Float64}}, dof::Union{Int64,Vector{Int64}}, nodes::AbstractVector{Int64})Calculate the global minimum of a field for given nodes.
Arguments
field::Union{NodeScalarField{Float64},NodeVectorField{Float64}}: Field.dof::Union{Int64,Vector{Int64}}: Degree of freedomnodes::AbstractVector{Int64}: Nodes.
Returns
returnValue::Vector: Global value.
PeriLab.IO.global_value_sum — Method
global_value_sum(field::Union{NodeScalarField{Float64},NodeVectorField{Float64},NodeTensorField{Float64}}, dof::Union{Int64,Vector{Int64}}, nodes::AbstractVector{Int64})Calculate the global sum of a field for given nodes.
Arguments
field::Union{NodeScalarField{Float64},NodeVectorField{Float64},NodeTensorField{Float64}}: Field.dof::Union{Int64,Vector{Int64}: Degree of freedomnodes::AbstractVector{Int64}: Nodes.
Returns
returnValue::Vector: Global value.
PeriLab.IO.init_bond_information_export — Method
init_bond_information_export(block_Id, n_blocks, nlist, parameter)Convenience wrapper: evaluates the "Bond Export" parameter and returns the bond blocks together with the sizes required at initialisation.
Arguments
block_Id::AbstractVector{Int64}: Block id per noden_blocks::Int64: Number of material blocksnlist::AbstractVector: Neighbourhood listparameter::Dict: Output parameter block, may contain"Bond Export"and"Bond Blocks"(whitespace separated indices, e.g.1 3). Without"Bond Blocks"every block is exported.
Returns
bond_blocks::OrderedDict{Int64,BondBlock}: Bond blocks (empty if disabled)n_bond_elements::Int64: Total number of BAR2 elementsn_bond_blocks::Int64: Number of additional element blocks
PeriLab.IO.init_data — Method
init_data(input::PeriLabInput, path::String, comm::MPI.Comm)Initializes the data for the mesh.
Arguments
input::PeriLabInput: The typed input deck.path::String: The path to the mesh file.comm::MPI.Comm: The MPI communicator.
PeriLab.IO.init_orientations — Method
init_orientations(blocks::Dict{String,BlockParams})Initialize orientations.
PeriLab.IO.init_results_in_exodus — Function
init_results_in_exodus(exo, dof, output, coords, block_Id, all_block_name_list,
nsets, global_ids, PERILAB_VERSION, qa_vector,
fem_block = nothing, topology = nothing,
elem_global_ids = nothing;
bond_blocks = ..., bond_output_names = String[],
bond_id_offset = -1)Initializes the results in exodus.
Works with and without bond export: leaving both keywords out writes a plain nodal result file, exactly as before the bond export existed. The FE arguments keep their old positional places.
Arguments
exo::ExodusDatabase: The exodus databasedof: Degrees of freedomoutput::Dict: The output definitioncoords::Union{Matrix{Int64},Matrix{Float64}}: The coordinatesblock_Id::Vector{Int64}: The block Id per nodeall_block_name_list::Vector{String}: The block namesnsets::Dict{String,Vector{Int64}}: The node setsglobal_ids::Vector{Int64}: The global idsPERILAB_VERSION::String: PeriLab version stringqa_vector::Vector{String}: Additional QA records (at most 2 are stored)fem_block::Union{Nothing,Vector{Bool}}: Per-node flag marking FE nodestopology::Union{Nothing,Matrix{Int64}}: FE topologyelem_global_ids::Union{Nothing,Vector{Int64}}: Global element ids for the FE part
Keywords
bond_blocks: Bond blocks, seecompute_bond_connectivity. Empty means no bond export.bond_output_names::Vector{String}: Names of the bond variables, written as element variablesbond_id_offset::Int64: First bond element id minus one, frombond_element_id_offset. Negative means single rank, then the local maximum is used.
Returns
exo::ExodusDatabase: The exodus file
PeriLab.IO.init_write_results — Method
init_write_results(input::PeriLabInput, output_dir::String, path::String, PERILAB_VERSION::String, qa_vector::Vector{String}, reuse::Bool)Initialize write results.
Arguments
input::PeriLabInput: The typed input deckoutput_dir::String: The output directory.path::String: The pathPERILAB_VERSION::String: The PeriLab versionqa_vector::Vector{String}: Additional QA records
Returns
result_files::Array: The result filesoutputs::Dict: The outputs
PeriLab.IO.initialize_data — Method
initialize_data(filename, filedirectory, comm; no_strict = false, raw_deck = nothing)Initialize data.
Arguments
filename::String: The name of the input file.filedirectory::String: The directory of the input file.comm::MPI.Comm: The MPI communicatorno_strict::Bool: Report unknown input keys as warnings instead of errors.raw_deck: The already parsed yaml file, if any (it is not parsed again).
Returns
input::PeriLabInput: The typed inputsteps::Vector{Int64}: The solver steps
PeriLab.IO.is_bond_field_type — Method
is_bond_field_type(field_type)Returns whether a field type produced by Data_Manager.get_field_type describes a bond field.
This and gather_bond_values in exodus_export.jl are the only two places that encode how a bond field looks. Adjust both together if the naming or the storage layout of bond fields changes.
Arguments
field_type: The field type
Returns
::Bool:truefor bond fields
PeriLab.IO.load_and_evaluate_mesh — Method
load_and_evaluate_mesh(input::PeriLabInput, path::String, ranksize::Int64)Load and evaluate the mesh data.
Arguments
input::PeriLabInput: The typed input deck.path::String: The path to the mesh file.ranksize::Int64: The number of ranks.
Returns
distribution::Array{Int64,1}: The distribution of the mesh elements.mesh::DataFrame: The mesh data as a DataFrame.ntype::Dict: The type of the mesh elements.overlap_map::Array{Array{Int64,1},1}: The overlap map of the mesh elements.nlist::Array{Array{Int64,1},1}: The neighborhood list of the mesh elements.dof::Int64: The degrees of freedom (DOF) for the mesh elements.nsets::Dict: The node setstopology::Int64::Array{Int64,nelement:nodes}`: The topology of elements.el_distribution::Array{Int64,1}: The distribution of the finite elements.
PeriLab.IO.local_nodes_from_dict — Method
local_nodes_from_dict(create_global_to_local_mapping::Dict{Int,Int}, global_nodes::Vector{Int64})Changes entries in the overlap map from the global numbering to the local computer core one.
Arguments
create_global_to_local_mapping::Dict{Int,Int}: global to local mappingglobal_nodes::Vector{Int64}: global nodes
Returns
overlap_map::Dict{Int64, Dict{Int64, String}}: returns overlap map with local nodes.
PeriLab.IO.merge_exodus_file — Method
merge_exodus_file(file_name::AbstractString)Merges the exodus file
Arguments
file_name::AbstractString: The name of the file to merge
Returns
exo::ExodusDatabase: The exodus file
PeriLab.IO.merge_exodus_files — Method
merge_exodus_files(result_files::Vector{Any}, output_dir::String)Merges exodus output files
Arguments
result_files::Vector{Any}: The result filesoutput_dir::String: The file directory
PeriLab.IO.neighbors — Method
neighbors(mesh, blocks::Dict{String,BlockParams}, scaling::Vector{Float64}, coor)Compute the neighbor list for each node in a mesh based on their proximity using a BallTree data structure.
Arguments
mesh: A mesh data structure containing the coordinates and other information.blocks::Dict{String,BlockParams}: The blocks of the input deck (horizon per block).scaling::Vector{Float64}: Horizon scaling per direction.coor: A vector of coordinate names along which to compute the neighbor list.
Returns
An array of neighbor lists, where each element represents the neighbors of a node in the mesh.
PeriLab.IO.node_distribution — Function
node_distribution(nlist::NestedNeighborhoodList, size::Int64)Create the distribution of the nodes.
Arguments
nlist::NestedNeighborhoodList: The neighborhood list of the mesh elements.size::Int64: The number of ranks.distribution_type::String: The distribution type.
Returns
distribution::Vector{Vector{Int64}}: The distribution of the nodes.ptc::Vector{Int64}: Defines at which core / rank each node lies.ntype::Dict: The type of the nodes.
PeriLab.IO.open_result_file — Method
open_result_file(result_file::Dict)Opens the result file
Arguments
result_file::Dict: The result file
PeriLab.IO.paraview_specifics — Method
paraview_specifics(dof::Int64)Returns the paraview specific dof
Arguments
dof::Int64: The degrees of freedom
Returns
paraview_specifics::String: The paraview specific dof
PeriLab.IO.read_external_topology — Method
read_external_topology(filename::String)Read external topoloy data from a file and return it as a DataFrame.
Arguments
filename::String: The path to the mesh file.
Returns
external_topology::DataFrame: The external topology data as a DataFrame.
PeriLab.IO.read_input — Method
read_input(filename::String)Reads the input deck from a yaml file
Arguments
filename::String: The name of the yaml file
Returns
- The parsed yaml file (a
Dictfor a valid input deck)
PeriLab.IO.read_input_deck — Method
read_input_deck(filename; directory = dirname(filename), no_strict = false,
raw_deck = nothing)Reads and validates the input deck; returns the typed PeriLabInput. raw_deck is the already parsed YAML of filename; if given, the file is not parsed again.
PeriLab.IO.read_node_sets — Method
read_node_sets(d, path, mesh_df)Node sets of the discretization: from an Exodus mesh, or from Node Sets entries (node id, id list, range a:b, coordinate expression in x/y/z, All, or a node set file).
PeriLab.IO.resolve_block_selection — Method
resolve_block_selection(blocks)Normalises the "Bond Blocks" entry into a list of block indices.
The entry is written as a plain, whitespace separated list of indices in the input deck, e.g. Bond Blocks: 1 3. A single index and an already parsed collection of integers are accepted as well. nothing or an empty entry means "all blocks".
Arguments
blocks: The selection taken from the output parameters
Returns
Union{Nothing,Vector{Int64}}: Block indices, ornothingfor "all blocks"
PeriLab.IO.set_angles — Method
set_angles(blocks::Dict{String,BlockParams})Sets the node angles from the block angles of the input deck.
Arguments
blocks::Dict{String,BlockParams}: The blocks of the input deck
PeriLab.IO.set_dof — Method
set_dof(mesh::DataFrame)Set the degrees of freedom (DOF) for the mesh elements.
Arguments
mesh::DataFrame: The input mesh data represented as a DataFrame.
Returns
dof::Int64: The degrees of freedom (DOF) for the mesh elements.
PeriLab.IO.set_fallback_output_frequency — Method
set_fallback_output_frequency(input::PeriLabInput, nsteps::Int64, step_id::Int64, dt::Float64, fallback_dt::Float64)Sets the output frequencies and counters when a fallback solver with nsteps steps of fallback_dt takes over from steps of dt; see InputDeck.fallback_output_frequencies.
PeriLab.IO.set_output_frequency — Method
set_output_frequency(input::PeriLabInput, nsteps::Int64, step_id::Int64, reuse::Bool)Sets the output frequency.
Arguments
input::PeriLabInput: The typed input decknsteps::Int64: The number of stepsstep_id::Int64: The step id
PeriLab.IO.show_block_summary — Method
show_block_summary(models::Vector{String}, blocks::Dict{String,BlockParams}, log_file::String, silent::Bool, comm::MPI.Comm)Show block summary.
Arguments
models::Vector{String}: The model categories of the stepblocks::Dict{String,BlockParams}: The blocks of the input decklog_file::String: The log filesilent::Bool: The silent flagcomm::MPI.Comm: The Comm_rank
PeriLab.IO.show_mpi_summary — Method
show_mpi_summary(log_file::String, silent::Bool, comm::MPI.Comm)Show MPI summary.
Arguments
log_file::String: The log filesilent::Bool: The silent flagcomm::MPI.Comm: The comm
PeriLab.IO.split_output_fields — Method
split_output_fields(fields::Dict)Splits an output field definition into its nodal, bond and global parts.
Arguments
fields::Dict: The"Fields"entry of an output definition
Returns
nodal::Dict,bond::Dict,global_::Dict
PeriLab.IO.validate_input — Method
validate_input(params; directory = "", no_strict = false) -> (deck, input)Validates a loaded input deck against the typed input declarations. Reports every problem at once and aborts if there is an error. Returns the params["PeriLab"] dict and the typed PeriLabInput.
PeriLab.IO.write_bond_results_in_exodus — Method
write_bond_results_in_exodus(exo, step, output, bond_blocks, block_Id, n_blocks)Writes the bond results in the exodus file, as element variables on the BAR2 blocks.
A bond can carry the same variable types as a point (scalar, vector, tensor); the component selection in output therefore follows the same "dof" / "i_dof" + "j_dof" convention as the nodal output. The values are gathered in the order of the bond connectivity, so bond k of a block always refers to the same element that was written at initialisation.
Because Exodus.jl offers no truth table, the same variable is also written to the material blocks — as zeros.
Arguments
exo::ExodusDatabase: The exodus filestep::Int64: The stepoutput::Dict: The bond output definitionsbond_blocks::AbstractDict{Int64,BondBlock}: The bond blocksblock_Id::AbstractVector{Int64}: Block id per noden_blocks::Int64: Number of material blocks
Returns
exo::ExodusDatabase: The exodus file
PeriLab.IO.write_global_results_in_csv — Method
write_global_results_in_csv(csv_file::IOStream, time::Float64, global_values)Writes the global results to the csv file
Arguments
csv_file::IOStream: The csv fileglobal_values: The global values
PeriLab.IO.write_global_results_in_exodus — Method
write_global_results_in_exodus(exo::ExodusDatabase, step::Int64, global_values)Writes the global results in the exodus file
Arguments
exo::ExodusDatabase: The exodus filestep::Int64: The stepglobal_values: The global values
Returns
exo::ExodusDatabase: The exodus file
PeriLab.IO.write_nodal_results_in_exodus — Method
write_nodal_results_in_exodus(exo::ExodusDatabase, step::Int64, output::Dict)Writes the nodal results in the exodus file
Arguments
exo::ExodusDatabase: The exodus filestep::Int64: The stepoutput::Dict: The output
Returns
exo::ExodusDatabase: The exodus file
PeriLab.IO.write_results — Method
write_results(result_files::Vector{Any}, time::Float64, max_damage::Float64, outputs::Dict)Write results.
Arguments
result_files::Vector{Any}: The result filestime::Float64: The timemax_damage::Float64: The maximum damageoutputs::Dict: The outputs
Returns
result_files::Vector{Any}: The result files
PeriLab.IO.write_step_and_time — Method
write_step_and_time(exo::ExodusDatabase, step::Int64, time::Float64)Writes the step and time in the exodus file
Arguments
exo::ExodusDatabase: The exodus filestep::Int64: The steptime::Float64: The time
Returns
exo::ExodusDatabase: The exodus file
PeriLab.IO.BondBlock — Type
BondBlockHolds everything needed to write one bond block, built once in compute_bond_connectivity.
The three fields are aligned column by column: bond k runs from nodes[k] to the second entry of conn[:, k], and corresponds to entry neighbor_index[k] of the owning node's neighbourhood list. Keeping the neighbour index around is what makes the result output reproduce exactly the order used for the connectivity — otherwise bond values and bond elements silently drift apart.
Bonds are directed, so the same node pair may appear twice, once per direction, each with its own values. The owning node is always conn[1, k].
Fields
conn::Matrix{Int64}:2 x n_bondsBAR2 connectivitynodes::Vector{Int64}: owning node of each bondneighbor_index::Vector{Int64}: position of the bond insidenlist[node]
InputDeck
PeriLab.InputDeck.active_computes — Method
active_computes(computes, field_keys)The compute classes whose Variable is an existing field (directly or as <Variable>NP1); the others are skipped with a warning.
PeriLab.InputDeck.bc_node_set_names — Method
Names of the node sets of a boundary condition (Node Set joined with +).
PeriLab.InputDeck.bc_step_ids — Method
Solver steps a boundary condition applies to, or nothing (all steps).
PeriLab.InputDeck.block_angles — Method
block_angles(name, block, dof)Block rotation: nothing if Angle X is not given, Angle X in 2D, and [Angle X, Angle Y, Angle Z] in 3D (all three are required then).
PeriLab.InputDeck.block_by_id — Method
block_by_id(blocks, block_id) -> (name, block)The block with Block ID block_id.
PeriLab.InputDeck.block_names_and_ids — Method
block_names_and_ids(blocks, mesh_block_ids, mpi) -> (names, ids)Names and IDs of the blocks present in the mesh, ordered by ID. Blocks of the input deck that are missing in the mesh are skipped (with a warning unless running under MPI).
PeriLab.InputDeck.bond_filter — Method
The registered bond filter name, or nothing.
PeriLab.InputDeck.check_for_duplicates — Method
check_for_duplicates(filenames)Check for duplicate filenames.
Arguments
filenames::Vector{String}: The filenames
PeriLab.InputDeck.compute_names — Method
Names of the compute classes, sorted.
PeriLab.InputDeck.contact_blocks — Method
Sorted ids of all blocks that take part in a contact group.
PeriLab.InputDeck.contact_search_frequency — Method
Global search frequency of a contact group; falls back to Globals.
PeriLab.InputDeck.describe — Method
describe(name; template = false)
describe(io, name; template = false)Prints the parameters of a section (e.g. "Solver") or a registered model (e.g. "Correspondence Plastic"). With template = true, prints a YAML block to copy into an input deck: required keys with a placeholder, optional keys commented out with their default; sections of named entries (e.g. "Blocks") get one placeholder entry.
PeriLab.InputDeck.end_time — Method
end_time(s, current_time)End time of the solver step: Final Time, or Additional Time after the current time.
PeriLab.InputDeck.fallback_output_frequencies — Method
fallback_output_frequencies(outputs, nsteps, step_id, frequencies, counters, dt, fallback_dt)Output frequencies and counters, in values(outputs) order, when a fallback solver with nsteps steps of fallback_dt takes over from a solver with steps of dt and the given frequencies and counters. Fallback Number of Output Steps (which wins) and Fallback Output Frequency set the frequency like their counterparts; without them an output keeps its interval in time. The counter keeps the time since the last output. Frequencies are clamped to nsteps.
PeriLab.InputDeck.fem_degree — Method
Polynomial degrees of the FEM elements as written: one value, or one per direction.
PeriLab.InputDeck.gcode_block_ids — Method
Gcode block assignment: block id => condition, or nothing.
PeriLab.InputDeck.generate_parameter_docs — Method
generate_parameter_docs(dir)Writes the input reference pages input_sections.md (the deck's sections) and input_models.md (shared keys and every registered model per category, plus the pre-calculation switches) into dir and returns their paths.
PeriLab.InputDeck.mesh_node_fields — Method
mesh_node_fields(d, directory)Node fields the mesh of d defines before it is read: the header columns of a text mesh (e.g. Bulk_Modulus); nothing for Exodus meshes, whose nodal variables are only known once the mesh is read.
PeriLab.InputDeck.mesh_scaling — Method
Horizon scaling per direction, 1.0 where not given.
PeriLab.InputDeck.model_options — Method
Active model categories, in the order the models are evaluated.
PeriLab.InputDeck.output_fieldnames — Method
output_fieldnames(variables, field_keys, compute_names, output_type)The selected output variables as [name, "Constant"] or [name, "NP1"]. CSV outputs only take compute classes.
PeriLab.InputDeck.output_filenames — Method
output_filenames(outputs, output_dir)Result file names in values(outputs) order (.csv for CSV outputs, .e otherwise). Aborts if a name is used twice.
PeriLab.InputDeck.output_frequencies — Method
output_frequencies(outputs, nsteps, step_id)Output frequency (write every n-th step) per output, in values(outputs) order. Number of Output Steps wins over Output Frequency; a value given as a string holds one entry per solver step; the result is clamped to nsteps.
PeriLab.InputDeck.parse_contact — Method
parse_contact(raw, path, ctx)Reads the Contact section: Globals (search settings for all contact models, defaults if absent) and the named contact models; contact models cannot be combined with +.
PeriLab.InputDeck.parse_models — Method
Typed models of section (e.g. "Material Models"), keyed by name; errors go to ctx.
PeriLab.InputDeck.parse_pre_calculation_switches — Method
parse_pre_calculation_switches(raw, path, ctx)Pre-calculation switches (name: true/false); names are the registered pre-calculation models.
PeriLab.InputDeck.parse_single_models — Method
Typed models of section that cannot be combined with +.
PeriLab.InputDeck.read_input — Function
read_input(deck, directory = ""; strict = true) -> (input, ctx)Reads the content of the PeriLab: key of an input deck. directory is the deck's directory (for relative data files). All problems are collected in ctx; input is nothing if any of them is an error. Does not abort — call ParameterSpec.report!(ctx) for that.
PeriLab.InputDeck.register_bond_filter — Method
register_bond_filter(name, run; required = String[])Makes bond filter name available as Type of a Bond Filters entry. run is called as run(nnodes, data, filter::BondFilterParams, nlist, dof) and returns the bond flags and the filter normal. required lists the BondFilterParams keys the filter needs (Z components only in 3D are checked by the filter itself). Call it from the filter module's __init__().
PeriLab.InputDeck.solver_name — Method
Registered name of the solver whose options are o.
PeriLab.InputDeck.solver_step — Method
Solver parameters of step step_id (-1: the single Solver).
PeriLab.InputDeck.solver_steps — Method
Step IDs to run, sorted; [-1] for a single Solver.
PeriLab.InputDeck.start_time — Method
start_time(s, current_time)Start time of the solver step: Initial Time, or the current time if that is later or Initial Time is not given (later steps of a multistep run).
PeriLab.InputDeck.step_value — Method
A value given per solver step as a string ("n1 n2") is the entry of step_id.
PeriLab.InputDeck.to_json_schema — Method
to_json_schema(PeriLabInput)JSON Schema (draft 2020-12) of an input deck, generated from the @params declarations and the registered models (installed and licensed modules). Model entries list the category's shared keys; the keys of a single named model are added for exactly that name (models combined with + are checked only for the shared keys).
PeriLab.InputDeck.BondFilter — Type
A registered bond filter: the YAML keys its Type needs and the function that applies it.
PeriLab.InputDeck.CalculationOptions — Type
Which stress and strain fields the models compute.
PeriLab.InputDeck.ContactInput — Type
ContactInputThe typed Contact section: globals and the contact models by name, each a ParameterSpec.WithBase (shared keys in base, the model's own keys in model, its Type in name).
PeriLab.InputDeck.FallbackParams — Type
FallbackParamsThe solver that takes over when a step of the main solver fails; it recomputes the failed step and runs to the final time of the solver step.
PeriLab.InputDeck.PeriLabInput — Type
PeriLabInputA validated input deck. materials holds the typed material models (ParameterSpec.WithBase), keyed by name; damages, additives and degradations hold the typed damage, additive and degradation models; thermals the typed thermal models (WithBase); pre_calculation_global and pre_calculations the pre-calculation switches; globals is the unvalidated Globals escape hatch.
PeriLab.InputDeck.SolverOptions — Type
SolverOptionsOptions section of one solver. A solver module declares @params struct MyParams <: SolverOptions (explicit solvers by convention with safety_factor, fixed_dt (-1 if not given) and numerical_damping) and registers it with register_solver(name, MyParams) in its __init__(); the input deck names the solver by that key inside Solver or a Multistep Solver step.
PeriLab.InputDeck.SolverParams — Type
Used for Solver and for every step of Multistep Solver.