diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 2409ad74..f5cb121c 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.10.5","generation_timestamp":"2024-09-11T14:08:11","documenter_version":"1.7.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.5","generation_timestamp":"2024-09-11T14:12:02","documenter_version":"1.7.0"}} \ No newline at end of file diff --git a/dev/api_reference/index.html b/dev/api_reference/index.html index 3647289a..9f8ab6fa 100644 --- a/dev/api_reference/index.html +++ b/dev/api_reference/index.html @@ -4,18 +4,18 @@ BBMaterial{NoCorrection}() julia> mat = BBMaterial{EnergySurfaceCorrection}() -BBMaterial{EnergySurfaceCorrection}()
BBMaterial{Correction}

Material type for the bond-based peridynamics formulation.

Type Parameters

Allowed material parameters

When using material! on a Body with BBMaterial, then the following parameters are allowed:

Poisson's ratio and bond-based peridynamics

In bond-based peridynamics, the Poisson's ratio is limited to 1/4 for 3D simulations. Therefore the specification of this keyword is not allowed when using material!, as it is hardcoded to nu = 1/4.

Allowed export fields

When specifying the fields keyword of Job for a Body with BBMaterial, the following fields are allowed:

source
Peridynamics.OSBMaterialType
OSBMaterial()
+BBMaterial{EnergySurfaceCorrection}()

BBMaterial{Correction}

Material type for the bond-based peridynamics formulation.

Type Parameters

  • Correction: A correction algorithm type. See the constructor docs for more informations.

Allowed material parameters

When using material! on a Body with BBMaterial, then the following parameters are allowed:

  • horizon::Float64: Radius of point interactions
  • rho::Float64: Density
  • E::Float64: Young's modulus
  • Gc::Float64: Critical energy release rate
  • epsilon_c::Float64: Critical strain
Poisson's ratio and bond-based peridynamics

In bond-based peridynamics, the Poisson's ratio is limited to 1/4 for 3D simulations. Therefore the specification of this keyword is not allowed when using material!, as it is hardcoded to nu = 1/4.

Allowed export fields

When specifying the fields keyword of Job for a Body with BBMaterial, the following fields are allowed:

  • position::Matrix{Float64}: Position of each point
  • displacement::Matrix{Float64}: Displacement of each point
  • velocity::Matrix{Float64}: Velocity of each point
  • velocity_half::Matrix{Float64}: Velocity parameter for Verlet time solver
  • acceleration::Matrix{Float64}: Acceleration of each point
  • b_int::Matrix{Float64}: Internal force density of each point
  • b_ext::Matrix{Float64}: External force density of each point
  • damage::Vector{Float64}: Damage of each point
  • n_active_bonds::Vector{Int}: Number of intact bonds of each point
source
Peridynamics.OSBMaterialType
OSBMaterial()
 OSBMaterial{Correction}()

A material type used to assign the material of a Body with the ordinary state-based formulation of peridynamics.

Possible correction methods are:

Examples

julia> mat = OSBMaterial()
 OSBMaterial{NoCorrection}()
 
 julia> mat = OSBMaterial{EnergySurfaceCorrection}()
-OSBMaterial{EnergySurfaceCorrection}()

OSBMaterial{Correction}

Material type for the ordinary state-based peridynamics formulation.

Type Parameters

  • Correction: A correction algorithm type. See the constructor docs for more informations.

Allowed material parameters

When using material! on a Body with OSBMaterial, then the following parameters are allowed:

  • horizon::Float64: Radius of point interactions
  • rho::Float64: Density
  • E::Float64: Young's modulus
  • nu::Float64: Poisson's ratio
  • Gc::Float64: Critical energy release rate
  • epsilon_c::Float64: Critical strain

Allowed export fields

When specifying the fields keyword of Job for a Body with OSBMaterial, the following fields are allowed:

  • position::Matrix{Float64}: Position of each point
  • displacement::Matrix{Float64}: Displacement of each point
  • velocity::Matrix{Float64}: Velocity of each point
  • velocity_half::Matrix{Float64}: Velocity parameter for Verlet time solver
  • acceleration::Matrix{Float64}: Acceleration of each point
  • b_int::Matrix{Float64}: Internal force density of each point
  • b_ext::Matrix{Float64}: External force density of each point
  • damage::Vector{Float64}: Damage of each point
  • n_active_bonds::Vector{Int}: Number of intact bonds of each point
source
Peridynamics.NOSBMaterialType
NOSBMaterial(; maxdmg, maxjacobi, corr)

A material type used to assign the material of a Body with the local continuum consistent (correspondence) formulation of non-ordinary state-based peridynamics.

Keywords

  • maxdmg::Float64: Maximum value of damage a point is allowed to obtain. If this value is exceeded, all bonds of that point are broken because the deformation gradient would then possibly contain NaN values. (default: 0.95)
  • maxjacobi::Float64: Maximum value of the Jacobi determinant. If this value is exceeded, all bonds of that point are broken. (default: 1.03)
  • corr::Float64: Correction factor used for zero-energy mode stabilization. The stabilization algorithm of Silling (2017) is used. (default: 100.0)
Stability of fracture simulations

This formulation is known to be not suitable for fracture simultations without stabilization of the zero-energy modes. Therefore be careful when doing fracture simulations and try out different paremeters for maxdmg, maxjacobi, and corr.

Examples

julia> mat = NOSBMaterial()
-NOSBMaterial(maxdmg=0.95, maxjacobi=1.03, corr=100.0)

NOSBMaterial

Material type for the local continuum consistent (correspondence) formulation of non-ordinary state-based peridynamics.

Fields

  • maxdmg::Float64: Maximum value of damage a point is allowed to obtain. See the constructor docs for more informations.
  • maxjacobi::Float64: Maximum value of the Jacobi determinant. See the constructor docs for more informations.
  • corr::Float64: Correction factor used for zero-energy mode stabilization. See the constructor docs for more informations.

Allowed material parameters

When using material! on a Body with NOSBMaterial, then the following parameters are allowed:

  • horizon::Float64: Radius of point interactions
  • rho::Float64: Density
  • E::Float64: Young's modulus
  • nu::Float64: Poisson's ratio
  • Gc::Float64: Critical energy release rate
  • epsilon_c::Float64: Critical strain

Allowed export fields

When specifying the fields keyword of Job for a Body with NOSBMaterial, the following fields are allowed:

  • position::Matrix{Float64}: Position of each point
  • displacement::Matrix{Float64}: Displacement of each point
  • velocity::Matrix{Float64}: Velocity of each point
  • velocity_half::Matrix{Float64}: Velocity parameter for Verlet time solver
  • acceleration::Matrix{Float64}: Acceleration of each point
  • b_int::Matrix{Float64}: Internal force density of each point
  • b_ext::Matrix{Float64}: External force density of each point
  • damage::Vector{Float64}: Damage of each point
  • n_active_bonds::Vector{Int}: Number of intact bonds of each point
source
Peridynamics.CKIMaterialType
CKIMaterial()

A material type used to assign the material of a Body with the continuum-kinematics-inspired peridynamics fomulation.

Examples

julia> mat = CKIMaterial()
-CKIMaterial()

CKIMaterial

Material type for the continuum-kinematics-inspired peridynamics framework.

Allowed material parameters

When using material! on a Body with CKIMaterial, then the following parameters are allowed:

  • horizon::Float64: Radius of point interactions
  • rho::Float64: Density
  • E::Float64: Young's modulus
  • nu::Float64: Poisson's ratio
  • Gc::Float64: Critical energy release rate
  • epsilon_c::Float64: Critical strain
  • C1::Float64: One-neighbor interaction parameter (default: 0.0)
  • C2::Float64: Two-neighbor interaction parameter (default: 0.0)
  • C3::Float64: Two-neighbor interaction parameter (default: 0.0)
Specification of interaction parameters

If any of the interaction parameters is used with material!, the the Young's modulus and Poisson's ratio are ignored and only the specified interaction parameters will influence the force density calculated from that interaction.

If no interaction parameter is specified, then the Young's modulus and Poisson's ratio are used to calculate these parameters accordingly to Ekiz, Steinmann, and Javili (2022).

Allowed export fields

When specifying the fields keyword of Job for a Body with CKIMaterial, the following fields are allowed:

  • position::Matrix{Float64}: Position of each point
  • displacement::Matrix{Float64}: Displacement of each point
  • velocity::Matrix{Float64}: Velocity of each point
  • velocity_half::Matrix{Float64}: Velocity parameter for Verlet time solver
  • acceleration::Matrix{Float64}: Acceleration of each point
  • b_int::Matrix{Float64}: Internal force density of each point
  • b_ext::Matrix{Float64}: External force density of each point
  • damage::Vector{Float64}: Damage of each point
  • n_active_one_nis::Vector{Int}: Number of intact one-neighbor interactions of each point
source
Peridynamics.NoCorrectionType
NoCorrection

A correction handler for materials that use the bond system. If NoCorrection is used, then no correction will be applied.

See also BBMaterial, OSBMaterial for further information on how to use the correction type.

source
Peridynamics.EnergySurfaceCorrectionType
EnergySurfaceCorrection

A correction handler for materials that use the bond system. If EnergySurfaceCorrection is used, then the energy based surface correction method of Le and Bobaru (2018) is used.

See also BBMaterial, OSBMaterial for further information on how to use the correction type.

source

Discretization

Peridynamics.BodyType
Body(material, position, volume)
+OSBMaterial{EnergySurfaceCorrection}()

OSBMaterial{Correction}

Material type for the ordinary state-based peridynamics formulation.

Type Parameters

  • Correction: A correction algorithm type. See the constructor docs for more informations.

Allowed material parameters

When using material! on a Body with OSBMaterial, then the following parameters are allowed:

  • horizon::Float64: Radius of point interactions
  • rho::Float64: Density
  • E::Float64: Young's modulus
  • nu::Float64: Poisson's ratio
  • Gc::Float64: Critical energy release rate
  • epsilon_c::Float64: Critical strain

Allowed export fields

When specifying the fields keyword of Job for a Body with OSBMaterial, the following fields are allowed:

  • position::Matrix{Float64}: Position of each point
  • displacement::Matrix{Float64}: Displacement of each point
  • velocity::Matrix{Float64}: Velocity of each point
  • velocity_half::Matrix{Float64}: Velocity parameter for Verlet time solver
  • acceleration::Matrix{Float64}: Acceleration of each point
  • b_int::Matrix{Float64}: Internal force density of each point
  • b_ext::Matrix{Float64}: External force density of each point
  • damage::Vector{Float64}: Damage of each point
  • n_active_bonds::Vector{Int}: Number of intact bonds of each point
source
Peridynamics.NOSBMaterialType
NOSBMaterial(; maxdmg, maxjacobi, corr)

A material type used to assign the material of a Body with the local continuum consistent (correspondence) formulation of non-ordinary state-based peridynamics.

Keywords

  • maxdmg::Float64: Maximum value of damage a point is allowed to obtain. If this value is exceeded, all bonds of that point are broken because the deformation gradient would then possibly contain NaN values. (default: 0.95)
  • maxjacobi::Float64: Maximum value of the Jacobi determinant. If this value is exceeded, all bonds of that point are broken. (default: 1.03)
  • corr::Float64: Correction factor used for zero-energy mode stabilization. The stabilization algorithm of Silling (2017) is used. (default: 100.0)
Stability of fracture simulations

This formulation is known to be not suitable for fracture simultations without stabilization of the zero-energy modes. Therefore be careful when doing fracture simulations and try out different paremeters for maxdmg, maxjacobi, and corr.

Examples

julia> mat = NOSBMaterial()
+NOSBMaterial(maxdmg=0.95, maxjacobi=1.03, corr=100.0)

NOSBMaterial

Material type for the local continuum consistent (correspondence) formulation of non-ordinary state-based peridynamics.

Fields

  • maxdmg::Float64: Maximum value of damage a point is allowed to obtain. See the constructor docs for more informations.
  • maxjacobi::Float64: Maximum value of the Jacobi determinant. See the constructor docs for more informations.
  • corr::Float64: Correction factor used for zero-energy mode stabilization. See the constructor docs for more informations.

Allowed material parameters

When using material! on a Body with NOSBMaterial, then the following parameters are allowed:

  • horizon::Float64: Radius of point interactions
  • rho::Float64: Density
  • E::Float64: Young's modulus
  • nu::Float64: Poisson's ratio
  • Gc::Float64: Critical energy release rate
  • epsilon_c::Float64: Critical strain

Allowed export fields

When specifying the fields keyword of Job for a Body with NOSBMaterial, the following fields are allowed:

  • position::Matrix{Float64}: Position of each point
  • displacement::Matrix{Float64}: Displacement of each point
  • velocity::Matrix{Float64}: Velocity of each point
  • velocity_half::Matrix{Float64}: Velocity parameter for Verlet time solver
  • acceleration::Matrix{Float64}: Acceleration of each point
  • b_int::Matrix{Float64}: Internal force density of each point
  • b_ext::Matrix{Float64}: External force density of each point
  • damage::Vector{Float64}: Damage of each point
  • n_active_bonds::Vector{Int}: Number of intact bonds of each point
