Model Factory - Functions

Index

Models

PeriLab.Solver_Manager.Model_Factory.compute_crititical_time_step — Method
compute_crititical_time_step(block_nodes::Dict{Int64,Vector{Int64}}, mechanical::Bool, thermo::Bool)

Calculate the critical time step for a simulation considering both mechanical and thermodynamic aspects.

This function computes the critical time step by considering mechanical and thermodynamic properties of different blocks. The resulting critical time step is based on the smallest critical time step found among the blocks.

Arguments

  • block_nodes::Dict{Int64, Vector{Int64}}: A dictionary mapping block IDs to collections of nodes.
  • mechanical::Bool: If true, mechanical properties are considered in the calculation.
  • thermo::Bool: If true, thermodynamic properties are considered in the calculation.

Returns

  • Float64: The calculated critical time step based on the smallest critical time step found among the blocks.

Dependencies

This function may depend on the following functions:

  • compute_thermodynamic_critical_time_step: Used if thermo is true to calculate thermodynamic critical time steps.
  • compute_mechanical_critical_time_step: Used if mechanical is true to calculate mechanical critical time steps.
  • The availability of specific properties from the data manager module.

Errors

  • If required properties are not available in the data manager, it may raise an error message.
source
PeriLab.Solver_Manager.Model_Factory.compute_mechanical_critical_time_step — Method
compute_mechanical_critical_time_step(nodes::AbstractVector{Int64}, bulk_modulus::Float64)

Calculate the critical time step for a mechanical simulation using a bond-based approximation [43].

This function iterates over a collection of nodes and computes the critical time step for each node based on the given input data and parameters.

Arguments

  • nodes::AbstractVector{Int64}: The collection of nodes to calculate the critical time step for.
  • bulk_modulus::Float64: The bulk modulus used in the calculations.

Returns

  • Float64: The calculated critical time step for the mechanical simulation.

Dependencies

This function depends on the following data fields from the Data_Manager module:

  • get_nlist(): Returns the neighbor list.
  • get_field("Density"): Returns the density field.
  • get_field("Bond Length"): Returns the bond distance field.
  • get_field("Volume"): Returns the volume field.
  • get_field("Horizon"): Returns the horizon field.
source
PeriLab.Solver_Manager.Model_Factory.compute_models — Method
compute_models(block_nodes::Dict{Int64,Vector{Int64}}, dt::Float64, time::Float64, options::Vector{String}, synchronise_field)

Computes the material point models

Arguments

  • block_nodes::Dict{Int64,Vector{Int64}}: The block nodes
  • dt::Float64: The time step
  • time::Float64: The current time of the solver
  • options::Vector{String}: The options
  • synchronise_field: The synchronise field
source
PeriLab.Solver_Manager.Model_Factory.compute_stiff_matrix_compatible_models — Method
compute_stiff_matrix_compatible_models(block_nodes::Dict{Int64,Vector{Int64}}, dt::Float64, time::Float64, options::Vector{String}, synchronise_field)

Computes the models models that are compatible with the stiffness matrix calculation.

Arguments

  • block_nodes::Dict{Int64,Vector{Int64}}: The block nodes
  • dt::Float64: The time step
  • time::Float64: The current time of the solver
  • options::Vector{String}: The options
  • synchronise_field: The synchronise field
source
PeriLab.Solver_Manager.Model_Factory.compute_thermodynamic_critical_time_step — Method
compute_thermodynamic_critical_time_step(nodes::AbstractVector{Int64}, lambda::Float64, Cv::Float64)

Calculate the critical time step for a thermodynamic simulation based on [28].

This function iterates over a collection of nodes and computes the critical time step for each node using provided input data and parameters.

Arguments

  • nodes::AbstractVector{Int64}: The collection of nodes to calculate the critical time step for.
  • lambda::Float64: The material parameter used in the calculations.
  • Cv::Float64: The heat capacity at constant volume used in the calculations.

Returns

  • Float64: The calculated critical time step for the thermodynamic simulation.

Dependencies

