Model Factory - Functions
Index
PeriLab.Solver_Manager.Model_Factory.Additive.compute_modelPeriLab.Solver_Manager.Model_Factory.Additive.fields_for_local_synchronizationPeriLab.Solver_Manager.Model_Factory.Additive.init_fieldsPeriLab.Solver_Manager.Model_Factory.Additive.init_modelPeriLab.Solver_Manager.Model_Factory.Damage.compute_modelPeriLab.Solver_Manager.Model_Factory.Damage.damage_indexPeriLab.Solver_Manager.Model_Factory.Damage.fields_for_local_synchronizationPeriLab.Solver_Manager.Model_Factory.Damage.init_aniso_crit_valuesPeriLab.Solver_Manager.Model_Factory.Damage.init_fieldsPeriLab.Solver_Manager.Model_Factory.Damage.init_interface_crit_valuesPeriLab.Solver_Manager.Model_Factory.Damage.init_modelPeriLab.Solver_Manager.Model_Factory.Degradation.compute_modelPeriLab.Solver_Manager.Model_Factory.Degradation.fields_for_local_synchronizationPeriLab.Solver_Manager.Model_Factory.Degradation.init_fieldsPeriLab.Solver_Manager.Model_Factory.Degradation.init_modelPeriLab.Solver_Manager.Model_Factory.Material.check_material_symmetryPeriLab.Solver_Manager.Model_Factory.Material.compute_modelPeriLab.Solver_Manager.Model_Factory.Material.determine_isotropic_parameterPeriLab.Solver_Manager.Model_Factory.Material.distribute_force_densitiesPeriLab.Solver_Manager.Model_Factory.Material.fields_for_local_synchronizationPeriLab.Solver_Manager.Model_Factory.Material.init_fieldsPeriLab.Solver_Manager.Model_Factory.Material.init_modelPeriLab.Solver_Manager.Model_Factory.Pre_Calculation.check_dependenciesPeriLab.Solver_Manager.Model_Factory.Pre_Calculation.compute_modelPeriLab.Solver_Manager.Model_Factory.Pre_Calculation.init_fieldsPeriLab.Solver_Manager.Model_Factory.Pre_Calculation.init_modelPeriLab.Solver_Manager.Model_Factory.Thermal.compute_modelPeriLab.Solver_Manager.Model_Factory.Thermal.init_fieldsPeriLab.Solver_Manager.Model_Factory.Thermal.init_modelPeriLab.Solver_Manager.Model_Factory.add_modelPeriLab.Solver_Manager.Model_Factory.compute_crititical_time_stepPeriLab.Solver_Manager.Model_Factory.compute_mechanical_critical_time_stepPeriLab.Solver_Manager.Model_Factory.compute_modelsPeriLab.Solver_Manager.Model_Factory.compute_stiff_matrix_compatible_modelsPeriLab.Solver_Manager.Model_Factory.compute_thermodynamic_critical_time_stepPeriLab.Solver_Manager.Model_Factory.get_block_model_definitionPeriLab.Solver_Manager.Model_Factory.get_cs_denominatorPeriLab.Solver_Manager.Model_Factory.init_modelsPeriLab.Solver_Manager.Model_Factory.read_propertiesPeriLab.Solver_Manager.Model_Factory.set_heat_capacityPeriLab.Solver_Manager.Model_Factory.test_timestep
Models
PeriLab.Solver_Manager.Model_Factory.add_model — Function
add_model(model_name::String)Includes the models in the Data_Manager and checks if the model definition is correct or not.
Arguments
model_name::String: The block nodes
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: Iftrue, mechanical properties are considered in the calculation.thermo::Bool: Iftrue, 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 ifthermoistrueto calculate thermodynamic critical time steps.compute_mechanical_critical_time_step: Used ifmechanicalistrueto 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.
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 [38].
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.
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 nodesdt::Float64: The time steptime::Float64: The current time of the solveroptions::Vector{String}: The optionssynchronise_field: The synchronise field
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 nodesdt::Float64: The time steptime::Float64: The current time of the solveroptions::Vector{String}: The optionssynchronise_field: The synchronise field
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 [24].
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.
PeriLab.Solver_Manager.Model_Factory.get_block_model_definition — Function
get_block_model_definition(params::Dict, block_id_list::Int64, prop_keys::Vector{String}, properties)Get block model definition.
Special case for pre calculation. It is set to all blocks, if no block definition is defined, but pre calculation is.
Arguments
params::Dict: Parameters.block_id_list::Vector{Int64}: List of block id's.prop_keys::Vector{String}: Property keys.properties: Properties function.
Returns
properties: Properties function.
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.
PeriLab.Solver_Manager.Model_Factory.init_models — Method
init_models(params::Dict, block_nodes::Dict{Int64,Vector{Int64}}, solver_options::Dict)Initialize models
Arguments
params::Dict: Parameters.block_nodes::Dict{Int64,Vector{Int64}}: block nodes.solver_options::Dict: Solver options.
PeriLab.Solver_Manager.Model_Factory.read_properties — Method
read_properties(params::Dict, material_model::Bool)Read properties of material.
Arguments
params::Dict: Parameters.material_model::Bool: Material model.
PeriLab.Solver_Manager.Model_Factory.set_heat_capacity — Method
set_heat_capacity(params::Dict, block_nodes::Dict, heat_capacity::NodeScalarField{Float64})Sets the heat capacity of the nodes in the dictionary.
Arguments
params::Dict: The parametersblock_nodes::Dict: The block nodesheat_capacity::NodeScalarField{Float64}: The heat capacity array
Returns
heat_capacity::SubArray: The heat capacity array
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 withcritical_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 originalcritical_time_steport, whichever is smaller.
Additive
PeriLab.Solver_Manager.Model_Factory.Additive.compute_model — Method
compute_model(nodes::AbstractVector{Int64}, model_param::Dict, block::Int64, time::Float64, dt::Float64)Computes the addtive models
Arguments
nodes::AbstractVector{Int64}: The nodesmodel_param::Dict: The model parametersblock::Int64: The blocktime::Float64: The current timedt::Float64: The time step
PeriLab.Solver_Manager.Model_Factory.Additive.fields_for_local_synchronization — Method
fields_for_local_synchronization(model, block)Defines all synchronization fields for local synchronization
Arguments
model::String: Model class.block::Int64: block ID
PeriLab.Solver_Manager.Model_Factory.Additive.init_fields — Method
init_fields()Initialize additive model fields
PeriLab.Solver_Manager.Model_Factory.Additive.init_model — Method
init_model(nodes::AbstractVector{Int64}, block::Int64)Initialize the additive models.
Arguments
nodes::AbstractVector{Int64}: Nodes for the additive model.block::Int64: Block identifier for the additive model.
Example
init_model(my_data_manager, [1, 2, 3], 1)Damage
PeriLab.Solver_Manager.Model_Factory.Damage.compute_model — Method
compute_model(nodes::AbstractVector{Int64}, model_param::Dict, block::Int64, time::Float64, dt::Float64)Computes the damage model
Arguments
nodes::AbstractVector{Int64}: The nodesmodel_param::Dict: The model parametersblock::Int64: The blocktime::Float64: The current timedt::Float64: The time step
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
PeriLab.Solver_Manager.Model_Factory.Damage.fields_for_local_synchronization — Method
fields_for_local_synchronization(model, block)Defines all synchronization fields for local synchronization
Arguments
model::String: Model class.block::Int64: block ID
PeriLab.Solver_Manager.Model_Factory.Damage.init_aniso_crit_values — Method
init_aniso_crit_values(params::Dict, block_id::Int64)Initialize the anisotropic critical values
Arguments
params::Dict: The parametersblock_id::Int64: current block
PeriLab.Solver_Manager.Model_Factory.Damage.init_fields — Method
init_fields()Initialize damage model fields
Arguments
params::Dict: Parameters.
PeriLab.Solver_Manager.Model_Factory.Damage.init_interface_crit_values — Method
init_interface_crit_values(params::Dict, block_id::Int64)Initialize the critical values
Arguments
params::Dict: The parametersblock_id::Int64: current block
PeriLab.Solver_Manager.Model_Factory.Damage.init_model — Method
init_model(nodes::AbstractVector{Int64}, block::Int64)Initialize the damage models.
Arguments
nodes::AbstractVector{Int64}: Nodes for the degradation model.block::Int64: Block identifier for the degradation model.
Example
init_model(my_data_manager, [1, 2, 3], 1)Degradation
PeriLab.Solver_Manager.Model_Factory.Degradation.compute_model — Method
compute_model(nodes::AbstractVector{Int64}, model_param::Dict, block::Int64, time::Float64, dt::Float64)Computes the degradation models
Arguments
nodes::AbstractVector{Int64}: The nodesmodel_param::Dict: The model parametersblock::Int64: The blocktime::Float64: The current timedt::Float64: The time step
PeriLab.Solver_Manager.Model_Factory.Degradation.fields_for_local_synchronization — Method
fields_for_local_synchronization(model, block)Defines all synchronization fields for local synchronization
Arguments
model::String: Model class.block::Int64: block ID
PeriLab.Solver_Manager.Model_Factory.Degradation.init_fields — Method
init_fields()
Initialize model fields
PeriLab.Solver_Manager.Model_Factory.Degradation.init_model — Method
init_model(nodes::AbstractVector{Int64}, block::Int64)Initialize a degradation models.
Arguments
nodes::AbstractVector{Int64}: Nodes for the degradation model.block::Int64: Block identifier for the degradation model.
Example
init_model(my_data_manager, [1, 2, 3], 1)Material
PeriLab.Solver_Manager.Model_Factory.Material.check_material_symmetry — Method
check_material_symmetry(dof::Int64, prop::Dict)Check the symmetry of the material.
Arguments
dof::Int64: The degree of freedom.prop::Dict: The material property.
Returns
prop::Dict: The material property.
PeriLab.Solver_Manager.Model_Factory.Material.compute_model — Method
compute_model(nodes::AbstractVector{Int64}, model_param::Dict{String,Any}, block::Int64, time::Float64, dt::Float64)Computes the material models
Arguments
nodes::AbstractVector{Int64}: The nodesmodel_param::Dict{String,Any}: The model parametersblock::Int64: The blocktime::Float64: The current timedt::Float64: The time step
PeriLab.Solver_Manager.Model_Factory.Material.determine_isotropic_parameter — Method
determine_isotropic_parameter(prop::Dict)Determine the isotropic parameter.
Arguments
prop::Dict: The material property.
Returns
prop::Dict: The material property.
PeriLab.Solver_Manager.Model_Factory.Material.distribute_force_densities — Method
distribute_force_densities(nodes::AbstractVector{Int64})Distribute the force densities.
Arguments
nodes::AbstractVector{Int64}: The nodes.
PeriLab.Solver_Manager.Model_Factory.Material.fields_for_local_synchronization — Method
fields_for_local_synchronization(model, block)Defines all synchronization fields for local synchronization
Arguments
model::String: Model class.block::Int64: block id
PeriLab.Solver_Manager.Model_Factory.Material.init_fields — Method
init_fields()Initialize material model fields
PeriLab.Solver_Manager.Model_Factory.Material.init_model — Method
init_model(nodes::Union{SubArray,Vector{Int64}, block::Int64)Initializes the material model.
Arguments
nodes::AbstractVector{Int64}: The nodes.block::Int64: Block.
Thermal
PeriLab.Solver_Manager.Model_Factory.Thermal.compute_model — Method
compute_model(nodes::AbstractVector{Int64}, model_param::Dict, block::Int64, time::Float64, dt::Float64)Computes the thermal models
Arguments
nodes::AbstractVector{Int64}: The nodesmodel_param::Dict: The model parametersblock::Int64: The blocktime::Float64: The current timedt::Float64: The time step
PeriLab.Solver_Manager.Model_Factory.Thermal.init_fields — Method
init_fields()Initialize thermal model fields
PeriLab.Solver_Manager.Model_Factory.Thermal.init_model — Method
init_model(nodes::Union{SubArray,Vector{Int64}, block::Int64)Initializes the thermal model.
Arguments
nodes::AbstractVector{Int64}: The nodes.block::Int64: Block.
Pre_Calculation
PeriLab.Solver_Manager.Model_Factory.Pre_Calculation.check_dependencies — Method
check_dependencies(block_nodes::Dict{Int64,Vector{Int64}}Check if materials are used which needs a form of pre calculation. If so, the option will be set.
Arguments
block_nodes::Dict{Int64,Vector{Int64}}: block nodes.
PeriLab.Solver_Manager.Model_Factory.Pre_Calculation.compute_model — Method
compute_model(nodes::AbstractVector{Int64}, model_param::Dict, block::Int64, time::Float64, dt::Float64)Computes the pre calculation models
Arguments
nodes::AbstractVector{Int64}: The nodesmodel_param::Dict: The model parametersblock::Int64: The blocktime::Float64: The current timedt::Float64: The time step
PeriLab.Solver_Manager.Model_Factory.Pre_Calculation.init_fields — Method
init_fields()Initializes the fields.
PeriLab.Solver_Manager.Model_Factory.Pre_Calculation.init_model — Method
init_model(nodes::Union{SubArray,Vector{Int64}, block::Int64)Initializes the model.
Arguments
nodes::AbstractVector{Int64}: The nodes.block::Int64: Block.