source
Peridynamics.CKIMaterialType
CKIMaterial()

A material type used to assign the material of a Body with the continuum-kinematics-inspired peridynamics fomulation.

Examples

julia> mat = CKIMaterial()
+CKIMaterial()

CKIMaterial

Material type for the continuum-kinematics-inspired peridynamics framework.

Allowed material parameters

When using material! on a Body with CKIMaterial, then the following parameters are allowed:

  • horizon::Float64: Radius of point interactions
  • rho::Float64: Density
  • E::Float64: Young's modulus
  • nu::Float64: Poisson's ratio
  • Gc::Float64: Critical energy release rate
  • epsilon_c::Float64: Critical strain
  • C1::Float64: One-neighbor interaction parameter (default: 0.0)
  • C2::Float64: Two-neighbor interaction parameter (default: 0.0)
  • C3::Float64: Two-neighbor interaction parameter (default: 0.0)
Specification of interaction parameters

If any of the interaction parameters is used with material!, the the Young's modulus and Poisson's ratio are ignored and only the specified interaction parameters will influence the force density calculated from that interaction.

If no interaction parameter is specified, then the Young's modulus and Poisson's ratio are used to calculate these parameters accordingly to Ekiz, Steinmann, and Javili (2022).

Allowed export fields

When specifying the fields keyword of Job for a Body with CKIMaterial, the following fields are allowed:

  • position::Matrix{Float64}: Position of each point
  • displacement::Matrix{Float64}: Displacement of each point
  • velocity::Matrix{Float64}: Velocity of each point
  • velocity_half::Matrix{Float64}: Velocity parameter for Verlet time solver
  • acceleration::Matrix{Float64}: Acceleration of each point
  • b_int::Matrix{Float64}: Internal force density of each point
  • b_ext::Matrix{Float64}: External force density of each point
  • damage::Vector{Float64}: Damage of each point
  • n_active_one_nis::Vector{Int}: Number of intact one-neighbor interactions of each point
source
Peridynamics.NoCorrectionType
NoCorrection

A correction handler for materials that use the bond system. If NoCorrection is used, then no correction will be applied.

See also BBMaterial, OSBMaterial for further information on how to use the correction type.

source
Peridynamics.EnergySurfaceCorrectionType
EnergySurfaceCorrection

A correction handler for materials that use the bond system. If EnergySurfaceCorrection is used, then the energy based surface correction method of Le and Bobaru (2018) is used.

See also BBMaterial, OSBMaterial for further information on how to use the correction type.

source

Discretization

Peridynamics.BodyType
Body(material, position, volume)
 Body(material, inp_file)

Constructs a Body for a peridynamics simulation.

Arguments

  • material::AbstractMaterial: The material which is defined for the whole body.
  • position::AbstractMatrix: A 3×n matrix with the point position of the n points.
  • volume::AbstractVector: A vector with the volume of each point.
  • inp_file::AbstractString: An Abaqus input file containing meshes, imported with read_inp.

Throws

  • Errors if the number of points is not larger than zero
  • Errors if position is not a 3×n matrix and has the same length as volume
  • Errors if position or volume contain NaN values

Example

julia> Body(BBMaterial(), rand(3, 10), rand(10))
 10-point Body{BBMaterial{NoCorrection}}:
   1 point set(s):
-    10-point set `all_points`

Internal use only

Please note that the fields are intended for internal use only. They are not part of the public API of Peridynamics.jl, and thus can be altered (or removed) at any time without it being considered a breaking change.

Body{Material,PointParameters}

Type Parameters

  • Material <: AbstractMaterial: Type of the specified material model
  • PointParameters <: AbstractPointParameters: Type of the point parameters

Fields

  • mat::Material: The material formulation.
  • n_points::Int: The number of points that in the body.
  • position::Matrix{Float64}: A 3×n_points matrix with the position of the points.
  • volume::Vector{Float64}: A vector with the volume of each point.
  • fail_permit::Vector{Bool}: A vector that describes if failure is allowed for each point.
  • point_sets::Dict{Symbol,Vector{Int}}: A dictionary containing point sets.
  • point_params::Vector{PointParameters}: A vector containing all point parameters.
  • params_map::Vector{Int}: A vector that maps parameters in point_params to each point.
  • single_dim_bcs::Vector{SingleDimBC}: A vector with boundary conditions on a single dimension.
  • posdep_single_dim_bcs::Vector{PosDepSingleDimBC}: A vector with position dependent boundary conditions on a single dimension.
  • single_dim_ics::Vector{SingleDimIC}: A vector with initial conditions on a single dimension.
  • posdep_single_dim_ics::Vector{PosDepSingleDimIC}: A vector with position dependent initial conditions on a single dimension.
  • point_sets_precracks::Vector{PointSetsPreCrack}: A vector with predefined point set cracks.
source
Peridynamics.MultibodySetupType
MultibodySetup(body_pairs...)

Setup for a peridynamic simulation with multiple bodies.

Arguments

  • body_pairs::Pair{Symbol,<:AbstractBody}: Pairs of :body_name => body_object. The name of the body has to be specified as a Symbol.

Throws

  • Errors if less than 2 bodies are defined

Examples

julia> sphere = Body(BBMaterial(), pos_sphere, vol_sphere)
+    10-point set `all_points`

Internal use only

Please note that the fields are intended for internal use only. They are not part of the public API of Peridynamics.jl, and thus can be altered (or removed) at any time without it being considered a breaking change.

Body{Material,PointParameters}

Type Parameters

  • Material <: AbstractMaterial: Type of the specified material model
  • PointParameters <: AbstractPointParameters: Type of the point parameters

Fields

  • mat::Material: The material formulation.
  • n_points::Int: The number of points that in the body.
  • position::Matrix{Float64}: A 3×n_points matrix with the position of the points.
  • volume::Vector{Float64}: A vector with the volume of each point.
  • fail_permit::Vector{Bool}: A vector that describes if failure is allowed for each point.
  • point_sets::Dict{Symbol,Vector{Int}}: A dictionary containing point sets.
  • point_params::Vector{PointParameters}: A vector containing all point parameters.
  • params_map::Vector{Int}: A vector that maps parameters in point_params to each point.
  • single_dim_bcs::Vector{SingleDimBC}: A vector with boundary conditions on a single dimension.
  • posdep_single_dim_bcs::Vector{PosDepSingleDimBC}: A vector with position dependent boundary conditions on a single dimension.
  • single_dim_ics::Vector{SingleDimIC}: A vector with initial conditions on a single dimension.
  • posdep_single_dim_ics::Vector{PosDepSingleDimIC}: A vector with position dependent initial conditions on a single dimension.
  • point_sets_precracks::Vector{PointSetsPreCrack}: A vector with predefined point set cracks.
source
Peridynamics.MultibodySetupType
MultibodySetup(body_pairs...)

Setup for a peridynamic simulation with multiple bodies.

Arguments

  • body_pairs::Pair{Symbol,<:AbstractBody}: Pairs of :body_name => body_object. The name of the body has to be specified as a Symbol.

Throws

  • Errors if less than 2 bodies are defined

Examples

julia> sphere = Body(BBMaterial(), pos_sphere, vol_sphere)
 280-point Body{BBMaterial{NoCorrection}}:
   1 point set(s):
     280-point set `all_points`
@@ -28,7 +28,7 @@
 julia> ms = MultibodySetup(:sphere => sphere, :plate => plate)
 25880-point MultibodySetup:
   280-point Body{BBMaterial{NoCorrection}} with name `sphere`
-  25600-point Body{BBMaterial{NoCorrection}} with name `plate`

Internal use only

Please note that the fields are intended for internal use only. They are not part of the public API of Peridynamics.jl, and thus can be altered (or removed) at any time without it being considered a breaking change.

MultibodySetup{Bodies}

Type Parameters

  • Bodies <: Tuple: All types of the different bodies in the multibody setup.

Fields

  • bodies::Bodies: A Tuple containing all the bodies.
  • body_names::Vector{Symbol}: All body names.
  • body_idxs::Dict{Symbol,Int}: A Dict to get the body index with the body name.
  • srf_contacts::Vector{ShortRangeForceContact}: All short range force contacts.
source
Peridynamics.point_set!Function
point_set!(body, set_name, points)
+  25600-point Body{BBMaterial{NoCorrection}} with name `plate`

Internal use only

Please note that the fields are intended for internal use only. They are not part of the public API of Peridynamics.jl, and thus can be altered (or removed) at any time without it being considered a breaking change.

MultibodySetup{Bodies}

Type Parameters

  • Bodies <: Tuple: All types of the different bodies in the multibody setup.

Fields

  • bodies::Bodies: A Tuple containing all the bodies.
  • body_names::Vector{Symbol}: All body names.
  • body_idxs::Dict{Symbol,Int}: A Dict to get the body index with the body name.
  • srf_contacts::Vector{ShortRangeForceContact}: All short range force contacts.
source
Peridynamics.point_set!Function
point_set!(body, set_name, points)
 point_set!(fun, body, set_name)

Add a point set to a Body. The points of the set can be either specified directly with the points::AbstractVector argument, or as the result of the filter function fun. By default, a body already contains a point set with the name :all_points, containg a set with all points.

Arguments

  • body::AbstractBody: Body where the set will be added.
  • set_name::Symbol: Name of the point set.
  • points::AbstractVector: Some vector containing the point indices of the set. The indices have to be in bounds with the position and volume of body.
  • fun::Function: Function for filtering points. This function accepts only one positional argument and will be used in a findall call. Depending on the argument name, a different input will be processed:
    • x: The function will receive the x-coordinate of each point in position of body:
      points = findall(fun, @view(position[1, :]))
    • y: The function will receive the y-coordinate of each point in position of body:
      points = findall(fun, @view(position[2, :]))
    • z: The function will receive the z-coordinate of each point in position of body:
      points = findall(fun, @view(position[3, :]))
    • p: The function will receive the a vector containing each dimension of each point in position of body:
      points = findall(fun, eachcol(position))

Throws

  • Errors if a point set with the same set_name already exists.
  • Errors if points are not in bounds with position and volume of the body.

Examples

Add a point set to body with all points that have a x-corrdinate larger than zero:

julia> point_set!(x -> x > 0, body, :larger_than_zero)
 
 julia> point_sets(body)