This function depends on the following data fields from the Data_Manager module:

  • get_nlist(): Returns the neighbor list.
  • get_field("Density"): Returns the density field.
  • get_field("Bond Length"): Returns the bond distance field.
  • get_field("Volume"): Returns the volume field.
  • get_field("Number of Neighbors"): Returns the number of neighbors field.
source
PeriLab.Solver_Manager.Model_Factory.get_cs_denominator — Method
get_cs_denominator(volume::AbstractVector{Float64}, undeformed_bond::AbstractVector{Float64})

Calculate the denominator for the critical time step calculation.

Arguments

  • volume::AbstractVector{Float64}: The volume field.
  • undeformed_bond::Union{SubArray,Vector{Float64},Vector{Int64}}: The undeformed bond field.

Returns

  • Float64: The denominator for the critical time step calculation.
source
PeriLab.Solver_Manager.Model_Factory.init_models — Method
init_models(input::PeriLabInput, block_nodes::Dict{Int64,Vector{Int64}}, models::Vector{String}, all_models::Vector{String}, calculation::CalculationOptions, synchronise_field)

Initialize models

Arguments

  • input::PeriLabInput: The typed input deck.
  • block_nodes::Dict{Int64,Vector{Int64}}: block nodes.
  • models::Vector{String}: Model categories of the step.
  • all_models::Vector{String}: Model categories of all steps.
  • calculation::CalculationOptions: Which stress and strain fields to create.
source
PeriLab.Solver_Manager.Model_Factory.read_properties — Method
read_properties(input::PeriLabInput, material_model::Bool)

Stores the typed models every block names (material, damage, additive, degradation, thermal, pre-calculation) in Data_Manager; aborts on undefined model names.

Arguments

  • input::PeriLabInput: The typed input deck.
  • material_model::Bool: Material model.
source
PeriLab.Solver_Manager.Model_Factory.set_heat_capacity — Method
set_heat_capacity(input::PeriLabInput, block_nodes::Dict, heat_capacity::NodeScalarField{Float64})

Sets the heat capacity of the nodes in the dictionary.

Arguments

  • input::PeriLabInput: The typed input deck (Specific Heat Capacity of the blocks)
  • block_nodes::Dict: The block nodes
  • heat_capacity::NodeScalarField{Float64}: The heat capacity array

Returns

  • heat_capacity::SubArray: The heat capacity array
source
PeriLab.Solver_Manager.Model_Factory.test_timestep — Method
test_timestep(t::Float64, critical_time_step::Float64)

Compare a time step t with a critical time step critical_time_step and update critical_time_step if t is smaller.

Arguments

  • t::Float64: The time step to compare with critical_time_step.
  • critical_time_step::Float64: The current critical time step.

Returns

  • critical_time_step::Float64: The updated critical time step, which is either the original critical_time_step or t, whichever is smaller.
source

Additive

PeriLab.Solver_Manager.Model_Factory.Additive.compute_model — Method
compute_model(nodes::AbstractVector{Int64}, p, block::Int64, time::Float64, dt::Float64)

Computes the additive model of a block.

Arguments

  • nodes::AbstractVector{Int64}: The nodes
  • p: The typed additive model of the block
  • block::Int64: The block
  • time::Float64: The current time
  • dt::Float64: The time step
source
PeriLab.Solver_Manager.Model_Factory.Additive.init_model — Method
init_model(nodes::AbstractVector{Int64}, block::Int64)

Initialize the additive model of a block (Data_Manager.get_block_models(block).additive).

Arguments

  • nodes::AbstractVector{Int64}: Nodes for the additive model.
  • block::Int64: Block identifier for the additive model.
source

Damage

PeriLab.Solver_Manager.Model_Factory.Damage.compute_model — Method
compute_model(nodes, damage, block, time, dt)

Binds the damage's dependent values, computes the block's damage model and the damage index.

Arguments

  • nodes::AbstractVector{Int64}: The nodes
  • damage::BlockDamage: The typed damage model of the block
  • block::Int64: The block
  • time::Float64: The current time
  • dt::Float64: The time step
source
PeriLab.Solver_Manager.Model_Factory.Damage.critical_value_lookup — Method
critical_value_lookup(critical_value, inter_block_damage::Bool, block::Int64)