@@ -41,7 +41,7 @@
 julia> point_sets(body)
 Dict{Symbol, Vector{Int64}} with 2 entries:
   :larger_than_zero => [6, 7, 8, 9, 10, 16, 17, 18, 19, 20  …  9…
-  :inside_sphere    => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10  …  991, 9…
source
Peridynamics.point_setsFunction
point_sets(body)

Returns all point sets of body.

Arguments

  • body::AbstractBody: Body.

Example

julia> body = Body(BBMaterial(), rand(3,100), rand(100))
+  :inside_sphere    => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10  …  991, 9…
source
Peridynamics.point_setsFunction
point_sets(body)

Returns all point sets of body.

Arguments

  • body::AbstractBody: Body.

Example

julia> body = Body(BBMaterial(), rand(3,100), rand(100))
 100-point Body{BBMaterial{NoCorrection}}:
   100-point set `all_points`
 
@@ -50,14 +50,14 @@
 julia> Peridynamics.point_sets(body)
 Dict{Symbol, Vector{Int64}} with 2 entries:
   :all_points => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10  …  91, 92, 93, 94, 95, 96, 97, 98, 9…
-  :set_a      => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
source
Peridynamics.failure_permit!Function
failure_permit!(body, fail_permit)
+  :set_a      => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
source
Peridynamics.failure_permit!Function
failure_permit!(body, fail_permit)
 failure_permit!(body, set_name, fail_permit)

Set the failure permission for points of a body. By default, failure is allowed for all points. If no set_name is specified, then the permission fail_permit is set for all points of the body.

Arguments

  • body::AbstractBody: Body where the failure permission will be set.
  • set_name::Symbol: The name of a point set of this body.
  • fail_permit::Bool: If true, failure is allowed, and if false then no bonds of this point are allowed to break during the simulation.

Throws

  • Errors if the body does not contain a set with set_name.

Examples

julia> failure_permit!(body, false)
 
 julia> body
 1000-point Body{BBMaterial{NoCorrection}}:
   1 point set(s):
     1000-point set `all_points`
-  1000 points with no failure permission
source
Peridynamics.material!Function
material!(body, set_name; kwargs...)
+  1000 points with no failure permission
source
Peridynamics.material!Function
material!(body, set_name; kwargs...)
 material!(body; kwargs...)

Assign material point parameters to points of body. If no set_name is specified, then the parameters will be set for all points of the body.

Arguments

  • body::AbstractBody: Body.
  • set_name::Symbol: The name of a point set of this body.

Keywords

Allowed keywords depend on the selected material model. Please look at the documentation of the material you specified when creating the body. The default material keywords are:

  • horizon::Float64: Radius of point interactions
  • rho::Float64: Density
  • E::Float64: Young's modulus
  • nu::Float64: Poisson's ratio
  • Gc::Float64: Critical energy release rate
  • epsilon_c::Float64: Critical strain

Throws

  • Errors if a kwarg is not eligible for specification with the body material.

Example

julia> material!(body; horizon=3.0, E=2.1e5, rho=8e-6, Gc=2.7)
 
 julia> body
@@ -65,7 +65,7 @@
   1 point set(s):
     1000-point set `all_points`
   1 point parameter(s):
-    Parameters BBMaterial: δ=3.0, E=210000.0, nu=0.25, rho=8.0e-6, Gc=2.7
source
Peridynamics.velocity_bc!Function
velocity_bc!(fun, body, set_name, dim)

Specifies velocity boundary conditions for points of the set set_name in body. The value of the boundary condition is calculated with the function fun at every time step.

Arguments

  • fun::Function: Condition function for the calculation of a value, should return a Float64. If the condition function returns a NaN, then this value is ignored, which can be used to turn conditions off after a specified period of time. This function accepts one ore two positional arguments and is aware of the argument names. Possible arguments and names:
    • fun(t): The function will receive the current time t at every time step. This makes it possible to specify conditions that change over time.
    • fun(p, t): This function will be processed for every point of set_name and receives the reference position of a point as SVector{3} and the current time t at every time step. This makes it possible to specify conditions that also depend on the position of a point.
  • body::AbstractBody: Body the condition is specified on.
  • set_name::Symbol: The name of a point set of this body.
  • dim::Union{Integer,Symbol}: Direction of the condition, either specified as Symbol or integer.
    • x-direction: :x or 1
    • y-direction: :y or 2
    • z-direction: :z or 3

Throws

  • Errors if the body does not contain a set with set_name.
  • Errors if the direction is not correctly specified.
  • Errors if function is not suitable as condition function and has the wrong arguments.

Example

julia> velocity_bc!(t -> 2.0, body, :all_points, 1)
+    Parameters BBMaterial: δ=3.0, E=210000.0, nu=0.25, rho=8.0e-6, Gc=2.7
source
Peridynamics.velocity_bc!Function
velocity_bc!(fun, body, set_name, dim)

Specifies velocity boundary conditions for points of the set set_name in body. The value of the boundary condition is calculated with the function fun at every time step.

Arguments

  • fun::Function: Condition function for the calculation of a value, should return a Float64. If the condition function returns a NaN, then this value is ignored, which can be used to turn conditions off after a specified period of time. This function accepts one ore two positional arguments and is aware of the argument names. Possible arguments and names:
    • fun(t): The function will receive the current time t at every time step. This makes it possible to specify conditions that change over time.
    • fun(p, t): This function will be processed for every point of set_name and receives the reference position of a point as SVector{3} and the current time t at every time step. This makes it possible to specify conditions that also depend on the position of a point.
  • body::AbstractBody: Body the condition is specified on.
  • set_name::Symbol: The name of a point set of this body.
  • dim::Union{Integer,Symbol}: Direction of the condition, either specified as Symbol or integer.
    • x-direction: :x or 1
    • y-direction: :y or 2
    • z-direction: :z or 3

Throws

  • Errors if the body does not contain a set with set_name.
  • Errors if the direction is not correctly specified.
  • Errors if function is not suitable as condition function and has the wrong arguments.

Example

julia> velocity_bc!(t -> 2.0, body, :all_points, 1)
 
 julia> velocity_bc!((p,t) -> p[1] * t, body, :all_points, :y)
 
@@ -78,7 +78,7 @@
   3 boundary condition(s):
     BC on velocity: point_set=all_points, dim=1
     BC on velocity: point_set=all_points, dim=3
-    Pos.-dep. BC on velocity: point_set=all_points, dim=2
source
Peridynamics.velocity_ic!Function
velocity_ic!(body, set_name, dim, value)
+    Pos.-dep. BC on velocity: point_set=all_points, dim=2
source
Peridynamics.velocity_ic!Function
velocity_ic!(body, set_name, dim, value)
 velocity_ic!(fun, body, set_name, dim)

Specifies velocity initial conditions for points of the set set_name in body. The value of the initial condition is specified before time integration. If a function fun is specified, then the value is with that function.

Arguments

  • body::AbstractBody: Body the condition is specified on.
  • set_name::Symbol: The name of a point set of this body.
  • dim::Union{Integer,Symbol}: Direction of the condition, either specified as Symbol or integer.
    • x-direction: :x or 1
    • y-direction: :y or 2
    • z-direction: :z or 3
  • value::Real: Value that is specified before time integration.
  • fun::Function: Condition function for the calculation of a value, should return a Float64. If the condition function returns a NaN, then this value is ignored, which can be used to turn off the condition for a specified position. This function accepts one ore two positional arguments and is aware of the argument names. Possible arguments and names:
    • fun(p): The function will receive the reference position p of a point as SVector{3}.

Throws

  • Errors if the body does not contain a set with set_name.
  • Errors if the direction is not correctly specified.
  • Errors if function is not suitable as condition function and has the wrong arguments.

Example

julia> velocity_ic!(body, :all_points, :x, -100.0)
 
 julia> body
@@ -86,7 +86,7 @@
   1 point set(s):
     1000-point set `all_points`
   1 initial condition(s):
-    IC on velocity: point_set=all_points, dim=1
source
Peridynamics.forcedensity_bc!Function
forcedensity_bc!(fun, body, set, dim)

Specifies force density boundary conditions for points of the set set_name in body. The value of the boundary condition is calculated with the function fun at every time step.

Arguments

  • fun::Function: Condition function for the calculation of a value, should return a Float64. If the condition function returns a NaN, then this value is ignored, which can be used to turn conditions off after a specified period of time. This function accepts one ore two positional arguments and is aware of the argument names. Possible arguments and names:
    • fun(t): The function will receive the current time t at every time step. This makes it possible to specify conditions that change over time.
    • fun(p, t): This function will be processed for every point of set_name and receives the reference position of a point as SVector{3} and the current time t at every time step. This makes it possible to specify conditions that also depend on the position of a point.
  • body::AbstractBody: Body the condition is specified on.
  • set_name::Symbol: The name of a point set of this body.
  • dim::Union{Integer,Symbol}: Direction of the condition, either specified as Symbol or integer.
    • x-direction: :x or 1
    • y-direction: :y or 2
    • z-direction: :z or 3

Throws

  • Errors if the body does not contain a set with set_name.
  • Errors if the direction is not correctly specified.
  • Errors if function is not suitable as condition function and has the wrong arguments.

Example

julia> forcedensity_bc!(t -> 8000.0, body, :all_points, :x)
+    IC on velocity: point_set=all_points, dim=1
source
Peridynamics.forcedensity_bc!Function
forcedensity_bc!(fun, body, set, dim)

Specifies force density boundary conditions for points of the set set_name in body. The value of the boundary condition is calculated with the function fun at every time step.

Arguments

  • fun::Function: Condition function for the calculation of a value, should return a Float64. If the condition function returns a NaN, then this value is ignored, which can be used to turn conditions off after a specified period of time. This function accepts one ore two positional arguments and is aware of the argument names. Possible arguments and names:
    • fun(t): The function will receive the current time t at every time step. This makes it possible to specify conditions that change over time.
    • fun(p, t): This function will be processed for every point of set_name and receives the reference position of a point as SVector{3} and the current time t at every time step. This makes it possible to specify conditions that also depend on the position of a point.
  • body::AbstractBody: Body the condition is specified on.
  • set_name::Symbol: The name of a point set of this body.
  • dim::Union{Integer,Symbol}: Direction of the condition, either specified as Symbol or integer.
    • x-direction: :x or 1
    • y-direction: :y or 2
    • z-direction: :z or 3

Throws

  • Errors if the body does not contain a set with set_name.
  • Errors if the direction is not correctly specified.
  • Errors if function is not suitable as condition function and has the wrong arguments.

Example

julia> forcedensity_bc!(t -> 8000.0, body, :all_points, :x)
 
 julia> forcedensity_bc!((p,t) -> p[1] * t, body, :all_points, :y)
 
@@ -99,7 +99,7 @@
   3 boundary condition(s):
     BC on force density: point_set=all_points, dim=1
     BC on force density: point_set=all_points, dim=3
-    Pos.-dep. BC on force density: point_set=all_points, dim=2
source
Peridynamics.precrack!Function
precrack!(body, set_a, set_b; update_dmg=true)

Creates a crack between two point sets by prohibiting interaction between points of different point sets. The points in set_a are not allowed to interact with points in set_b.

Arguments

  • body::AbstractBody: Body.
  • set_a::Symbol: The name of a point set of this body.
  • set_b::Symbol: The name of a point set of this body.

Keywords

  • update_dmg::Bool: If true, the material points involved in the predefined crack are initially damaged. If false, the bonds involved are deleted and the material points involved with the predefined crack are not damaged in the reference results. (default: true)

Throws

  • Errors if the body does not contain sets with name set_a and set_b.
  • Errors if the point sets intersect and a point is included in both sets.

Example

julia> point_set!(body, :a, 1:2)
+    Pos.-dep. BC on force density: point_set=all_points, dim=2
source
Peridynamics.precrack!Function
precrack!(body, set_a, set_b; update_dmg=true)

Creates a crack between two point sets by prohibiting interaction between points of different point sets. The points in set_a are not allowed to interact with points in set_b.

Arguments

  • body::AbstractBody: Body.
  • set_a::Symbol: The name of a point set of this body.
  • set_b::Symbol: The name of a point set of this body.

Keywords

  • update_dmg::Bool: If true, the material points involved in the predefined crack are initially damaged. If false, the bonds involved are deleted and the material points involved with the predefined crack are not damaged in the reference results. (default: true)

Throws

  • Errors if the body does not contain sets with name set_a and set_b.
  • Errors if the point sets intersect and a point is included in both sets.

Example

julia> point_set!(body, :a, 1:2)
 
 julia> point_set!(body, :b, 3:4)
 
@@ -111,7 +111,7 @@
     1000-point set `all_points`
     2-point set `a`
     2-point set `b`
-  1 predefined crack(s)
source
Peridynamics.contact!Function
contact!(multibody_setup, name_body_a, name_body_b; kwargs...)

Defines a short range force contact between body name_body_a and name_body_b in the MultibodySetup multibody_setup.

Arguments

  • multibody_setup::MultibodySetup: MultibodySetup.
  • name_body_a::Symbol: The name of a body in this multibody setup.
  • name_body_b::Symbol: The name of a body in this multibody setup.

Keywords

  • radius::Float64: Contact search radius. If a the distance of a point in body name_body_a and a point in body name_body_b is lower than this radius, a contact force is calculated. This radius should be in the order of the point spacing of a point cloud.
  • penalty_factor::Float64: Penalty factor for the short range force contact algorithm. (default: 1e12)

Throws

  • Errors if multibody_setup does not contain bodies with name name_body_a and name_body_b.
  • Errors if the keyword radius is not specified or radius ≤ 0.
  • Errors if penalty_factor ≤ 0.

Examples

julia> ms = MultibodySetup(:a => body_a, :b => body_b)
+  1 predefined crack(s)
source
Peridynamics.contact!Function
contact!(multibody_setup, name_body_a, name_body_b; kwargs...)

Defines a short range force contact between body name_body_a and name_body_b in the MultibodySetup multibody_setup.

Arguments

  • multibody_setup::MultibodySetup: MultibodySetup.
  • name_body_a::Symbol: The name of a body in this multibody setup.
  • name_body_b::Symbol: The name of a body in this multibody setup.

Keywords

  • radius::Float64: Contact search radius. If a the distance of a point in body name_body_a and a point in body name_body_b is lower than this radius, a contact force is calculated. This radius should be in the order of the point spacing of a point cloud.
  • penalty_factor::Float64: Penalty factor for the short range force contact algorithm. (default: 1e12)

Throws

  • Errors if multibody_setup does not contain bodies with name name_body_a and name_body_b.
  • Errors if the keyword radius is not specified or radius ≤ 0.
  • Errors if penalty_factor ≤ 0.

Examples

julia> ms = MultibodySetup(:a => body_a, :b => body_b)
 2000-point MultibodySetup:
   1000-point Body{BBMaterial{NoCorrection}} with name `b`
   1000-point Body{BBMaterial{NoCorrection}} with name `b`
@@ -122,7 +122,7 @@
 2000-point MultibodySetup:
   1000-point Body{BBMaterial{NoCorrection}} with name `b`
   1000-point Body{BBMaterial{NoCorrection}} with name `b`
-  2 short range force contact(s)
source
Peridynamics.uniform_boxFunction
uniform_box(lx, ly, lz, ΔX0; kwargs...)

Creates a grid of uniformly distributed points in a cuboid with lengths lx, ly and lz and point spacing ΔX0.

Arguments

  • lx::Real: Length in x-dimension.
  • ly::Real: Length in y-dimension.
  • lz::Real: Length in z-dimension.
  • ΔX0::Real: The point spacing of the points.

Keywords

  • center_x::Real: Center of the cuboid in x-direction. (default: 0)
  • center_y::Real: Center of the cuboid in y-direction. (default: 0)
  • center_z::Real: Center of the cuboid in z-direction. (default: 0)

Returns

  • position::Matrix{Float64}: A 3×n_points matrix with the position of the points.
  • volume::Vector{Float64}: A vector with the volume of each point.

Examples

julia> position, volume = uniform_box(10, 10, 10, 2);
+  2 short range force contact(s)
source
Peridynamics.uniform_boxFunction
uniform_box(lx, ly, lz, ΔX0; kwargs...)

Creates a grid of uniformly distributed points in a cuboid with lengths lx, ly and lz and point spacing ΔX0.

Arguments

  • lx::Real: Length in x-dimension.
  • ly::Real: Length in y-dimension.
  • lz::Real: Length in z-dimension.
  • ΔX0::Real: The point spacing of the points.

Keywords

  • center_x::Real: Center of the cuboid in x-direction. (default: 0)
  • center_y::Real: Center of the cuboid in y-direction. (default: 0)
  • center_z::Real: Center of the cuboid in z-direction. (default: 0)

Returns

  • position::Matrix{Float64}: A 3×n_points matrix with the position of the points.
  • volume::Vector{Float64}: A vector with the volume of each point.

Examples

julia> position, volume = uniform_box(10, 10, 10, 2);
 
 julia> position
 3×125 Matrix{Float64}:
@@ -140,7 +140,7 @@
  8
  8
  8
- 8
source
Peridynamics.uniform_sphereFunction
uniform_sphere(diameter, ΔX0; kwargs...)

Creates a grid of uniformly distributed points in a sphere with a specific diameter and the point spacing ΔX0.

Arguments

  • diameter::Real: Diameter of the sphere.
  • ΔX0::Real: The point spacing of the points.

Keywords

  • center_x::Real: Center of the cuboid in x-direction. (default: 0)
  • center_y::Real: Center of the cuboid in y-direction. (default: 0)
  • center_z::Real: Center of the cuboid in z-direction. (default: 0)

Returns

  • position::Matrix{Float64}: A 3×n_points matrix with the position of the points.
  • volume::Vector{Float64}: A vector with the volume of each point.

Examples

julia> position, volume = uniform_sphere(10, 2);
+ 8
source
Peridynamics.uniform_sphereFunction
uniform_sphere(diameter, ΔX0; kwargs...)

Creates a grid of uniformly distributed points in a sphere with a specific diameter and the point spacing ΔX0.

Arguments

  • diameter::Real: Diameter of the sphere.
  • ΔX0::Real: The point spacing of the points.

Keywords

  • center_x::Real: Center of the cuboid in x-direction. (default: 0)
  • center_y::Real: Center of the cuboid in y-direction. (default: 0)
  • center_z::Real: Center of the cuboid in z-direction. (default: 0)

Returns

  • position::Matrix{Float64}: A 3×n_points matrix with the position of the points.
  • volume::Vector{Float64}: A vector with the volume of each point.

Examples

julia> position, volume = uniform_sphere(10, 2);
 
 julia> position
 3×81 Matrix{Float64}:
@@ -160,7 +160,7 @@
  8
  8
  8
- 8
source
Peridynamics.n_pointsFunction
n_points(body)

Returns the total number of points in a body.

Arguments

Returns

  • n_points::Int: The number of points in the body.

Examples

julia> body = Body(BBMaterial(), pos, vol)
+ 8
source
Peridynamics.n_pointsFunction
n_points(body)

Returns the total number of points in a body.

Arguments

Returns

  • n_points::Int: The number of points in the body.

Examples

julia> body = Body(BBMaterial(), pos, vol)
 1000-point Body{BBMaterial{NoCorrection}}:
   1 point set(s):
     1000-point set `all_points`
@@ -172,13 +172,13 @@
   1000-point Body{BBMaterial{NoCorrection}} with name `b`
 
 julia> n_points(ms)
-2000
source

Preprocessing & simulation setup

Peridynamics.AbaqusMeshConverter.read_inpFunction
read_inp(file::String)

Read Abaqus .inp-file and convert meshes to a point cloud with the help of the AbaqusReader.jl package. Every element is converted to a point. The center of the element becomes the position of the point and the element volume becomes the point volume. Element sets defined in Abaqus are converted to corresponding point sets.

Currently supported mesh elements: [:Tet4, :Hex8]

Arguments

  • file::String: Path to Abaqus .inp-file

Returns

  • position::Matrix{Float64}: Point position (midpoint of every element)
  • volume::Vector{Float64}: Point volume (volume of every element)
  • point_sets: Element sets defined in the .inp-file
source
Peridynamics.mpi_isrootFunction
mpi_isroot()

Helper function that returns a bool indicating if a process is the MPI root process. It can be safely used even for multithreading simulations, as it is always true if the package is started in a normal Julia environment which is not started by MPI.

source
Peridynamics.force_mpi_run!Function
force_mpi_run!()

Helper function to force the usage of the MPI backend. After this function is called, all following simulations will use MPI.

source
Peridynamics.force_threads_run!Function
force_threads_run!()

Helper function to force the usage of the multithreading backend. After this function is called, all following simulations will use multithreading.

source
Peridynamics.enable_mpi_timers!Function
enable_mpi_timers!()

Helper function to enable timers defined with the TimerOutputs for simulations with the MPI backend. The results of the timers then will be exported into the specified path of a Job. By default, not timers will be used with MPI simulations. It can be safely used with multithreading.

See also disable_mpi_timers!.

source
Peridynamics.disable_mpi_timers!Function
disable_mpi_timers!()

Helper function to disable timers defined with the TimerOutputs for simulations with the MPI backend. It is mainly used to reset the behaviour after a call of enable_mpi_timers!. It can be safely used with multithreading.

source
Peridynamics.enable_mpi_progress_bars!Function
enable_mpi_progress_bars!()

Helper function to enable progress bars with MPI simulations on a personal computer. After this function is called, progress bars are beeing shown with MPI simulations like with multithreading simulations. This behavior can be reset to default with reset_mpi_progress_bars!.

Progress bars and output files

Progress bars are by default disabled with MPI simulations, because they can really mess up with the output files produced by a HPC system. Therefore, a warning is shown as a reminder to reset this behaviour before submitting a job to a cluster!

source
Peridynamics.reset_mpi_progress_bars!Function
reset_mpi_progress_bars!()

After this function is called, progress bars are again disabled on MPI simulations (standard setting). This will reset the behavior after a call of enable_mpi_progress_bars!.

source
Peridynamics.@mpitimeMacro
@mpitime expression

Time the expression if the mpi rank is zero. Lowers to:

if mpi_isroot()
+2000
source

Preprocessing & simulation setup

Peridynamics.AbaqusMeshConverter.read_inpFunction
read_inp(file::String)

Read Abaqus .inp-file and convert meshes to a point cloud with the help of the AbaqusReader.jl package. Every element is converted to a point. The center of the element becomes the position of the point and the element volume becomes the point volume. Element sets defined in Abaqus are converted to corresponding point sets.

Currently supported mesh elements: [:Tet4, :Hex8]

Arguments

  • file::String: Path to Abaqus .inp-file

Returns

  • position::Matrix{Float64}: Point position (midpoint of every element)
  • volume::Vector{Float64}: Point volume (volume of every element)
  • point_sets: Element sets defined in the .inp-file
source
Peridynamics.mpi_isrootFunction
mpi_isroot()

Helper function that returns a bool indicating if a process is the MPI root process. It can be safely used even for multithreading simulations, as it is always true if the package is started in a normal Julia environment which is not started by MPI.

source
Peridynamics.force_mpi_run!Function
force_mpi_run!()

Helper function to force the usage of the MPI backend. After this function is called, all following simulations will use MPI.

source
Peridynamics.force_threads_run!Function
force_threads_run!()

Helper function to force the usage of the multithreading backend. After this function is called, all following simulations will use multithreading.

source
Peridynamics.enable_mpi_timers!Function
enable_mpi_timers!()

Helper function to enable timers defined with the TimerOutputs for simulations with the MPI backend. The results of the timers then will be exported into the specified path of a Job. By default, not timers will be used with MPI simulations. It can be safely used with multithreading.

See also disable_mpi_timers!.

source
Peridynamics.disable_mpi_timers!Function
disable_mpi_timers!()

Helper function to disable timers defined with the TimerOutputs for simulations with the MPI backend. It is mainly used to reset the behaviour after a call of enable_mpi_timers!. It can be safely used with multithreading.

source
Peridynamics.enable_mpi_progress_bars!Function
enable_mpi_progress_bars!()

Helper function to enable progress bars with MPI simulations on a personal computer. After this function is called, progress bars are beeing shown with MPI simulations like with multithreading simulations. This behavior can be reset to default with reset_mpi_progress_bars!.

Progress bars and output files

Progress bars are by default disabled with MPI simulations, because they can really mess up with the output files produced by a HPC system. Therefore, a warning is shown as a reminder to reset this behaviour before submitting a job to a cluster!

source
Peridynamics.reset_mpi_progress_bars!Function
reset_mpi_progress_bars!()

After this function is called, progress bars are again disabled on MPI simulations (standard setting). This will reset the behavior after a call of enable_mpi_progress_bars!.

source
Peridynamics.@mpitimeMacro
@mpitime expression

Time the expression if the mpi rank is zero. Lowers to:

if mpi_isroot()
     @time expression
 else
     expression
-end

See also: mpi_isroot.

source
Peridynamics.@mpirootMacro
@mpiroot [option] expression

Run the code if the mpi rank is zero. Lowers to something similar as:

if mpi_isroot()
+end

See also: mpi_isroot.

source
Peridynamics.@mpirootMacro
@mpiroot [option] expression

Run the code if the mpi rank is zero. Lowers to something similar as:

if mpi_isroot()
     expression
-end

Options

  • :wait: All MPI ranks will wait until the root rank finishes evaluating expression.

See also: mpi_isroot.

source

Solving

Peridynamics.VelocityVerletType
VelocityVerlet(; kwargs...)

Time integration solver for the Velocity Verlet algorithm. Specify either the number of steps or the time the simulation should cover.

Keywords

  • time::Real: The total time the simulation will cover. If this keyword is specified, the keyword steps is no longer allowed. (optional)
  • steps::Int: Number of calculated time steps. If this keyword is specified, the keyword time is no longer allowed. (optional)
  • stepsize::Real: Manually specify the size of the time step. (optional)
  • safety_factor::Real: Safety factor for step size to ensure stability. (default: 0.7)
Specification of the time step

Keep in mind that manually specifying the critical time step is dangerous! If the specified time step is too high and the CFL condition no longer holds, the simulation will give wrong results and maybe crash!

Throws

  • Errors if both time and steps are specified as keywords.
  • Errors if neither time nor steps are specified as keywords.
  • Errors if safety_factor < 0 or safety_factor > 1.

Example

julia> VelocityVerlet(steps=2000)
+end

Options

  • :wait: All MPI ranks will wait until the root rank finishes evaluating expression.

See also: mpi_isroot.

source

Solving

Peridynamics.VelocityVerletType
VelocityVerlet(; kwargs...)

Time integration solver for the Velocity Verlet algorithm. Specify either the number of steps or the time the simulation should cover.

Keywords

  • time::Real: The total time the simulation will cover. If this keyword is specified, the keyword steps is no longer allowed. (optional)
  • steps::Int: Number of calculated time steps. If this keyword is specified, the keyword time is no longer allowed. (optional)
  • stepsize::Real: Manually specify the size of the time step. (optional)
  • safety_factor::Real: Safety factor for step size to ensure stability. (default: 0.7)
Specification of the time step

Keep in mind that manually specifying the critical time step is dangerous! If the specified time step is too high and the CFL condition no longer holds, the simulation will give wrong results and maybe crash!

Throws

  • Errors if both time and steps are specified as keywords.
  • Errors if neither time nor steps are specified as keywords.
  • Errors if safety_factor < 0 or safety_factor > 1.

Example

julia> VelocityVerlet(steps=2000)
 VelocityVerlet:
   n_steps        2000
   safety_factor  0.7
@@ -194,7 +194,7 @@
 VelocityVerlet:
   n_steps        2000
   Δt             0.0001
-  safety_factor  0.7
source
Peridynamics.DynamicRelaxationType
DynamicRelaxation(; kwargs...)

Time integration solver for the adaptive dynamic relaxation algorithm used for quasi-static simulations.

Keywords

  • steps::Int: Number of calculated time steps. If this keyword is specified, the keyword time is no longer allowed.
  • stepsize::Real: Manually specify the size of the time step. (default: 1.0)
  • damping_factor::Real: Damping factor to increase the value in the mass matrix. (default: 1.0)

Throws

  • Errors if steps < 0.
  • Errors if stepsize < 0.
  • Errors if damping_factor < 0.

Example

julia> DynamicRelaxation(steps=1000)
+  safety_factor  0.7
source
Peridynamics.DynamicRelaxationType
DynamicRelaxation(; kwargs...)

Time integration solver for the adaptive dynamic relaxation algorithm used for quasi-static simulations.

Keywords

  • steps::Int: Number of calculated time steps. If this keyword is specified, the keyword time is no longer allowed.
  • stepsize::Real: Manually specify the size of the time step. (default: 1.0)
  • damping_factor::Real: Damping factor to increase the value in the mass matrix. (default: 1.0)

Throws

  • Errors if steps < 0.
  • Errors if stepsize < 0.
  • Errors if damping_factor < 0.

Example

julia> DynamicRelaxation(steps=1000)
 DynamicRelaxation:
   n_steps  1000
   Δt       1
@@ -204,14 +204,14 @@
 DynamicRelaxation:
   n_steps  1000
   Δt       1
-  Λ        2
source
Peridynamics.JobType
Job(spatial_setup, time_solver; kwargs...)

A type that contains all the information necessary for a peridynamic simulation. You can submit a Job to start the simulation.

Arguments

Keywords

  • path::String: Path to store results. If it does not exist yet it will be created during the simulation. (optional)

  • freq::Int: Output frequency of result files. A output file will be written every freq-th time step. (default: 10)

  • fields: Fields that should be exported to output files. Allowed keywords depend on the selected material model. Please look at the documentation of the material you specified when creating the body. (default: (:displacement, :damage))

    If spatial_setup is a Body, the fields keyword can be of the form:

    • fields::Symbol: A symbol specifying a single output field.
    • fields::NTuple{N,Symbol} where N: A Tuple specifying multiple output fields.
    • fields::Vector{Symbol}: A Vector specifying multiple output fields.

    If spatial_setup is a MultibodySetup, the fields keyword can also be specified for every body separately:

    • fields::Dict{Symbol,T}: A Dictionary containing the fields separately for every body. T is here every possible type of the fields keyword that can be used for a single body.
No file export

If no keyword is specified when creating a Job, then no files will be exported.

Example

julia> job = Job(multibody_setup, verlet_solver; path="my_results/sim1")
+  Λ        2
source
Peridynamics.JobType
Job(spatial_setup, time_solver; kwargs...)

A type that contains all the information necessary for a peridynamic simulation. You can submit a Job to start the simulation.

Arguments

Keywords

  • path::String: Path to store results. If it does not exist yet it will be created during the simulation. (optional)

  • freq::Int: Output frequency of result files. A output file will be written every freq-th time step. (default: 10)

  • fields: Fields that should be exported to output files. Allowed keywords depend on the selected material model. Please look at the documentation of the material you specified when creating the body. (default: (:displacement, :damage))

    If spatial_setup is a Body, the fields keyword can be of the form:

    • fields::Symbol: A symbol specifying a single output field.
    • fields::NTuple{N,Symbol} where N: A Tuple specifying multiple output fields.
    • fields::Vector{Symbol}: A Vector specifying multiple output fields.

    If spatial_setup is a MultibodySetup, the fields keyword can also be specified for every body separately:

    • fields::Dict{Symbol,T}: A Dictionary containing the fields separately for every body. T is here every possible type of the fields keyword that can be used for a single body.
No file export

If no keyword is specified when creating a Job, then no files will be exported.

Example

julia> job = Job(multibody_setup, verlet_solver; path="my_results/sim1")
 Job:
   spatial_setup  25880-point MultibodySetup
   time_solver    VelocityVerlet(n_steps=2000, safety_factor=0.7)
-  options        export_allowed=true, freq=10
source
Peridynamics.submitFunction
submit(job::Job; quiet=false)

Run the simulation by submitting the job.

Arguments

  • job::Job: Job that contains all defined parameters and conditions.

Keywords

  • quiet::Bool: If true, no outputs are printed in the terminal. (default: false)
source

Postprocessing

Peridynamics.VtkReader.read_vtkFunction
read_vtk(file::AbstractString)

Read vtu or pvtu file containing simulation results of a time step.

Arguments

  • file::String: Path to VTK file in vtu or pvtu format

Returns

  • Dict{String, VecOrMat{Float64}}: Simulation results as a dictionary

Examples

julia> read_vtk("results/fragmenting_cylinder/vtk/timestep_000520.pvtu")
+  options        export_allowed=true, freq=10
source
Peridynamics.submitFunction
submit(job::Job; quiet=false)

Run the simulation by submitting the job.

Arguments

  • job::Job: Job that contains all defined parameters and conditions.

Keywords

  • quiet::Bool: If true, no outputs are printed in the terminal. (default: false)
source

Postprocessing

Peridynamics.VtkReader.read_vtkFunction
read_vtk(file::AbstractString)

Read vtu or pvtu file containing simulation results of a time step.

Arguments

  • file::String: Path to VTK file in vtu or pvtu format

Returns

  • Dict{String, VecOrMat{Float64}}: Simulation results as a dictionary

Examples

julia> read_vtk("results/fragmenting_cylinder/vtk/timestep_000520.pvtu")
 Dict{Symbol, VecOrMat{Float64}} with 4 entries:
   :position     => [0.0263309 0.027315 … 0.0293543 0.030339; 0.000292969 0.000294475…
   :displacement => [0.00583334 0.00581883 … 0.00585909 0.00584271; -0.000162852 -0.0…
   :damage       => [0.616071, 0.569343, 0.528571, 0.463415, 0.438776, 0.553571, 0.56…
-  :time         => [9.69363e-5]
source
Peridynamics.process_each_exportFunction
process_each_export(f, vtk_path; kwargs...)
-process_each_export(f, job; kwargs...)

A function for postprocessing every exported file. This function works with multithreading and MPI and determines the backend exactly like the submit function.

Arguments

  • f::Function: The processing function with signature f(r0, r, id).
    • r0: The results of read_vtk for the exported file of the reference results.
    • r: The results of read_vtk for a time step.
    • id::Ind: An ID indicating the number of the exported file (counted from 1, starting with the reference file).
  • vtk_path::AbstractString: A path that should contain the export results of a simulation.
  • job::Job: A job object. The path of the VTK files will then be processed from the job options.

Keywords

  • serial::Bool: If true, all results will be processed in the correct order of the time steps and on a single thread, cf. the MPI root rank.
source
+ :time => [9.69363e-5]source
Peridynamics.process_each_exportFunction
process_each_export(f, vtk_path; kwargs...)
+process_each_export(f, job; kwargs...)

A function for postprocessing every exported file. This function works with multithreading and MPI and determines the backend exactly like the submit function.

Arguments

  • f::Function: The processing function with signature f(r0, r, id).
    • r0: The results of read_vtk for the exported file of the reference results.
    • r: The results of read_vtk for a time step.
    • id::Ind: An ID indicating the number of the exported file (counted from 1, starting with the reference file).
  • vtk_path::AbstractString: A path that should contain the export results of a simulation.
  • job::Job: A job object. The path of the VTK files will then be processed from the job options.

Keywords

  • serial::Bool: If true, all results will be processed in the correct order of the time steps and on a single thread, cf. the MPI root rank.
source
diff --git a/dev/expl_bondbased/index.html b/dev/expl_bondbased/index.html index 25cea482..058eb432 100644 --- a/dev/expl_bondbased/index.html +++ b/dev/expl_bondbased/index.html @@ -1,2 +1,2 @@ -Bond-based peridynamics · Peridynamics.jl

Bond-based peridynamics

The initial version of peridynamics is the bond-based (BB) formulation. [Sil00]

Here, a pairwise force function $\boldsymbol{f}$ is defined and calculated for each bond of two material points, which depends on the strain of the bond and is aligned in its direction:

\[ \boldsymbol{f} = c \, \varepsilon^{ij} \, \boldsymbol{n} \; .\]

Here the micro-modulus constant [SA05]

\[c = \frac{18 \, \kappa}{\pi \, \delta^4} \;\]

and the strain of the bond [SB05]

\[\varepsilon^{ij} = \frac{l^{ij}-L^{ij}}{L^{ij}}\]

with bond lengths $L^{ij} =\left|\boldsymbol{\Delta X}^{ij}\right|$ and $l^{ij} =\left|\boldsymbol{\Delta x}^{ij}\right|$ are used.

The direction vector

\[\boldsymbol{n} = \frac{\boldsymbol{\Delta x}^{ij}}{l^{ij}}\]

is oriented in the direction of the bond.

To get the resulting body forces, now the force function is integrated over the whole body:

\[\boldsymbol{b}^{\mathrm{int},i} = \boldsymbol{b}^{\mathrm{int}} (\boldsymbol{X} ^ {i} , t) = \int_{\mathcal{H}_i} \boldsymbol{f} \; \mathrm{d}V^j \; .\]

SizeSymbolUnit
Pairwise force function$\boldsymbol{f}$$\left[\frac{\mathrm{kg}}{\mathrm{m}^5\mathrm{s}^2}\right]$
Micro-modulus constant [SA05]$c$$\left[\frac{\mathrm{kg}}{\mathrm{m}^5\mathrm{s}^2}\right]$
Bond strain$\varepsilon^{ij}$$[-]$
Bond in $\mathcal{B}_0$$\boldsymbol{\Delta X}^{ij}$$[\mathrm{m}]$
Bond in $\mathcal{B}_t$$\boldsymbol{\Delta x}^{ij}$$[\mathrm{m}]$
Bond length in $\mathcal{B}_0$$L^{ij}$$[\mathrm{m}]$
Bond length in $\mathcal{B}_t$$l^{ij}$$[\mathrm{m}]$
Direction vector$\boldsymbol{n}$$[-]$
Volume of point $j$$V^j$$\left[\mathrm{m}^3\right]$
Internal force density$\boldsymbol{b}^{\mathrm{int},i}$$\left[\frac{\mathrm{kg}}{\mathrm{m}^2\mathrm{s}^2}\right]$
+Bond-based peridynamics · Peridynamics.jl

Bond-based peridynamics

The initial version of peridynamics is the bond-based (BB) formulation. [Sil00]

Here, a pairwise force function $\boldsymbol{f}$ is defined and calculated for each bond of two material points, which depends on the strain of the bond and is aligned in its direction:

\[ \boldsymbol{f} = c \, \varepsilon^{ij} \, \boldsymbol{n} \; .\]

Here the micro-modulus constant [SA05]

\[c = \frac{18 \, \kappa}{\pi \, \delta^4} \;\]

and the strain of the bond [SB05]

\[\varepsilon^{ij} = \frac{l^{ij}-L^{ij}}{L^{ij}}\]

with bond lengths $L^{ij} =\left|\boldsymbol{\Delta X}^{ij}\right|$ and $l^{ij} =\left|\boldsymbol{\Delta x}^{ij}\right|$ are used.

The direction vector

\[\boldsymbol{n} = \frac{\boldsymbol{\Delta x}^{ij}}{l^{ij}}\]

is oriented in the direction of the bond.

To get the resulting body forces, now the force function is integrated over the whole body:

\[\boldsymbol{b}^{\mathrm{int},i} = \boldsymbol{b}^{\mathrm{int}} (\boldsymbol{X} ^ {i} , t) = \int_{\mathcal{H}_i} \boldsymbol{f} \; \mathrm{d}V^j \; .\]

SizeSymbolUnit
Pairwise force function$\boldsymbol{f}$$\left[\frac{\mathrm{kg}}{\mathrm{m}^5\mathrm{s}^2}\right]$
Micro-modulus constant [SA05]$c$$\left[\frac{\mathrm{kg}}{\mathrm{m}^5\mathrm{s}^2}\right]$
Bond strain$\varepsilon^{ij}$$[-]$
Bond in $\mathcal{B}_0$$\boldsymbol{\Delta X}^{ij}$$[\mathrm{m}]$
Bond in $\mathcal{B}_t$$\boldsymbol{\Delta x}^{ij}$$[\mathrm{m}]$
Bond length in $\mathcal{B}_0$$L^{ij}$$[\mathrm{m}]$
Bond length in $\mathcal{B}_t$$l^{ij}$$[\mathrm{m}]$
Direction vector$\boldsymbol{n}$$[-]$
Volume of point $j$$V^j$$\left[\mathrm{m}^3\right]$
Internal force density$\boldsymbol{b}^{\mathrm{int},i}$$\left[\frac{\mathrm{kg}}{\mathrm{m}^2\mathrm{s}^2}\right]$
diff --git a/dev/expl_continuumbased/index.html b/dev/expl_continuumbased/index.html index f981ff3a..55dc7275 100644 --- a/dev/expl_continuumbased/index.html +++ b/dev/expl_continuumbased/index.html @@ -4,4 +4,4 @@ \frac{\boldsymbol{\Delta x}^{ik} \times \boldsymbol{a}^{ijk}}{a^{ijk}} \; \mathrm{d} V_2^i \; .\]

SizeSymbolUnit
Relative area measures$A^{ijk}$, $a^{ijk}$, $\boldsymbol{a}^{ijk}$$[\mathrm{m}^2]$
Effective two-neighbor volume$V_2^i$$[\mathrm{m}^6]$
Number of two-neighbor interactions$N_2^i$$[-]$
Material constant$C_2$$[\frac{\mathrm{kg}}{\mathrm{m}^9\mathrm{s}^2}]$

Three-neighbor interactions

Three-neighbor interactions regard the volume defined by the bond vectors between point $i$ and its three neighbors $j$, $k$ and $l$:

\[V^{ijkl} = \left(\boldsymbol{\Delta X}^{ij} \times \boldsymbol{\Delta X}^{ik}\right) \cdot \boldsymbol{\Delta X}^{il} \;,\qquad v^{ijkl} = \left(\boldsymbol{\Delta x}^{ij} \times \boldsymbol{\Delta x}^{ik}\right) \cdot \boldsymbol{\Delta x}^{il} \;.\]

Additionally, the effective three-neighbor volume

\[ V_3^i = \frac{ \left(V_\mathcal{H}^i\right)^3}{N_3^i} \; .\]

is defined. For the internal force density of three-neighbor interactions, the equation

\[\boldsymbol{b}_{3}^{\mathrm{int}, \, i} = 3 \, C_3 \int_{\mathcal{H}_3^i} \left( \frac{\left|{v^{ijkl}}\right|}{\left|{V^{ijkl}}\right|} - 1 \right) -\frac{\left(\boldsymbol{\Delta x}^{ik} \times \boldsymbol{\Delta x}^{il}\right) v^{ijkl}}{\left|{v^{ijkl}}\right|} \; \mathrm{d} V_3^i\]

with the material constant $C_3$ is used.

SizeSymbolUnit
Relative volume measures$V^{ijkl}$, $v^{ijkl}$$[\mathrm{m}^3]$
Effective three-neighbor volume$V_3^i$$[\mathrm{m}^9]$
Number of three-neighbor interactions$N_3^i$$[-]$
Material constant$C_3$$[\frac{\mathrm{kg}}{\mathrm{m}^{13}\mathrm{s}^2}]$
+\frac{\left(\boldsymbol{\Delta x}^{ik} \times \boldsymbol{\Delta x}^{il}\right) v^{ijkl}}{\left|{v^{ijkl}}\right|} \; \mathrm{d} V_3^i\]

with the material constant $C_3$ is used.

SizeSymbolUnit
Relative volume measures$V^{ijkl}$, $v^{ijkl}$$[\mathrm{m}^3]$
Effective three-neighbor volume$V_3^i$$[\mathrm{m}^9]$
Number of three-neighbor interactions$N_3^i$$[-]$
Material constant$C_3$$[\frac{\mathrm{kg}}{\mathrm{m}^{13}\mathrm{s}^2}]$
diff --git a/dev/expl_damage/index.html b/dev/expl_damage/index.html index 5f47a0c8..f4b30e80 100644 --- a/dev/expl_damage/index.html +++ b/dev/expl_damage/index.html @@ -3,4 +3,4 @@ 2 \, C_2 \int_{\mathcal{H}_2^i} d^{ijk} \left( \frac{a^{ijk}}{A^{ijk}} - 1 \right) \frac{\boldsymbol{\Delta x}^{ik} \times \boldsymbol{a}^{ijk}}{a^{ijk}} \; \mathrm{d} V_2^i \]

with the two-neighbor interaction failure quantity $d^{ijk} \in \{0;1\}$.

For three-neighbor interactions the internal force density eventually reads

\[\boldsymbol{b}_{3}^{\mathrm{int}, \, i} = 3 \, C_3 \int_{\mathcal{H}_3^i} d^{ijkl} \left( \frac{\left|{v^{ijkl}}\right|}{\left|{V^{ijkl}}\right|} - 1 \right) -\frac{\left(\boldsymbol{\Delta x}^{ik} \times \boldsymbol{\Delta x}^{il}\right) v^{ijkl}}{\left|{v^{ijkl}}\right|} \; \mathrm{d} V_3^i\]

with the three-neighbor interaction failure quantity $d^{ijkl} \in \{0;1\}$.

SizeSymbolUnit
Bond failure quantity$d^{ij} \in \{0;1\}$$[-]$
Two-neighbor interaction failure quantity$d^{ijk} \in \{0;1\}$$[-]$
Three-neighbor interaction failure quantity$d^{ijkl} \in \{0;1\}$$[-]$
+\frac{\left(\boldsymbol{\Delta x}^{ik} \times \boldsymbol{\Delta x}^{il}\right) v^{ijkl}}{\left|{v^{ijkl}}\right|} \; \mathrm{d} V_3^i\]

with the three-neighbor interaction failure quantity $d^{ijkl} \in \{0;1\}$.

SizeSymbolUnit
Bond failure quantity$d^{ij} \in \{0;1\}$$[-]$
Two-neighbor interaction failure quantity$d^{ijk} \in \{0;1\}$$[-]$
Three-neighbor interaction failure quantity$d^{ijkl} \in \{0;1\}$$[-]$
diff --git a/dev/expl_general_pd/index.html b/dev/expl_general_pd/index.html index dc8be56e..aae8773d 100644 --- a/dev/expl_general_pd/index.html +++ b/dev/expl_general_pd/index.html @@ -1,2 +1,2 @@ -Basics of peridynamics theory · Peridynamics.jl

Basics of peridynamics theory

Peridynamics is a nonlocal continuum mechanics formulation, which was introduced by Silling [Sil00]. It has gained increased popularity as an approach for modeling fracture. The deformation of the solid is described by integro-differential equations that are also fulfilled for discontinuities, making it very capable of modeling crack propagation and fragmentation with large displacements. Much peridynamics research has been done in recent years, summarized in various review papers and books [DPL19, JMOO19, MO14].

Typically, in peridynamics the continuum is discretized by material points. Points interact only with other points inside of their specified neighborhood or point family $\mathcal{H}$, which is defined as the set of points inside a sphere with the radius $\delta$, also named the horizon. The interaction of the point $\boldsymbol{X}$ with its neighbor $\boldsymbol{X}'$ is called bond and defined as