Returns (iID, neighborID) -> critical value of a bond: the Critical_Value node field if it exists, else the interblock matrix, else the Critical Value parameter. Each case is its own closure type, so a bond loop taking it as an argument is type stable.

source
PeriLab.Solver_Manager.Model_Factory.Damage.damage_index — Method
damage_index(::Union{SubArray, Vector{Int64})

Function calculates the damage index related to the neighborhood volume for a set of corresponding nodes. The damage index is defined as damaged volume in relation the neighborhood volume. damageIndex = sumi (brokenBondsi * volume_i) / volumeNeighborhood

Arguments

  • nodes::AbstractVector{Int64}: corresponding nodes to this model
source
PeriLab.Solver_Manager.Model_Factory.Damage.init_model — Method
init_model(nodes::AbstractVector{Int64}, block::Int64)

Initializes the damage model of a block (Data_Manager.get_block_models(block).damage), its interface and anisotropic critical values.

Arguments

  • nodes::AbstractVector{Int64}: Nodes of the block.
  • block::Int64: Block identifier.
source

Degradation

PeriLab.Solver_Manager.Model_Factory.Degradation.compute_model — Method
compute_model(nodes::AbstractVector{Int64}, p, block::Int64, time::Float64, dt::Float64)

Computes the degradation model of a block.

Arguments

  • nodes::AbstractVector{Int64}: The nodes
  • p: The typed degradation model of the block
  • block::Int64: The block
  • time::Float64: The current time
  • dt::Float64: The time step
source
PeriLab.Solver_Manager.Model_Factory.Degradation.init_model — Method
init_model(nodes::AbstractVector{Int64}, block::Int64)

Initialize the degradation model of a block (Data_Manager.get_block_models(block).degradation).

Arguments

  • nodes::AbstractVector{Int64}: Nodes for the degradation model.
  • block::Int64: Block identifier for the degradation model.
source

Material

PeriLab.Solver_Manager.Model_Factory.Material.compute_model — Method
compute_model(nodes::AbstractVector{Int64}, material, block::Int64, time::Float64, dt::Float64)

Computes the material models

Arguments

  • nodes::AbstractVector{Int64}: The nodes
  • material::BlockMaterial: The typed block material
  • block::Int64: The block
  • time::Float64: The current time
  • dt::Float64: The time step
source
PeriLab.Solver_Manager.Model_Factory.Material.elastic_moduli — Method
elastic_moduli(base, bond_based, dof)

Completes the isotropic elastic constants from any two of bulk modulus, Young's modulus, shear modulus and Poisson's ratio (bond-based models: Poisson's ratio is fixed). Moduli given per node (fields Bulk_Modulus, …) or a State Factor ID make the result per node, and the node fields are updated. Returns nothing for anisotropic, orthotropic and transverse isotropic materials (stiffness matrix; completeness is checked when the input is read).

source
PeriLab.Solver_Manager.Model_Factory.Material.MaterialBaseParams — Type
MaterialBaseParams

Keys every material model may use (read from the same YAML block as the model's own keys): symmetry, elastic constants, and options shared by the material framework. Which elastic constants are needed depends on the model and the symmetry; they are completed at initialisation.

source

Thermal

PeriLab.Solver_Manager.Model_Factory.Thermal.compute_model — Method
compute_model(nodes::AbstractVector{Int64}, thermal::WithBase, block::Int64, time::Float64, dt::Float64)

Computes every part of the block's thermal model, in deck order.

Arguments

  • nodes::AbstractVector{Int64}: The nodes
  • thermal::WithBase: The typed thermal model of the block (thermal.base: Thermal Conductivity)
  • block::Int64: The block
  • time::Float64: The current time
  • dt::Float64: The time step
source

Pre_Calculation

PeriLab.Solver_Manager.Model_Factory.Pre_Calculation.compute_model — Method
compute_model(nodes::AbstractVector{Int64}, names::Vector{String}, block::Int64, time::Float64, dt::Float64)

Computes the block's active pre-calculations in run order.

Arguments

  • nodes::AbstractVector{Int64}: The nodes
  • names::Vector{String}: The active pre-calculations of the block
  • block::Int64: The block
  • time::Float64: The current time
  • dt::Float64: The time step
source

Surface_Correction