\[\boldsymbol{\Delta X} = \boldsymbol{X}' - \boldsymbol{X} \; .\]

The equation of motion reads

\[\varrho \, \boldsymbol{\ddot{u}}(\boldsymbol{X},t) = \boldsymbol{b}^{\mathrm{int}}(\boldsymbol{X},t) + \boldsymbol{b}^{\mathrm{ext}}(\boldsymbol{X},t) \; ,\]

with the mass density $\varrho$, the point acceleration vector $\boldsymbol{\ddot{u}}$, and the point force density vectors $\boldsymbol{b}^{\mathrm{int}}$ and $\boldsymbol{b}^{\mathrm{ext}}$. Various material formulations of peridynamics exist for the calculation of the internal force density $\boldsymbol{b}^{\mathrm{int}}$, and all of them are based on the nonlocal interactions between material points.

The general internal force density for state-based peridynamics is defined as

\[\boldsymbol{b}^{\mathrm{int}} (\boldsymbol{X},t) = \int_\mathcal{H} \boldsymbol{t} - \boldsymbol{t}' \; \mathrm{d}V' \; ,\]

with the force vector states $\boldsymbol{t}=\boldsymbol{t}(\boldsymbol{\Delta X}, t)$ and $\boldsymbol{t}'=\boldsymbol{t}(-\boldsymbol{\Delta X}, t)$. In the first original bond-based formulation of peridynamics, the force vector states $\boldsymbol{t}$ and $\boldsymbol{t}'$ have the same value and opposite direction. This implies intrinsic limitation to only one material parameter and in consequence to restrictions on the Poisson's ratio [SEW+07, TS20]. To overcome these restrictions, state-based peridynamics was established. In the ordinary state-based peridynamics, the deformation states of neighboring points also influence the internal force density [SEW+07]. This leads to force vector states which are still collinear but not of same value anymore.

Further developments are summarized as non-ordinary state-based peridynamics. A recent development in this regard is continuum-kinematics-inspired peridynamics [JMS19]. Another peridynamic formulation is the local continuum consistent correspondence formulation of non-ordinary state-based peridynamics, where an elastic model from the classical local material theory can be used to calculate the internal force density.

+Basics of peridynamics theory · Peridynamics.jl

Basics of peridynamics theory

Peridynamics is a nonlocal continuum mechanics formulation, which was introduced by Silling [Sil00]. It has gained increased popularity as an approach for modeling fracture. The deformation of the solid is described by integro-differential equations that are also fulfilled for discontinuities, making it very capable of modeling crack propagation and fragmentation with large displacements. Much peridynamics research has been done in recent years, summarized in various review papers and books [DPL19, JMOO19, MO14].

Typically, in peridynamics the continuum is discretized by material points. Points interact only with other points inside of their specified neighborhood or point family $\mathcal{H}$, which is defined as the set of points inside a sphere with the radius $\delta$, also named the horizon. The interaction of the point $\boldsymbol{X}$ with its neighbor $\boldsymbol{X}'$ is called bond and defined as

\[\boldsymbol{\Delta X} = \boldsymbol{X}' - \boldsymbol{X} \; .\]

The equation of motion reads

\[\varrho \, \boldsymbol{\ddot{u}}(\boldsymbol{X},t) = \boldsymbol{b}^{\mathrm{int}}(\boldsymbol{X},t) + \boldsymbol{b}^{\mathrm{ext}}(\boldsymbol{X},t) \; ,\]

with the mass density $\varrho$, the point acceleration vector $\boldsymbol{\ddot{u}}$, and the point force density vectors $\boldsymbol{b}^{\mathrm{int}}$ and $\boldsymbol{b}^{\mathrm{ext}}$. Various material formulations of peridynamics exist for the calculation of the internal force density $\boldsymbol{b}^{\mathrm{int}}$, and all of them are based on the nonlocal interactions between material points.

The general internal force density for state-based peridynamics is defined as

\[\boldsymbol{b}^{\mathrm{int}} (\boldsymbol{X},t) = \int_\mathcal{H} \boldsymbol{t} - \boldsymbol{t}' \; \mathrm{d}V' \; ,\]

with the force vector states $\boldsymbol{t}=\boldsymbol{t}(\boldsymbol{\Delta X}, t)$ and $\boldsymbol{t}'=\boldsymbol{t}(-\boldsymbol{\Delta X}, t)$. In the first original bond-based formulation of peridynamics, the force vector states $\boldsymbol{t}$ and $\boldsymbol{t}'$ have the same value and opposite direction. This implies intrinsic limitation to only one material parameter and in consequence to restrictions on the Poisson's ratio [SEW+07, TS20]. To overcome these restrictions, state-based peridynamics was established. In the ordinary state-based peridynamics, the deformation states of neighboring points also influence the internal force density [SEW+07]. This leads to force vector states which are still collinear but not of same value anymore.

Further developments are summarized as non-ordinary state-based peridynamics. A recent development in this regard is continuum-kinematics-inspired peridynamics [JMS19]. Another peridynamic formulation is the local continuum consistent correspondence formulation of non-ordinary state-based peridynamics, where an elastic model from the classical local material theory can be used to calculate the internal force density.

diff --git a/dev/expl_nosbased/index.html b/dev/expl_nosbased/index.html index 6d71f35a..2b0dfbd7 100644 --- a/dev/expl_nosbased/index.html +++ b/dev/expl_nosbased/index.html @@ -1,2 +1,2 @@ -Non-ordinary state-based peridynamics · Peridynamics.jl

Non-ordinary state-based peridynamics

Non-ordinary state based-formulations have been developed to extend state-based peridynamics. Hereafter, the correspondence formulation of non-ordinary state based peridynamics is considered, which uses an elastic model from the classical theory. [SEW+07]

First, the symmetric shape tensor is calculated:

\[\boldsymbol{K}^i = \boldsymbol{K}(\boldsymbol{X}^i) = \int_{\mathcal{H}_i} \omega \, \boldsymbol{\Delta X}^{ij} \otimes \boldsymbol{\Delta X}^{ij} \; \mathrm{d}V^j \; .\]

Here, $\omega$ is an influence function to weigh points differently. The deformation gradient is thus approximated as [SEW+07]

\[\boldsymbol{F}^i = \boldsymbol{F}(\boldsymbol{X}^i,t) = \left(\int_{\mathcal{H}_i} \omega \, \boldsymbol{\Delta x}^{ij} \otimes \boldsymbol{\Delta X}^{ij} \; \mathrm{d}V^j\right) \left(\boldsymbol{K}^i\right)^{-1} \; .\]

Using the deformation gradient, now the first Piola-Kirchhoff stress tensor can be determined with the Helmholtz energy density $\Psi$:

\[\boldsymbol{P}^i = \boldsymbol{P}(\boldsymbol{X}^i,t) = \frac{\partial \Psi}{\partial \boldsymbol{F}^i} \; .%= \boldsymbol{F} \boldsymbol{S} \; .\]

Using the calculated variables, the force vector state can now be determined by [SEW+07]

\[\boldsymbol{t}^i = \omega \boldsymbol{P}^i \left(\boldsymbol{K}^i\right)^{-1} \boldsymbol{\Delta X}^{ij} \; .\]

SizeSymbolUnit
Bond in $\mathcal{B}_0$$\boldsymbol{\Delta X}^{ij}$$[\mathrm{m}]$
Bond in $\mathcal{B}_t$$\boldsymbol{\Delta x}^{ij}$$[\mathrm{m}]$
Influence function$\omega$$[-]$
Volume of point $j$$V^j$$\left[\mathrm{m}^3\right]$
Symmetric shape tensor$\boldsymbol{K}^i$$\left[\mathrm{m}^5\right]$
Deformation gradient$\boldsymbol{F}^i$$[-]$
Helmholtz energy density$\Psi$$\left[\frac{\mathrm{kg}}{\mathrm{m}\mathrm{s}^2}\right]$
Piola-Kirchhoff stress tensor$\boldsymbol{P}^i$$\left[\frac{\mathrm{kg}}{\mathrm{m}\mathrm{s}^2}\right]$
Force vector state$\boldsymbol{t}^i$$\left[\frac{\mathrm{kg}}{\mathrm{m}^5\mathrm{s}^2}\right]$
+Non-ordinary state-based peridynamics · Peridynamics.jl

Non-ordinary state-based peridynamics

Non-ordinary state based-formulations have been developed to extend state-based peridynamics. Hereafter, the correspondence formulation of non-ordinary state based peridynamics is considered, which uses an elastic model from the classical theory. [SEW+07]

First, the symmetric shape tensor is calculated:

\[\boldsymbol{K}^i = \boldsymbol{K}(\boldsymbol{X}^i) = \int_{\mathcal{H}_i} \omega \, \boldsymbol{\Delta X}^{ij} \otimes \boldsymbol{\Delta X}^{ij} \; \mathrm{d}V^j \; .\]

Here, $\omega$ is an influence function to weigh points differently. The deformation gradient is thus approximated as [SEW+07]

\[\boldsymbol{F}^i = \boldsymbol{F}(\boldsymbol{X}^i,t) = \left(\int_{\mathcal{H}_i} \omega \, \boldsymbol{\Delta x}^{ij} \otimes \boldsymbol{\Delta X}^{ij} \; \mathrm{d}V^j\right) \left(\boldsymbol{K}^i\right)^{-1} \; .\]

Using the deformation gradient, now the first Piola-Kirchhoff stress tensor can be determined with the Helmholtz energy density $\Psi$:

\[\boldsymbol{P}^i = \boldsymbol{P}(\boldsymbol{X}^i,t) = \frac{\partial \Psi}{\partial \boldsymbol{F}^i} \; .%= \boldsymbol{F} \boldsymbol{S} \; .\]

Using the calculated variables, the force vector state can now be determined by [SEW+07]

\[\boldsymbol{t}^i = \omega \boldsymbol{P}^i \left(\boldsymbol{K}^i\right)^{-1} \boldsymbol{\Delta X}^{ij} \; .\]

SizeSymbolUnit
Bond in $\mathcal{B}_0$$\boldsymbol{\Delta X}^{ij}$$[\mathrm{m}]$
Bond in $\mathcal{B}_t$$\boldsymbol{\Delta x}^{ij}$$[\mathrm{m}]$
Influence function$\omega$$[-]$
Volume of point $j$$V^j$$\left[\mathrm{m}^3\right]$
Symmetric shape tensor$\boldsymbol{K}^i$$\left[\mathrm{m}^5\right]$
Deformation gradient$\boldsymbol{F}^i$$[-]$
Helmholtz energy density$\Psi$$\left[\frac{\mathrm{kg}}{\mathrm{m}\mathrm{s}^2}\right]$
Piola-Kirchhoff stress tensor$\boldsymbol{P}^i$$\left[\frac{\mathrm{kg}}{\mathrm{m}\mathrm{s}^2}\right]$
Force vector state$\boldsymbol{t}^i$$\left[\frac{\mathrm{kg}}{\mathrm{m}^5\mathrm{s}^2}\right]$
diff --git a/dev/expl_osbased/index.html b/dev/expl_osbased/index.html index 3962ca44..84e10c16 100644 --- a/dev/expl_osbased/index.html +++ b/dev/expl_osbased/index.html @@ -1,2 +1,2 @@ -Ordinary state-based peridynamics · Peridynamics.jl

Ordinary state-based peridynamics

The state-based peridynamics formulation considers not only the deformation of the bonds of one material point, but also the states of all neighbors to calculate the internal force density $\boldsymbol{b}^{\mathrm{int},i}$ as

\[\boldsymbol{b}^{\mathrm{int},i} = \boldsymbol{b}^{\mathrm{int}} (\boldsymbol{X}^i,t) = \int_{\mathcal{H}_i} \boldsymbol{t}^i - \boldsymbol{t}^j \; \mathrm{d}V^j \; ,\]

with the force vector states $\boldsymbol{t}^i=\boldsymbol{t}(\boldsymbol{\Delta X}^{ij}, t)$ and $\boldsymbol{t}^j=\boldsymbol{t}(-\boldsymbol{\Delta X}^{ij}, t)$, which characterize the state of each bond at time $t$ [SEW+07]. To determine the force vector states, the weighted volume $m_i$ is calculated first as

\[m_i = m \left( \boldsymbol{X}^i \right) = \int_{\mathcal{H}_i} \omega \, | \boldsymbol{\Delta X}^{ij} |^2 \, \mathrm{d} V^j \; .\]

Here, $\omega$ is the influence function that gives a greater influence to neighbors near the root point. [SEW+07] Then the dilatation $\theta_i$ is needed, which is defined with the weighted volume $m_i$ as

\[\theta_i = \theta \left( \boldsymbol{X}^i \right) = \frac{3}{m_i} \int_{\mathcal{H}_i} \omega \, | \boldsymbol{\Delta X}^{ij} | \, \left( |\boldsymbol{\Delta x}^{ij}|-|\boldsymbol{\Delta X}^{ij}| \right) \mathrm{d} V^j \; .\]

With the previously determined variables, the force vector state $\boldsymbol{t}^i$ is defined as

\[\boldsymbol{t}^i \left( \boldsymbol{\Delta X}^{ij} \right) = \frac{K \, \theta_i}{m_i} \, \omega \, | \boldsymbol{\Delta X}^{ij} | + \frac{15 \, G}{m_i} \, \omega \, \left( |\boldsymbol{\Delta x}^{ij}|-|\boldsymbol{\Delta X}^{ij}| - \frac{\theta_i \, |\boldsymbol{\Delta X}^{ij}|}{3} \right) \; .\]

with shear modulus $G$ and bulk modulus $K$ [SEW+07].

SizeSymbolUnit
Internal force density$\boldsymbol{b}^{\mathrm{int},i}$$\left[\frac{\mathrm{kg}}{\mathrm{m}^2\mathrm{s}^2}\right]$
Force vector state$ \boldsymbol{t}^i $$\left[\frac{\mathrm{kg}}{\mathrm{m}^5\mathrm{s}^2}\right]$
Volume of point $j$$V^j$$\left[\mathrm{m}^3\right]$
Bond in $\mathcal{B}_0$$\boldsymbol{\Delta X}^{ij}$$[\mathrm{m}]$
Bond in $\mathcal{B}_t$$\boldsymbol{\Delta x}^{ij}$$[\mathrm{m}]$
Bond length in $\mathcal{B}_0$$\left|\boldsymbol{\Delta X}^{ij}\right|$$[\mathrm{m}]$
Bond length in $\mathcal{B}_t$$\left|\boldsymbol{\Delta x}^{ij}\right|$$[\mathrm{m}]$
Influence function$\omega$$[-]$
Weighted volume$ m_i $$\left[\mathrm{m}^5\right]$
Dilatation$\theta_i$$[-]$
Shear modulus$G$$\left[\frac{\mathrm{kg}}{\mathrm{m}\mathrm{s}^2}\right]$
Bulk modulus$K$$\left[\frac{\mathrm{kg}}{\mathrm{m}\mathrm{s}^2}\right]$
+Ordinary state-based peridynamics · Peridynamics.jl

Ordinary state-based peridynamics

The state-based peridynamics formulation considers not only the deformation of the bonds of one material point, but also the states of all neighbors to calculate the internal force density $\boldsymbol{b}^{\mathrm{int},i}$ as

\[\boldsymbol{b}^{\mathrm{int},i} = \boldsymbol{b}^{\mathrm{int}} (\boldsymbol{X}^i,t) = \int_{\mathcal{H}_i} \boldsymbol{t}^i - \boldsymbol{t}^j \; \mathrm{d}V^j \; ,\]

with the force vector states $\boldsymbol{t}^i=\boldsymbol{t}(\boldsymbol{\Delta X}^{ij}, t)$ and $\boldsymbol{t}^j=\boldsymbol{t}(-\boldsymbol{\Delta X}^{ij}, t)$, which characterize the state of each bond at time $t$ [SEW+07]. To determine the force vector states, the weighted volume $m_i$ is calculated first as

\[m_i = m \left( \boldsymbol{X}^i \right) = \int_{\mathcal{H}_i} \omega \, | \boldsymbol{\Delta X}^{ij} |^2 \, \mathrm{d} V^j \; .\]

Here, $\omega$ is the influence function that gives a greater influence to neighbors near the root point. [SEW+07] Then the dilatation $\theta_i$ is needed, which is defined with the weighted volume $m_i$ as

\[\theta_i = \theta \left( \boldsymbol{X}^i \right) = \frac{3}{m_i} \int_{\mathcal{H}_i} \omega \, | \boldsymbol{\Delta X}^{ij} | \, \left( |\boldsymbol{\Delta x}^{ij}|-|\boldsymbol{\Delta X}^{ij}| \right) \mathrm{d} V^j \; .\]

With the previously determined variables, the force vector state $\boldsymbol{t}^i$ is defined as

\[\boldsymbol{t}^i \left( \boldsymbol{\Delta X}^{ij} \right) = \frac{K \, \theta_i}{m_i} \, \omega \, | \boldsymbol{\Delta X}^{ij} | + \frac{15 \, G}{m_i} \, \omega \, \left( |\boldsymbol{\Delta x}^{ij}|-|\boldsymbol{\Delta X}^{ij}| - \frac{\theta_i \, |\boldsymbol{\Delta X}^{ij}|}{3} \right) \; .\]

with shear modulus $G$ and bulk modulus $K$ [SEW+07].

SizeSymbolUnit
Internal force density$\boldsymbol{b}^{\mathrm{int},i}$$\left[\frac{\mathrm{kg}}{\mathrm{m}^2\mathrm{s}^2}\right]$
Force vector state$ \boldsymbol{t}^i $$\left[\frac{\mathrm{kg}}{\mathrm{m}^5\mathrm{s}^2}\right]$
Volume of point $j$$V^j$$\left[\mathrm{m}^3\right]$
Bond in $\mathcal{B}_0$$\boldsymbol{\Delta X}^{ij}$$[\mathrm{m}]$
Bond in $\mathcal{B}_t$$\boldsymbol{\Delta x}^{ij}$$[\mathrm{m}]$
Bond length in $\mathcal{B}_0$$\left|\boldsymbol{\Delta X}^{ij}\right|$$[\mathrm{m}]$
Bond length in $\mathcal{B}_t$$\left|\boldsymbol{\Delta x}^{ij}\right|$$[\mathrm{m}]$
Influence function$\omega$$[-]$
Weighted volume$ m_i $$\left[\mathrm{m}^5\right]$
Dilatation$\theta_i$$[-]$
Shear modulus$G$$\left[\frac{\mathrm{kg}}{\mathrm{m}\mathrm{s}^2}\right]$
Bulk modulus$K$$\left[\frac{\mathrm{kg}}{\mathrm{m}\mathrm{s}^2}\right]$
diff --git a/dev/expl_references/index.html b/dev/expl_references/index.html index 093e7c6a..95e20b62 100644 --- a/dev/expl_references/index.html +++ b/dev/expl_references/index.html @@ -1,2 +1,2 @@ -References · Peridynamics.jl

References

[DPL19]
P. Diehl, S. Prudhomme and M. Lévesque. A Review of Benchmark Experiments for the Validation of Peridynamics Models. Journal of Peridynamics and Nonlocal Modeling 1, 14–35 (2019).
[JMS19]
A. Javili, A. McBride and P. Steinmann. Continuum-kinematics-inspired peridynamics. Mechanical problems. Journal of the Mechanics and Physics of Solids 131 (2019).
[JMOO19]
A. Javili, R. Morasata, E. Oterkus and S. Oterkus. Peridynamics review. Mathematics and Mechanics of Solids 24, 3714–3739 (2019).
[MO14]
E. Madenci and E. Oterkus. Peridynamic Theory and Its Applications (Springer New York, New York, 2014).
[Sil00]
S. A. Silling. Reformulation of elasticity theory for discontinuities and long-range forces. Journal of the Mechanics and Physics of Solids 48, 175–209 (2000).
[SEW+07]
S. A. Silling, M. Epton, O. Weckner, J. Xu and E. Askari. Peridynamic States and Constitutive Modeling. Journal of Elasticity 88, 151–184 (2007). Accessed on Oct 15, 2020.
[SA05]
S. Silling and E. Askari. A meshfree method based on the peridynamic model of solid mechanics. Computers & Structures 83, 1526–1535 (2005).
[SB05]
S. Silling and F. Bobaru. Peridynamic modeling of membranes and fibers. International Journal of Non-Linear Mechanics 40, 395–409 (2005). Special Issue in Honour of C.O. Horgan.
[TS20]
J. Trageser and P. Seleson. Bond-Based Peridynamics: a Tale of Two Poisson's Ratios. Journal of Peridynamics and Nonlocal Modeling 2, 278–288 (2020).
+References · Peridynamics.jl

References

[DPL19]
P. Diehl, S. Prudhomme and M. Lévesque. A Review of Benchmark Experiments for the Validation of Peridynamics Models. Journal of Peridynamics and Nonlocal Modeling 1, 14–35 (2019).
[JMS19]
A. Javili, A. McBride and P. Steinmann. Continuum-kinematics-inspired peridynamics. Mechanical problems. Journal of the Mechanics and Physics of Solids 131 (2019).
[JMOO19]
A. Javili, R. Morasata, E. Oterkus and S. Oterkus. Peridynamics review. Mathematics and Mechanics of Solids 24, 3714–3739 (2019).
[MO14]
E. Madenci and E. Oterkus. Peridynamic Theory and Its Applications (Springer New York, New York, 2014).
[Sil00]
S. A. Silling. Reformulation of elasticity theory for discontinuities and long-range forces. Journal of the Mechanics and Physics of Solids 48, 175–209 (2000).
[SEW+07]
S. A. Silling, M. Epton, O. Weckner, J. Xu and E. Askari. Peridynamic States and Constitutive Modeling. Journal of Elasticity 88, 151–184 (2007). Accessed on Oct 15, 2020.
[SA05]
S. Silling and E. Askari. A meshfree method based on the peridynamic model of solid mechanics. Computers & Structures 83, 1526–1535 (2005).
[SB05]
S. Silling and F. Bobaru. Peridynamic modeling of membranes and fibers. International Journal of Non-Linear Mechanics 40, 395–409 (2005). Special Issue in Honour of C.O. Horgan.
[TS20]
J. Trageser and P. Seleson. Bond-Based Peridynamics: a Tale of Two Poisson's Ratios. Journal of Peridynamics and Nonlocal Modeling 2, 278–288 (2020).
diff --git a/dev/generated/tutorial_cylinder/index.html b/dev/generated/tutorial_cylinder/index.html index 971fd34a..ac6c9c69 100644 --- a/dev/generated/tutorial_cylinder/index.html +++ b/dev/generated/tutorial_cylinder/index.html @@ -14,4 +14,4 @@ safety_factor 0.7

Finally the job is created

job = Job(body, vv; path="results/fragmenting_cylinder", freq=10)
Job:
   spatial_setup  70500-point Body{BBMaterial{NoCorrection}}
   time_solver    VelocityVerlet(end_time=0.00025, safety_factor=0.7)
-  options        export_allowed=true, freq=10

and subsequently submitted.

submit(job)

+ options export_allowed=true, freq=10

and subsequently submitted.

submit(job)

diff --git a/dev/generated/tutorial_kalthoff-winkler_dynfrac/index.html b/dev/generated/tutorial_kalthoff-winkler_dynfrac/index.html index 0c2375b2..f72827f7 100644 --- a/dev/generated/tutorial_kalthoff-winkler_dynfrac/index.html +++ b/dev/generated/tutorial_kalthoff-winkler_dynfrac/index.html @@ -21,4 +21,4 @@ time_solver VelocityVerlet(end_time=0.0003, safety_factor=0.8) options export_allowed=true, freq=10
@mpitime submit(job)

Conclusion

This tutorial demonstrated how to set up and run the Kalthoff-Winkler experiment using Peridynamics.jl. By simulating this experiment, we can gain insights into the dynamic fracture behavior of materials under high strain rates.

+

Conclusion

This tutorial demonstrated how to set up and run the Kalthoff-Winkler experiment using Peridynamics.jl. By simulating this experiment, we can gain insights into the dynamic fracture behavior of materials under high strain rates.

diff --git a/dev/generated/tutorial_logo/index.html b/dev/generated/tutorial_logo/index.html index 2bfc67ea..991e2ba5 100644 --- a/dev/generated/tutorial_logo/index.html +++ b/dev/generated/tutorial_logo/index.html @@ -34,4 +34,4 @@ safety_factor 0.7

Now we create a directory for the results and create a Job.

job = Job(ms, vv; path="results/logo")
Job:
   spatial_setup  24953-point MultibodySetup
   time_solver    VelocityVerlet(n_steps=3000, safety_factor=0.7)
-  options        export_allowed=true, freq=10

To complete everything, the Job is submitted for simulation.

submit(job)
+ options export_allowed=true, freq=10

To complete everything, the Job is submitted for simulation.

submit(job)
diff --git a/dev/generated/tutorial_tension_dynfrac/index.html b/dev/generated/tutorial_tension_dynfrac/index.html index b7c7e9c4..d66aef7c 100644 --- a/dev/generated/tutorial_tension_dynfrac/index.html +++ b/dev/generated/tutorial_tension_dynfrac/index.html @@ -15,4 +15,4 @@ time_solver VelocityVerlet(n_steps=500, safety_factor=0.7) options export_allowed=true, freq=10

Submit the job to start simulations:

submit(job)
+ diff --git a/dev/generated/tutorial_tension_precrack/index.html b/dev/generated/tutorial_tension_precrack/index.html index d15c8902..65d2e701 100644 --- a/dev/generated/tutorial_tension_precrack/index.html +++ b/dev/generated/tutorial_tension_precrack/index.html @@ -15,4 +15,4 @@ time_solver VelocityVerlet(n_steps=2000, safety_factor=0.7) options export_allowed=true, freq=10

Finally the job is submitted to start simulations

submit(job)

Damage results:

+ diff --git a/dev/generated/tutorial_tension_static/index.html b/dev/generated/tutorial_tension_static/index.html index faf0567f..a831883f 100644 --- a/dev/generated/tutorial_tension_static/index.html +++ b/dev/generated/tutorial_tension_static/index.html @@ -16,4 +16,4 @@ time_solver DynamicRelaxation(n_steps=500, Δt=1.0, Λ=0.2) options export_allowed=true, freq=10
submit(job)
+ diff --git a/dev/generated/tutorial_wave_in_bar/index.html b/dev/generated/tutorial_wave_in_bar/index.html index 086200c0..bbc3613e 100644 --- a/dev/generated/tutorial_wave_in_bar/index.html +++ b/dev/generated/tutorial_wave_in_bar/index.html @@ -17,4 +17,4 @@ time_solver VelocityVerlet(n_steps=2000, safety_factor=0.7) options export_allowed=true, freq=10

The last step is submitting the job to start the simulation.

submit(job)
+ diff --git a/dev/howto_mpi/index.html b/dev/howto_mpi/index.html index 3071f14d..6457b445 100644 --- a/dev/howto_mpi/index.html +++ b/dev/howto_mpi/index.html @@ -1,2 +1,2 @@ -Simulations with MPI · Peridynamics.jl

Simulations with MPI

The package is designed so that the same core functions are used and only a small backend handles the differences between MPI or multithreading. This means, the development goal was:

Code that runs with multithreading should also work with MPI without changes!

However, currently not all features are supported with MPI. A table with an overview is shown below.

Currently supported features:

Job typeMPI
Job(::Body, ::VelocityVerlet)
Job(::Body, ::DynamicRelaxation)
Job(::MultibodySetup, ::VelocityVerlet)

Setting up simulations for MPI

If a script containing a simulation runs with multithreading and the features are supported with MPI, then this same script can be run with:

mpiexecjl -n <number of ranks> julia --project path/to/script.jl

Please refer to the MPI.jl documentation of mpiexecjl for installation and setup instructions.

Furthermore, there are helper functions that improve the setup of MPI simulations, such as enable_mpi_timers!, @mpiroot, @mpitime, or mpi_isroot.

+Simulations with MPI · Peridynamics.jl

Simulations with MPI

The package is designed so that the same core functions are used and only a small backend handles the differences between MPI or multithreading. This means, the development goal was:

Code that runs with multithreading should also work with MPI without changes!

However, currently not all features are supported with MPI. A table with an overview is shown below.

Currently supported features:

Job typeMPI
Job(::Body, ::VelocityVerlet)
Job(::Body, ::DynamicRelaxation)
Job(::MultibodySetup, ::VelocityVerlet)

Setting up simulations for MPI

If a script containing a simulation runs with multithreading and the features are supported with MPI, then this same script can be run with:

mpiexecjl -n <number of ranks> julia --project path/to/script.jl

Please refer to the MPI.jl documentation of mpiexecjl for installation and setup instructions.

Furthermore, there are helper functions that improve the setup of MPI simulations, such as enable_mpi_timers!, @mpiroot, @mpitime, or mpi_isroot.

diff --git a/dev/howto_visualization/index.html b/dev/howto_visualization/index.html index fdefc5ba..0be421bd 100644 --- a/dev/howto_visualization/index.html +++ b/dev/howto_visualization/index.html @@ -1,2 +1,2 @@ -Visualization with ParaView · Peridynamics.jl

Visualization with ParaView

The following section explains a few visualization basics with ParaView (ParaView 5.10.1 on macOS Monterey).

Basics

1. Load the results

Load the resulting .vtu files into ParaView with File $\rightarrow$ Open.

2. Select the time array

Select the time array and all the parameters you want to analyze and then Apply.

3. Representation and coloring

Change the representation to Points and then choose the coloring parameter.

4. Point styling

Activate the setting to render points as spheres and set an appropriate point size.

5. Legend styling

By default, the legend limits are set for the current range of the coloring parameter. In this example, for the initial time step all damage values are zero so strange legend limits appear.

6. Save animation

To generate a animation, use File $\rightarrow$ Save Animation... and follow the instructions.

Additional Learning Resources

ParaView has a great documentation and a lot of resources for learning. For example, see:

+Visualization with ParaView · Peridynamics.jl

Visualization with ParaView

The following section explains a few visualization basics with ParaView (ParaView 5.10.1 on macOS Monterey).

Basics

1. Load the results

Load the resulting .vtu files into ParaView with File $\rightarrow$ Open.

2. Select the time array

Select the time array and all the parameters you want to analyze and then Apply.

3. Representation and coloring

Change the representation to Points and then choose the coloring parameter.

4. Point styling

Activate the setting to render points as spheres and set an appropriate point size.

5. Legend styling

By default, the legend limits are set for the current range of the coloring parameter. In this example, for the initial time step all damage values are zero so strange legend limits appear.

6. Save animation

To generate a animation, use File $\rightarrow$ Save Animation... and follow the instructions.

Additional Learning Resources

ParaView has a great documentation and a lot of resources for learning. For example, see:

diff --git a/dev/index.html b/dev/index.html index 146cd1c1..53cedbf1 100644 --- a/dev/index.html +++ b/dev/index.html @@ -35,4 +35,4 @@
  • Kai Partmann (University of Siegen) ORCID logo
  • Manuel Dienst (University of Siegen) ORCID logo
  • Kerstin Weinberg (University of Siegen) ORCID logo
  • -

    Acknowledgements

    The authors gratefully acknowledge the support of the Deutsche Forschungsgemeinschaft (DFG) under the project WE2525-14/1.

    The support of Carsten Bauer and Xin Wu from PC2 with the design of the internal structure regarding parallel performance is gratefully acknowledged.

    The authors gratefully acknowledge the computing time provided to them on the high-performance computer Noctua 2 at the NHR Center PC2. These are funded by the Federal Ministry of Education and Research and the state governments participating on the basis of the resolutions of the GWK for the national highperformance computing at universities (www.nhr-verein.de/unsere-partner).

    +

    Acknowledgements

    The authors gratefully acknowledge the support of the Deutsche Forschungsgemeinschaft (DFG) under the project WE2525-14/1.

    The support of Carsten Bauer and Xin Wu from PC2 with the design of the internal structure regarding parallel performance is gratefully acknowledged.

    The authors gratefully acknowledge the computing time provided to them on the high-performance computer Noctua 2 at the NHR Center PC2. These are funded by the Federal Ministry of Education and Research and the state governments participating on the basis of the resolutions of the GWK for the national highperformance computing at universities (www.nhr-verein.de/unsere-partner).

    diff --git a/dev/objects.inv b/dev/objects.inv index 2a8973af..9b4a62a6 100644 Binary files a/dev/objects.inv and b/dev/objects.inv differ