Difference between revisions of "Setting Forces and Fluxes"

From OSUPDOCS
Jump to navigation Jump to search
 
(101 intermediate revisions by the same user not shown)
Line 1: Line 1:
These commands are used within [[Particle BC Shape Commands|shape commands]] for [[Particle-Based Boundary Conditions|particle-based boundary conditions]] to set [[#Load Conditions|loads]], [[#Traction Conditions|tractions]], [[#Heat Flux Conditions|heat fluxes]], and [[#Concentration Flux Conditions|concentration fluxes]] on particles
These commands are used within [[Particle-Based Boundary Conditions|particle-based boundary condition blocks]] to set [[#Load Conditions|loads]], [[#Traction Conditions|tractions]], [[#Heat Flux Conditions|heat fluxes]], and [[#Concentration Flux Conditions|concentration fluxes]] on particles. The damage and phase field options can set initial values on the particles.


== Load Conditions ==
== Load Conditions ==


The scripted <tt>Load</tt> command applies a force directly to each particle within the [[Particle BC Shape Commands|shape command]] that encloses it:
The scripted <tt>Load</tt> command applies a force directly to each particle within the [[Particle-Based Boundary Conditions|parents's block shape]]:
  Load (dir),(style),(value),<(time)>
  Load (dir),(style),(value),<(time)>
Line 18: Line 18:
<li><tt>(dir)</tt> is <tt>1</tt>, <tt>2</tt>, or <tt>3</tt> to specify the loading direction as in the <tt>x</tt>, <tt>y</tt>, or <tt>z</tt> direction (In scripted files, <tt>(dir)</tt> can be <tt>x</tt>, <tt>y</tt>, or <tt>z</tt> or can be <tt>R</tt> or <tt>Z</tt> if axisymmetric).
<li><tt>(dir)</tt> is <tt>1</tt>, <tt>2</tt>, or <tt>3</tt> to specify the loading direction as in the <tt>x</tt>, <tt>y</tt>, or <tt>z</tt> direction (In scripted files, <tt>(dir)</tt> can be <tt>x</tt>, <tt>y</tt>, or <tt>z</tt> or can be <tt>R</tt> or <tt>Z</tt> if axisymmetric).


<li><tt>(style)</tt> specifies the [[Boundary Condition Styles|style of the applied load]]. Each load depends on two parameters specified by arguments <tt>(value)</tt> and <tt>(time)</tt>. The <tt>(value)</tt> is required because there is no point in applying zero laod. If <tt>(time)</tt> is not supplied, it is set to zero. The standard units are N for <tt>(value)</tt> and ms for <tt>(time)</tt> (but the units may change depending on the [[Boundary Condition Styles|<tt>(style)</tt> setting]]). The final magnitude of the load depends on the [[#LoadType Options|<tt>LoadType</tt> setting]]. Note that when running [[#Axisymmetric Loads|axisymmetric calculations]], the load is interpreted as N per radian.
<li><tt>(style)</tt> specifies the [[Boundary Condition Styles|style of the applied load]].  
 
<li><tt>(value)</tt> and <tt>(time)</tt> -each load <tt>(style)</tt> depends on two parameters specified by <tt>(value)</tt> and <tt>(time)</tt>. The <tt>(value)</tt> is required because there is no point in applying zero load. If <tt>(time)</tt> is not supplied, it is set to zero. The standard units are N for <tt>(value)</tt> and [[ConsistentUnits Command#Legacy and Consistent Units|alt time units]] for <tt>(time)</tt> (but the units may change depending on the [[Boundary Condition Styles|<tt>(style)</tt> setting]]). The final magnitude of the load depends on the [[#LoadType Options|<tt>LoadType</tt> setting]]. Note that when running [[#Axisymmetric Loads|axisymmetric calculations]], the load is interpreted as N per radian.


<li><tt>(function)</tt> - if the <tt>(style)</tt> is <tt>function</tt> (or 6), this attribute in <tt>XML</tt> files specifies a [[User Defined Functions|user defined function]]. In scripted files, the [[User Defined Functions|user defined function]] should replace the <tt>(value)</tt> argument and must be entered as quoted text. The function should evaluate to the desired force in N.
<li><tt>(function)</tt> - if the <tt>(style)</tt> is <tt>function</tt> (or 6), this attribute in <tt>XML</tt> files specifies a [[User Defined Functions|user defined function]]. In scripted files, the [[User Defined Functions|user defined function]] should replace the <tt>(value)</tt> argument and must be entered as quoted text. The function should evaluate to the desired force in N.
Line 26: Line 28:
=== LoadType Options ===
=== LoadType Options ===


By default, the <tt>(value)</tt> argument or the result returned by a function gives the load on each particle with that boundary condition (with standard units of N). Alternatively, a load or function can evaluate to the total Newtons applied to all particles in the [[Particle BC Shape Commands|current shape]]. To chose to load style in scripted files, include the command:
By default, the <tt>(value)</tt> argument or the result returned by a function gives the load on each particle with that boundary condition (in [[ConsistentUnits Command#Legacy and Consistent Units|force units]]). Alternatively, a load or function can evaluate to the total Newtons applied to all particles in the [[Particle-Based Boundary Conditions|parents's block shape]]. To chose to load style in scripted files, include the command:


  LoadType (loadType)
  LoadType (loadType)


within the [[Particle BC Shape Commands|current shape]]. If <tt>(loadType)</tt> is "net", the boundary conditions specifies to the total load spread out over all particles in the [[Particle BC Shape Commands|current shape]]. Alternative, if <tt>(loadType)</tt> is "perParticle" (or omitted), the load for the boundary condition is applied to each particle. You can switch back and forth between net load and per-particle load in a single  [[Particle BC Shape Commands|shape]] by using mutliple <tt>LoadType</tt> commands. Each load boundary condition uses the loading option specified by the most recent <tt>LoadType</tt> command (or uses "perParticle" is no <tt>LoadType</tt> command was used).
within the [[Particle-Based Boundary Conditions|parents's block shape]]. If <tt>(loadType)</tt> is "net", the boundary conditions specifies to the total load spread out over all particles in the [[Particle-Based Boundary Conditions|parents's block shape]]. Alternative, if <tt>(loadType)</tt> is "perParticle" (or omitted), the load for the boundary condition is applied to each particle. You can switch back and forth between net load and per-particle load in a single  [[Particle-Based Boundary Conditions|parents's block shape]] by using mutliple <tt>LoadType</tt> commands. Each load boundary condition uses the loading option specified by the most recent <tt>LoadType</tt> command (or uses "perParticle" is no <tt>LoadType</tt> command was used).


In <tt>XML</tt> files, the loading option is set by using the following commands within the [[Particle BC Shape Commands|current shape]]:
In <tt>XML</tt> files, the loading option is set by using the following commands within the [[Particle-Based Boundary Conditions|parents's block shape]]:


  <net/>
  <net/>
Line 39: Line 41:
As expected, the "net" option is specified with a <tt><net/></tt> command and the "perParticle" option is specified with a <tt><perParticle/></tt> command. These commands can be intersperse to apply different loading options to various load boundary conditions.
As expected, the "net" option is specified with a <tt><net/></tt> command and the "perParticle" option is specified with a <tt><perParticle/></tt> command. These commands can be intersperse to apply different loading options to various load boundary conditions.


These loading-option commands only apply to particle load boundary conditions and have no effect on other [[#Traction Conditions|traction]], [[#Heat Flux Conditions|heat flux]], and [[#Concentration Flux Conditions|concentration flux]] conditions that happen to be within the same [[Particle BC Shape Commands|shape command]].
These loading-option commands only apply to particle load boundary conditions and have no effect on other [[#Traction Conditions|traction]], [[#Heat Flux Conditions|heat flux]], and [[#Concentration Flux Conditions|concentration flux]] conditions that happen to be within the same [[Particle-Based Boundary Conditions|parents's block shape]].


=== Axisymmetric Loads ===
=== Axisymmetric Loads ===
[[File:ASForceBCs.jpg|right]]


When applying forces to particles in [[Analysis Command|axisymmetric simulations]] the loads are interpreted as N per radian. As a consequence, if you intend to load a surface with particle's having different radial positions, the particle loads will have to depend on position to achieve a uniform stress. For this type of loading, it is usually easier (and better) to use [[#Traction Conditions|traction boundary conditions]] instead of load boundary conditions. If you need particle loads, here is a sample calculation. Imagine you are applying loads in the ''Z'' direction for a surface whose normal is in the ''Z'' direction and extends from ''r<sub>i</sub>'' to ''r<sub>o</sub>'' (see figure on the right). To get uniform stress, the particle force will have to be proportional to ''r<sub>p</sub>'' (radial position of the particle) or ''F<sub>p</sub> = k r<sub>p</sub>''. The goal is to find ''k'' to achieve a desired constant stress σ. The total vertical force on all particles (assuming [[MPM Methods and Simulation Timing#Input Commands|two particles per cell side]]) will be
When applying forces to particles in [[Analysis Command|axisymmetric simulations]] the loads are interpreted as N per radian. As a consequence, if you intend to load a surface with particle's having different radial positions, the particle loads will have to depend on position to achieve a uniform stress. For this type of loading, it is usually easier (and better) to use [[#Traction Conditions|traction boundary conditions]] instead of load boundary conditions. If you need particle loads, here is a sample calculation. Imagine you are applying loads in the ''Z'' direction for a surface whose normal is in the ''Z'' direction and extends from ''r<sub>i</sub>'' to ''r<sub>o</sub>'' (see figure on the right). To get uniform stress, the particle force will have to be proportional to ''r<sub>p</sub>'' (radial position of the particle) or ''F<sub>p</sub> = k r<sub>p</sub>''. The goal is to find ''k'' to achieve a desired constant stress σ. The total vertical force on all particles (assuming [[MPM Methods and Simulation Timing#Input Commands|two particles per cell side]]) will be
Line 56: Line 60:


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<math>F_p = {\sigma(r_o-r_i)x\over n_p}</math>
<math>F_p = {\sigma(r_o-r_i)x\over n_p} = {\sigma x \Delta r\over 2}</math>
 
where ''x'' is the radial position of the particle (you need to use ''x'' instead of ''R'' for <tt>function</tt>s in boundary condition commands). This result is simply the stress (σ) times the surface area per radian on top of a particle located at ''r<sub>p</sub>'' = ''x'' when Δ''r''/2 is the radial distance associated with that particle. For a different number of [[MPM Methods and Simulation Timing#Input Commands|particles per cell side]], change the "2" in the denominator to that number.


where ''x'' is the radial position of the particle when using a function in the boundary condition command. If the boundary condition is provided using [[#LoadType Options|"net" force instead of "per particle" force]], the required function for particle force should be:
If the boundary condition is provided using [[#LoadType Options|"net" force instead of "per particle" force]], the required function for particle force should be:


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<math>F_{net} = \sigma(r_o-r_i)x</math>
<math>F_{net} = n_pF_p = \sigma(r_o-r_i)x</math>
 
This result applies for any number of [[MPM Methods and Simulation Timing#Input Commands|particles per cell side]].


== Traction Conditions ==
== Traction Conditions ==


The scripted <tt>Traction</tt> command sets traction load on the edge of each particle within the [[Particle BC Shape Commands|shape command]] that encloses it:
The scripted <tt>Traction</tt> command sets traction load on the edge of each particle within the [[Particle-Based Boundary Conditions|parents's block shape]]:
  Traction (dir),(face),(style),(value),<(time)>
  Traction (dir),(face),(style),(value),<(time)>
Line 71: Line 79:
In <tt>XML</tt> files, the command is:
In <tt>XML</tt> files, the command is:


  <TractionBC dir='(dir)' face='(fact)' style='(style)' stress='(value)' time='(time)'
  <TractionBC dir='(dir)' face='(face)' style='(style)' stress='(value)' time='(time)'
                 function='(function)'/>
                 function='(function)'/>
Line 82: Line 90:
<li><tt>(face)</tt> defines which face of the original particle domain is loaded by the traction. In 2D, the faces are the edges numbered 1 through 4 in the counter-clockwise direction with the bottom edge (with normal (0,-1)) being number 1. In 3D, 1 to 4 are the same faces (''i.e.'', faces with normals (0,-1,0), (1,0,0), (0,1,0), and (-1,0,0) on the original particle domain, respectively), 5 is the bottom (with normal (0,0,-1)), and 6 is the top (with normal (0,0,1)).
<li><tt>(face)</tt> defines which face of the original particle domain is loaded by the traction. In 2D, the faces are the edges numbered 1 through 4 in the counter-clockwise direction with the bottom edge (with normal (0,-1)) being number 1. In 3D, 1 to 4 are the same faces (''i.e.'', faces with normals (0,-1,0), (1,0,0), (0,1,0), and (-1,0,0) on the original particle domain, respectively), 5 is the bottom (with normal (0,0,-1)), and 6 is the top (with normal (0,0,1)).


<li><tt>(style)</tt> specifies the [[Boundary Condition Styles|style of the applied traction]]. Each velocity depends on two parameters specified by arguments <tt>(value)</tt> and <tt>(time)</tt>. The <tt>(value)</tt> is required because there is no point in applying zero traction. If <tt>(time)</tt> is not supplied, it is set to zero. The standard units are MPa for <tt>(value)</tt> and ms for <tt>(time)</tt> (but the units may change depending on the [[Boundary Condition Styles|<tt>(style)</tt> setting]]).
<li><tt>(style)</tt> specifies the [[Boundary Condition Styles|style of the applied traction]].  


<li><tt>(function)</tt> - if the <tt>(style)</tt> is <tt>function</tt> (or 6), this attribute in <tt>XML</tt> files specifies a [[User Defined Functions|user defined function]]. In scripted files, the [[User Defined Functions|user defined function]] should replace the <tt>(value)</tt> argument and must be entered as quoted text. The function should evaluate to the desired traction in MPa.
<li><tt>(value)</tt> and <tt>(time)</tt> - each velocity depends on two parameters specified by arguments <tt>(value)</tt> and <tt>(time)</tt>. The <tt>(value)</tt> is required because there is no point in applying zero traction. If <tt>(time)</tt> is not supplied, it is set to zero. The standard units are [[ConsistentUnits Command#Legacy and Consistent Units|pressure units]] for <tt>(value)</tt> and [[ConsistentUnits Command#Legacy and Consistent Units|alt time units]] for <tt>(time)</tt> (but the units may change depending on the [[Boundary Condition Styles|<tt>(style)</tt> setting]]).
 
<li><tt>(function)</tt> - if the <tt>(style)</tt> is <tt>function</tt> (or 6), this attribute in <tt>XML</tt> files specifies a [[User Defined Functions|user defined function]]. In scripted files, the [[User Defined Functions|user defined function]] should replace the <tt>(value)</tt> argument and must be entered as quoted text. The function should evaluate to the desired traction in [[ConsistentUnits Command#Legacy and Consistent Units|pressure units]].


</ul>
</ul>


Note that valid calculation of grid forces resulting from specified traction during 2D simulations requires that you have correctly specified the [[MPM Grid Generation|grid thickness]] and that the grid thickness matches the particle thickness that is set in [[MPM Region and Hole Commands|<tt>Region</tt> commands]]. Furthermore, the use of traction boundary conditions is only allowed when using [[MPM Methods and Simulation Timing|uGIMP or lCPDI anlaysis methods]].
Note that valid calculation of grid forces resulting from specified traction during 2D simulations requires that you have correctly specified the [[MPM Grid Generation|grid thickness]] and that the grid thickness matches the particle thickness that is set in [[MPM Region and Hole Commands|<tt>Region</tt> commands]].
 
=== Exact Tractions ===
 
By using the command
 
ExactTractions <(option)>
 
in script files or adding the element
 
<ExactTractions/>
 
to the [[MPM Input Files#MPM Header|<tt><MPMHeader></tt> element]] in XML input files, traction loads will be found by exactly integrating shape functions over the deformed particle edge. In script files, set <tt>(option)</tt> to "yes" to use exact tractions or "no" to revert to standard traction methods. If <tt>(option)</tt> is omitted, it is treated as "yes".
 
In theory, this approach is more accurate, especially at large deformations. In practice, it is difficult to confirm an improvement. This option only works for [[MPM Methods and Simulation Timing|uGIMP and CPDI shape functions]] and 2D simulations. If used in other simulations, an error will be reported.


=== Difference Between Loads and Tractions ===
=== Difference Between Loads and Tractions ===
Line 94: Line 118:
A [[#Load Conditions|<tt>Load</tt> condition]] considers the load (in N) to be applied directly to the particle, which in MPM is not really applied to the surface of the body, even when the particle is on the edge. During the MPM algorithm, this load is extrapolated to all nodes around the paraticle resulting in some of a modeled loading being applied internal to the object. It is common, therefore, to see artifacts in particles near edges that are loaded directly by forces. The MPM results away from the particles, however, reflect the edge load better. This form of external loading appears to be common to all MPM codes.
A [[#Load Conditions|<tt>Load</tt> condition]] considers the load (in N) to be applied directly to the particle, which in MPM is not really applied to the surface of the body, even when the particle is on the edge. During the MPM algorithm, this load is extrapolated to all nodes around the paraticle resulting in some of a modeled loading being applied internal to the object. It is common, therefore, to see artifacts in particles near edges that are loaded directly by forces. The MPM results away from the particles, however, reflect the edge load better. This form of external loading appears to be common to all MPM codes.


In contrast, a [[#Traction Conditions|<tt>Traction</tt> condition]] applies the load (as a stress) on the actual surface by implementing a surface integral term that appears in MPM derivations. This integral involves integration of the traction times grid shape functions on the particle surface. This surface is found from the current particle deformation, which depending on the current [[MPM Methods and Simulation Timing|MPM method]] being used, is as follows:
In contrast, a [[#Traction Conditions|<tt>Traction</tt> condition]] applies the load (as a stress) on the actual surface by implementing a surface integral term that appears in MPM derivations. This integral involves integration of the traction times grid shape functions on the particle surface. This surface is found from the current particle deformation.
 
* <tt>Dirac</tt>: [[#Traction Conditions|<tt>Traction</tt> conditions]] are not allowed in this method; only [[#Load Conditions|<tt>Load</tt> conditions]] can be used
* <tt>uGIMP</tt>: Integrate on the surface determined from the initial particle shape but translated to the new particle position.
* <tt>lCPDI</tt> or <tt>qCPDI</tt>: Find parallelogram (2D) or parallelopiped (3D) for the deformed particle domain from the particle's deformation gradient and integrate the selected surface terms by expanding its integrand in linear shape functions (''i.e.'', very similar to CPDI methods for shape function integration).


[[#Traction Conditions|<tt>Traction</tt> conditions]] typically reduce artifacts that occur on particles loaded by [[#Load Conditions|<tt>Load</tt> conditions]]. Because this method applies forces closer to the actual edge, the potential for artifacts due to low-mass nodes is a concern. The code tries to screen out obvious problem nodes. If instability occurs, try [[#Load Conditions|<tt>Load</tt> conditions]] instead. [[#Traction Conditions|<tt>Traction</tt> conditions]] will correctly detect one nearby crack and apply force to the appropriate velocity field, but if a [[#Traction Conditions|<tt>Traction</tt> condition]] is interacting with more than one crack, the results will be unpredictable.
[[#Traction Conditions|<tt>Traction</tt> conditions]] typically reduce artifacts that occur on particles loaded by [[#Load Conditions|<tt>Load</tt> conditions]]. Because this method applies forces closer to the actual edge, the potential for artifacts due to low-mass nodes is a concern. The code tries to screen out obvious problem nodes. If instability occurs, try [[#Load Conditions|<tt>Load</tt> conditions]] instead. [[#Traction Conditions|<tt>Traction</tt> conditions]] will correctly detect one nearby crack and apply force to the appropriate velocity field, but if a [[#Traction Conditions|<tt>Traction</tt> condition]] is interacting with more than one crack, the results will be unpredictable.


Another difference is that a [[#Load Conditions|<tt>Load</tt> condition]]  applies a total force. In large deformation problems, the applied stress will change if the cross-sectional area changes. In contrast, a [[#Traction Conditions|<tt>Traction</tt> condition]] applies a stress to the deformed particle domain, which means its effect depends on [[MPM Methods and Simulation Timing|MPM method]] being used. When using [[MPM Methods and Simulation Timing|uGIMP]], the deformed particle domain is the same as the initial particle domain and therefore the applied stress will always be an engineering stress based on initial particle area (''i.e''., the stress will change if particle cross-sectional area changes). But, when using [[MPM Methods and Simulation Timing|lCPDI or qCPDI]], the stress will be a true stress that remains constant even if the particle cross sectional area changes.
Another difference is that a [[#Load Conditions|<tt>Load</tt> condition]]  applies a total force. In large deformation problems, the applied stress will change if the cross-sectional area changes. In contrast, a [[#Traction Conditions|<tt>Traction</tt> condition]] applies a stress to the deformed particle domain. In other words, the stress will be a true stress that remains constant even if the particle cross sectional area changes.


== Heat Flux Conditions ==
== Heat Flux Conditions ==


The scripted <tt>HeatFlux</tt> command applies heat fluxes to surfaces near particles within the [[Particle BC Shape Commands|shape command]] that encloses it (the particles are expected to be on the surface) :
The scripted <tt>HeatFlux</tt> command applies heat fluxes to surfaces near particles within the [[Particle-Based Boundary Conditions|parents's block shape]] (the particles are expected to be on the surface):
  HeatFlux (mode),(face),(style),(value),<(time)>
  HeatFlux (mode),(face),(style),(value),<(time)>
Line 121: Line 141:
<li><tt>(mode)</tt> determines the type of heat flux. The two options are:
<li><tt>(mode)</tt> determines the type of heat flux. The two options are:
<ol>
<ol>
<li><tt>external</tt> - this mode applies a surface flux in units of W/m^2 for transport rate of heat per unit area. A positive value is flux into the material while a negative value is flux out of the material.
<li><tt>external</tt> - this mode applies a surface flux in [[ConsistentUnits Command#Legacy and Consistent Units|heat flux units]] for transport rate of heat per unit area. A positive value is flux into the material while a negative value is flux out of the material.
<li><tt>coupled</tt> - this mode calculates the heat flux from a [[#Coupled Heat Flux|function of the particle temperature]].
<li><tt>coupled</tt> - this mode calculates the heat flux from a [[#Coupled Heat Flux|function of the particle temperature]].
</ol>
</ol>
Line 127: Line 147:
<li><tt>(face)</tt> - specifies the particle surface that is on the edge and will have the heat flux. In 2D, imagine a box around the initial particle. Surfaces 1 to 4 are the four edges of the box in the order bottom, right, top, and left (with normals (0,-1), (1,0), (0,1), and (-1,0)). In 3D, imagine a cube around the initial particle. Surfaces 1 to 4 are same as for 2D (now with normals (0,-1,0), (1,0,0), (0,1,0), and (-1,0,0)), 5 in the bottom z surface (normal = (0,0,-1)), and 6 is the top z surface (normal = (0,0,1)).
<li><tt>(face)</tt> - specifies the particle surface that is on the edge and will have the heat flux. In 2D, imagine a box around the initial particle. Surfaces 1 to 4 are the four edges of the box in the order bottom, right, top, and left (with normals (0,-1), (1,0), (0,1), and (-1,0)). In 3D, imagine a cube around the initial particle. Surfaces 1 to 4 are same as for 2D (now with normals (0,-1,0), (1,0,0), (0,1,0), and (-1,0,0)), 5 in the bottom z surface (normal = (0,0,-1)), and 6 is the top z surface (normal = (0,0,1)).


<li><tt>(style)</tt> specifies the [[Boundary Condition Styles|style of the applied heat flux]]. For <tt>external</tt> heat flux, the value depends on two parameters specified by arguments <tt>(value)</tt> and <tt>(time)</tt> (if omitted, their values are set to zero). The standard units are W/m^2 for <tt>(value)</tt> and ms for <tt>(time)</tt> (but the units may change depending on the [[Boundary Condition Styles|<tt>(style)</tt> setting]]). For [[#Coupled Heat Flux|<tt>coupled</tt> heat flux]], the <tt>(style)</tt> must be <tt>function</tt> (or 6).
<li><tt>(style)</tt> specifies the [[Boundary Condition Styles|style of the applied heat flux]]. For [[#Coupled Heat Flux|<tt>coupled</tt> heat flux]], the <tt>(style)</tt> must be <tt>function</tt> (or 6).
 
<li><tt>(value)</tt> and <tt>(time)</tt> - for <tt>external</tt> heat flux, the value depends on two parameters specified by arguments <tt>(value)</tt> and <tt>(time)</tt> (if omitted, their values are set to zero). The standard units are [[ConsistentUnits Command#Legacy and Consistent Units|heat flux units]] for <tt>(value)</tt> and [[ConsistentUnits Command#Legacy and Consistent Units|alt time units]] for <tt>(time)</tt> (but the units may change depending on the [[Boundary Condition Styles|<tt>(style)</tt> setting]]). For [[#Coupled Heat Flux|<tt>coupled</tt> heat flux]], the flux is applied only for time greater than <tt>(time)</tt> (in [[ConsistentUnits Command#Legacy and Consistent Units|alt time units]])


<li><tt>(function)</tt> - if the <tt>(style)</tt> is <tt>function</tt> (or 6), this attribute in <tt>XML</tt> files specifies a [[User Defined Functions|user defined function]]. In scripted files, the [[User Defined Functions|user defined function]] should replace the <tt>(value)</tt> argument and must be entered as quoted text. The function should evaluate to the desired heat flux in W/m^2.
<li><tt>(function)</tt> - if the <tt>(style)</tt> is <tt>function</tt> (or 6), this attribute in <tt>XML</tt> files specifies a [[User Defined Functions|user defined function]]. In scripted files, the [[User Defined Functions|user defined function]] should replace the <tt>(value)</tt> argument and must be entered as quoted text. The function should evaluate to the desired heat flux in [[ConsistentUnits Command#Legacy and Consistent Units|heat flux units]].


</ul>
</ul>


Note that valid calculation of total flux resulting from specified heat flux during 2D simulations requires that you have correctly specified the [[MPM Grid Generation|grid thickness]] and that the grid thickness matches the particle thickness that is set in [[MPM Region and Hole Commands|<tt>Region</tt> commands]]. Furthermore, the use of heat flux boundary conditions is only allowed when using [[MPM Methods and Simulation Timing|uGIMP or lCPDI anlaysis methods]].
Note that valid calculation of total flux resulting from specified heat flux during 2D simulations requires that you have correctly specified the [[MPM Grid Generation|grid thickness]] and that the grid thickness matches the particle thickness that is set in [[MPM Region and Hole Commands|<tt>Region</tt> commands]].


=== Coupled Heat Flux ===
=== Coupled Heat Flux ===


This heat flux calculates the heat flux from a [[User Defined Functions|user-defined function]]. At each time step, the variable t in the function (which usually means time) will be replaced by the particle temperature. The function should evaluate to the desired heat flux in W/m^2. The function can additionally depend on particle position (x, y, z, D, T, R, or Z in mm), and/or clockwise particle rotation (q in radians).
This heat flux calculates the heat flux from a [[User Defined Functions|user-defined function]]. At each time step, the variable t in the function (which usually means time) will be replaced by the particle temperature. The function should evaluate to the desired heat flux in W/m^2. The function can additionally depend on particle position (x, y, z, D, T, R, or Z in [[ConsistentUnits Command#Legacy and Consistent Units|length units]]), and/or clockwise particle rotation (q in radians). If the <tt>(time)</tt> parameter is used, the coupled heat flux is calculated only after that time.


Two uses of this flux condition are to implement convective and/or radiative boundary conditions. In convective cooling or heating, the function could be
Two uses of this flux condition are to implement convective and/or radiative boundary conditions. In convective cooling or heating, the function could be
Line 151: Line 173:
where &sigma; = 5.6704e-8 W/(m^2 K^4) is the Stefan-Boltzman constant and &epsilon; (<1) is the emissivity. In these functions, the physical terms should be replaced by their numerical values. If desired, however, they could also be functions themselves, such as to have h be a function of <tt>t</tt> or surface particle temperature. They cannot, however, depend on time, because <tt>t</tt> is used here for particle temperature instead of time.
where &sigma; = 5.6704e-8 W/(m^2 K^4) is the Stefan-Boltzman constant and &epsilon; (<1) is the emissivity. In these functions, the physical terms should be replaced by their numerical values. If desired, however, they could also be functions themselves, such as to have h be a function of <tt>t</tt> or surface particle temperature. They cannot, however, depend on time, because <tt>t</tt> is used here for particle temperature instead of time.


== Concentration Flux Conditions ==
== Concentration or Pore Pressure Flux Conditions ==
 
When doing [[Diffusion Calculations|diffusion calculations]], these conditions set concentration flux, but when doing [[Poroelasticity Calculations|poroelasticity calculations]], these same conditions set pore pressure flux (entered as pore volume fraction flux). Only one of these options can be active in a single simulation. These boundary conditions are ignored if neither [[Diffusion Calculations|diffusion calculations]] nor [[Poroelasticity Calculations|poroelasticity calculations]] are activated.


The scripted <tt>ConcentrationFlux</tt> command applies concentration fluxes to surfaces near particles within the [[Particle BC Shape Commands|shape command]] that encloses it (the particles are expected to be on the surface) :
When doing [[Diffusion Calculations|diffusion calculations]], the scripted <tt>ConcentrationFlux</tt> command applies concentration fluxes to surfaces of particles within the [[Particle-Based Boundary Conditions|parents's block shape]] (the particles are expected to be on the surface):
  ConcentrationFlux (mode),(face),(style),<(value)>,<(timeOrRes)>
  ConcentrationFlux (mode),(face),(style),<(value)>,<(timeOrRes)>


In <tt>XML</tt> files, the command is:
When doing [[Poroelasticity Calculations|poroelasticity calculations]], the scripted <tt>PorePressureFLus</tt> command applies concentration fluxes to surfaces near particles within the [[Particle-Based Boundary Conditions|parents's block shape]] (the particles are expected to be on the surface):
PorePressureFlux (mode),(face),(style),<(value)>,<(timeOrRes)>
 
In <tt>XML</tt> files, the concentration flux and pore pressure flux commands are the same (the simulation type determines which conditions are set):


  <ConcFluxBC dir='(dir)' face='(face)' style='(style)' value='(value)'
  <ConcFluxBC dir='(mode)' face='(face)' style='(style)' value='(value)'
                         time='(timeOrRes)' function='(function)'/>
                         time='(timeOrRes)' function='(function)'/>
where
In the above commands:


<ul>
<ul>
Line 168: Line 196:
<li><tt>(mode)</tt> determines the type of concentration flux. The two options are:
<li><tt>(mode)</tt> determines the type of concentration flux. The two options are:
<ol>
<ol>
<li><tt>external</tt> - This condition applies a surface flux in units of kg/(m^2-sec) for transport rate of substance per unit area. A positive value is flux into the material while a negative value is flux out of the material
<li><tt>external</tt> - This condition applies a surface flux. For diffusion enter flux in [[ConsistentUnits Command#Legacy and Consistent Units|solvent flux units]] for transport rate of substance per unit area. For poroelasticity, enter flux in pore volume fraction/([[ConsistentUnits Command#Legacy and Consistent Units|(length units)<sup>2</sup>-time units]]). A positive value is flux into the material while a negative value is flux out of the material
<li><tt>coupled</tt> - this mode calculates the concentration flux from a [[#Coupled Concentration Flux|function of the particle concentration potential]].
<li><tt>coupled</tt> - this mode calculates the concentration flux from a [[#Coupled Concentration Flux|function of the particle concentration potential]] for diffusion or from a [[#Coupled Pore Pressure Flux|function of the particle pore pressure]] for poroelasticity.
</ol>
</ol>


<li><tt>(face)</tt> - specifies the particle surface that is on the edge and will have the concentration flux. In 2D, imagine a box around the initial particle. Surfaces 1 to 4 are the four edges of the box in the order bottom, right, top, and left (with normals (0,-1), (1,0), (0,1), and (-1,0)). In 3D, imagine a cube around the initial particle. Surfaces 1 to 4 are same as for 2D (now with normals (0,-1,0), (1,0,0), (0,1,0), and (-1,0,0)), 5 in the bottom z surface (normal = (0,0,-1)), and 6 is the top z surface (normal = (0,0,1)).
<li><tt>(face)</tt> - specifies the particle surface that is on the edge and will have the concentration or pore pressure flux. In 2D, imagine a box around the initial particle. Surfaces 1 to 4 are the four edges of the box in the order bottom, right, top, and left (with normals (0,-1), (1,0), (0,1), and (-1,0)). In 3D, imagine a cube around the initial particle. Surfaces 1 to 4 are same as for 2D (now with normals (0,-1,0), (1,0,0), (0,1,0), and (-1,0,0)), 5 in the bottom z surface (normal = (0,0,-1)), and 6 is the top z surface (normal = (0,0,1)).


<li><tt>(style)</tt> specifies the [[Boundary Condition Styles|style of the applied concentration flux]]. For <tt>external</tt> heat flux, the value depends on two parameters specified by arguments <tt>(value)</tt> and <tt>(timeOrRes)</tt> (if omitted, their values are set to zero). The standard units are kg/(m^2-sec) for <tt>(value)</tt> and ms for <tt>(timeOrRes)</tt> (but the units may change depending on the [[Boundary Condition Styles|<tt>(style)</tt> setting]]). For [[#Coupled Concentration Flux|<tt>coupled</tt> concentration flux]], the <tt>(style)</tt> must be <tt>function</tt> (or 6) and the variable <tt>(timeOrRes)</tt> should specify the solvent resevour potential (0 to 1).
<li><tt>(style)</tt> specifies the [[Boundary Condition Styles|style]] of the applied concentration or pore pressure flux. For [[#Coupled Concentration Flux|<tt>coupled</tt> concentration flux]] or [[#Coupled Pore Pressure Flux|<tt>coupled</tt> pore pressure flux]], the <tt>(style)</tt> must be <tt>function</tt> (or 6). For diffusion, the variable <tt>(timeOrRes)</tt> should specify the solvent reservoir potential (0 to 1). For poroelasticity, the variable <tt>(timeOrRes)</tt> should specify the reservoir pressure (in [[ConsistentUnits Command#Legacy and Consistent Units|pressure units]]).


<li><tt>(function)</tt> - if the <tt>(style)</tt> is <tt>function</tt> (or 6), this attribute in <tt>XML</tt> files specifies a [[User Defined Functions|user defined function]]. In scripted files, the [[User Defined Functions|user defined function]] should replace the <tt>(value)</tt> argument and must be entered as quoted text. The function should evaluate to the desired concentration flux inkg/(m^2-sec).
<li><tt>(value)</tt> and <tt>(timeOrRes)</tt> - for <tt>external</tt> fluxes, the value depends on two parameters specified by arguments <tt>(value)</tt> and <tt>(timeOrRes)</tt> (if omitted, their values are set to zero). For diffusion, the standard units are [[ConsistentUnits Command#Legacy and Consistent Units|solvent flux units]] for <tt>(value)</tt> and [[ConsistentUnits Command#Legacy and Consistent Units|alt time units]] for <tt>(timeOrRes)</tt>. For poroelasticity, the standard units are pore volume fraction/([[ConsistentUnits Command#Legacy and Consistent Units|(length units)<sup>2</sup>-time units]]) for <tt>(value)</tt> and [[ConsistentUnits Command#Legacy and Consistent Units|alt time units]] for <tt>(timeOrRes)</tt>. (Note: these units may change depending on the [[Boundary Condition Styles|<tt>(style)</tt> setting]]).
 
<li><tt>(function)</tt> - if the <tt>(style)</tt> is <tt>function</tt> (or 6), this attribute in <tt>XML</tt> files specifies a [[User Defined Functions|user defined function]]. In scripted files, the [[User Defined Functions|user defined function]] should replace the <tt>(value)</tt> argument and must be entered as quoted text. For diffusion, the function should evaluate to the desired concentration flux in [[ConsistentUnits Command#Legacy and Consistent Units|solvent flux units]]. For poroelasticity, the function should evaluate to the desired flux in pore volume fraction/([[ConsistentUnits Command#Legacy and Consistent Units|(length units)<sup>2</sup>-time units]]).


</ul>
</ul>


Note that valid calculation of total flux resulting from specified concentration flux during 2D simulations requires that you have correctly specified the [[MPM Grid Generation|grid thickness]] and that the grid thickness matches the particle thickness that is set in [[MPM Region and Hole Commands|<tt>Region</tt> commands]]. Furthermore, the use of heat flux boundary conditions is only allowed when using [[MPM Methods and Simulation Timing|uGIMP or lCPDI anlaysis methods]].
Note that valid calculation of total flux resulting from specified flux during 2D simulations requires that you have correctly specified the [[MPM Grid Generation|grid thickness]] and that the grid thickness matches the particle thickness that is set in [[MPM Region and Hole Commands|<tt>Region</tt> commands]]. The way that pore volume fraction flux translates to pore pressure increase depends on the poroelasticity properties of materials and is desribed [[Poroelasticity Calculations#Poroelasticity Boundary Conditions|here]].


=== Coupled Concentration Flux ===
=== Coupled Concentration Flux ===


This concentration flux mode calculates the concentration flux from a [[User Defined Functions|user-defined function]]. At each time step, the variable <tt>t</tt> will be replaced by the difference between the particle concentration potential (0 to 1) and the entered reservoir concentration potential (0 to 1) in parameter <tt>(timeOrRes)</tt>. The function should evaluate to the desired flux in kg/(m^2-sec). The function can additionally depend on particle position (x, y, z, D, T, R, or Z in mm), and/or clockwise particle rotation (q in radians). Note that because <tt>t </tt>is used for particle concentration, a coupled surface flux function cannot depend on time.
This concentration flux mode calculates the concentration flux from a [[User Defined Functions|user-defined function]]. At each time step, the variable <tt>t</tt> will be replaced by the difference between the particle concentration potential (0 to 1) and the entered reservoir concentration potential (0 to 1) in parameter <tt>(timeOrRes)</tt>. The function should evaluate to the desired flux in [[ConsistentUnits Command#Legacy and Consistent Units|solvent flux units]]. The function can additionally depend on particle position (x, y, z, D, T, R, or Z in [[ConsistentUnits Command#Legacy and Consistent Units|length units]]), and/or clockwise particle rotation (q in radians). Note that because <tt>t </tt>is used for particle concentration, a coupled surface flux function cannot depend on time.
 
=== Coupled Pore Pressure Flux ===
 
This pore pressure flux mode calculates the pore pressure flux from a [[User Defined Functions|user-defined function]]. At each time step, the variable <tt>t</tt> will be replaced by the difference between the particle pore pressure and the entered reservoir pore pressure in parameter <tt>(timeOrRes)</tt>. The function should evaluate to the desired flux in pore volume fraction/([[ConsistentUnits Command#Legacy and Consistent Units|(length units)<sup>2</sup>-time units]]). The function can additionally depend on particle position (x, y, z, D, T, R, or Z in [[ConsistentUnits Command#Legacy and Consistent Units|length units]]), and/or clockwise particle rotation (q in radians). Note that because <tt>t</tt> is used for particle pore pressure, a coupled surface flux function cannot depend on time.
 
== Transport Flux Conditions ==
 
When doing [[Additional Transport Calculations|other transport calculations]], you can set transport fluxes to surfaces of particles within the [[Particle-Based Boundary Conditions|parents's block shape]]. The scripted <tt>ConcentrationFlux</tt> command selects transport fluxes by adding a <tt>(phaseStyle)</tt> command:
ConcentrationFlux (mode),(face),(style),(value),(timeOrRes),(phaseStyle)
 
In <tt>XML</tt> files, the <tt><ConcFluxBC></tt> command adds a <tt>phase</tt> attribute (which must be numeric):
 
<ConcFluxBC dir='(mode)' face='(face)' style='(style)' value='(value)'
                        time='(timeOrRes)' function='(function)' phase='(phaseStyle)'/>
where <tt>(phaseStyle)</tt> can be the following options:
 
* <tt>fracture</tt> (or phaseStyle=3): generally not used; would be flux in [[ConsistentUnits Command#Legacy and Consistent Units|(energy units)/(length units)<sup>2</sup>]].
* <tt>battery</tt> (or phaseStyle=4): generally not used
* <tt>conduction</tt> (or phaseStyle=5): Set flux in units Coulombs/([[ConsistentUnits Command#Legacy and Consistent Units|(time units)-(length units)<sup>2</sup>]]). For Legacy units (which are mm-g-sec), the flux is in A/mm<sup>2</sup>.
* <tt>solvent</tt> or <tt>moisture</tt> (or phaseStyle=1): reverts to setting [[#Concentration or Pore Pressure Flux Conditions|concentration flux]] without this parameter.
 
All other parameters are defined [[#Concentration or Pore Pressure Flux Conditions|above]] except that <tt>style</tt> of "silent" is not allowed. To specify <tt>(phaseStyle)</tt> in scripted files, the <tt>(value)</tt> and <tt>(timeOrRes)</tt> parameters are required. They can be set to default zero if not needed.
 
These options only useful when using materials that support them. Some of these materials are available only in [[OSParticulas]].
 
== Initial Particle Damage ==
 
The scripted <tt>Damage</tt> command adds initial damage state to particles within the [[Particle-Based Boundary Conditions|parents's block shape]]. This option only applies if those particles are for a [[Material Models#Softening Materials|softening material]]. The format is:
Damage (nx),(ny),<(nz)>,<(dn)>,<(dxy)>,<(dxz)>,<(mode)>
 
In <tt>XML</tt> files, the command is:
 
<Damage nx='0' ny='2' dn='1' dxy='1'/>
where
 
<ul>
<li><tt>(nx, ny, nz)</tt> is normal vector for the damage plane. It need not be normalized, but should not be a zero vector (<tt>nz</tt> only used for 3D).</li>
<li><tt>(dn, dxy, dxz)</tt> defines the three damage parameters (<tt>dxz</tt> only used for 3D). These should all be from 0 to 1 where 0 is undamaged and 1 is fully damaged. If not specified, the default values are 1 (or fully damaged)</li>
<li><tt>(mode)</tt> damage mode or value for material type in the first damage history variable. This value is only used if all <tt>d</tt>'s are less than 1. The default is 1.</li>
</ul>
 
For 2D problems, the <tt>Damage</tt> command must still use up to 7 parameters (for alignment). The two properties entered for 3D problems will be ignoed. In <tt>XML</tt> files, specify all the parameters that are needed.
 
=== Comments on Initial Damage ===
 
As a general rule, an thickness of the initial damage zone should span at least one full cell. A single line of particles when using cells with two particles in each direction, will not create the expected damage plane. Instead, the plane will be constrained by other material points connected as a continuum. That line will cause other particles in the same cell to get over stressed and they will eventually become damaged as well.
 
If damage parameters are equal to 1 (which is most common), the particles are fully damaged and first softening history variable is set to 3 (so visualization can distinguish new damage from predamage). When all damage variables are less than one, the code will need to find maximum strain corresponding to that damage state and first softening history variable is set to provided <tt>(mode)</tt>. See each material type for failure mode settings.
 
This setting works for [[Isotropic Damage Mechanics|IsoDamageMechanics]]. The normals are used to improve scaling of toughness and only <tt>(dn)</tt> is used. If <tt>(mode)</tt> is set, the command must provided <tt>(dxy)</tt> and <tt>(dxz)</tt> for alignment.
 
The setting of initial particle damage is not yet implemented for [[Transversely Isotropic Softening Material|TransIsoSoftening]], [[Orthotropic Softening Material|OrthoSoftening]], or [[Orthotropic Plastic Softening Material|OrthoPlasticSoftening]].
 
== Initial Particle Phase Field ==
 
The scripted <tt>PhaseField</tt> command adds initial phase field value to particles within the [[Particle-Based Boundary Conditions|parents's block shape]]. This option only applies if those particles for a material that uses a phase field (current only for [[Isotropic Phase Field Softening Material]]). The format is:
PhaseField (phi)
 
In <tt>XML</tt> files, the command is:
 
<Damage phi='(phi)'/>
where <tt>(phi)</tt> is a [[User Defined Functions|user defined function]] for the phase field value to set on the particle. The function should evaluate to between 0 and 1 (and values outside that range are truncated to be between 0 and 1).

Latest revision as of 16:48, 17 November 2023

These commands are used within particle-based boundary condition blocks to set loads, tractions, heat fluxes, and concentration fluxes on particles. The damage and phase field options can set initial values on the particles.

Load Conditions

The scripted Load command applies a force directly to each particle within the parents's block shape:

Load (dir),(style),(value),<(time)>

In XML files, the command is:

<LoadBC dir='(dir)' style='(style)' load='(value)' time='(time)'
                function='(function)'/>

where

  • (dir) is 1, 2, or 3 to specify the loading direction as in the x, y, or z direction (In scripted files, (dir) can be x, y, or z or can be R or Z if axisymmetric).
  • (style) specifies the style of the applied load.
  • (value) and (time) -each load (style) depends on two parameters specified by (value) and (time). The (value) is required because there is no point in applying zero load. If (time) is not supplied, it is set to zero. The standard units are N for (value) and alt time units for (time) (but the units may change depending on the (style) setting). The final magnitude of the load depends on the LoadType setting. Note that when running axisymmetric calculations, the load is interpreted as N per radian.
  • (function) - if the (style) is function (or 6), this attribute in XML files specifies a user defined function. In scripted files, the user defined function should replace the (value) argument and must be entered as quoted text. The function should evaluate to the desired force in N.

LoadType Options

By default, the (value) argument or the result returned by a function gives the load on each particle with that boundary condition (in force units). Alternatively, a load or function can evaluate to the total Newtons applied to all particles in the parents's block shape. To chose to load style in scripted files, include the command:

LoadType (loadType)

within the parents's block shape. If (loadType) is "net", the boundary conditions specifies to the total load spread out over all particles in the parents's block shape. Alternative, if (loadType) is "perParticle" (or omitted), the load for the boundary condition is applied to each particle. You can switch back and forth between net load and per-particle load in a single parents's block shape by using mutliple LoadType commands. Each load boundary condition uses the loading option specified by the most recent LoadType command (or uses "perParticle" is no LoadType command was used).

In XML files, the loading option is set by using the following commands within the parents's block shape:

<net/>
<perParticle/>

As expected, the "net" option is specified with a <net/> command and the "perParticle" option is specified with a <perParticle/> command. These commands can be intersperse to apply different loading options to various load boundary conditions.

These loading-option commands only apply to particle load boundary conditions and have no effect on other traction, heat flux, and concentration flux conditions that happen to be within the same parents's block shape.

Axisymmetric Loads

ASForceBCs.jpg

When applying forces to particles in axisymmetric simulations the loads are interpreted as N per radian. As a consequence, if you intend to load a surface with particle's having different radial positions, the particle loads will have to depend on position to achieve a uniform stress. For this type of loading, it is usually easier (and better) to use traction boundary conditions instead of load boundary conditions. If you need particle loads, here is a sample calculation. Imagine you are applying loads in the Z direction for a surface whose normal is in the Z direction and extends from ri to ro (see figure on the right). To get uniform stress, the particle force will have to be proportional to rp (radial position of the particle) or Fp = k rp. The goal is to find k to achieve a desired constant stress σ. The total vertical force on all particles (assuming two particles per cell side) will be

      [math]\displaystyle{ F_{tot} = \sum_p 2\pi k r_p = 2\pi k \sum_{i=1}^{n_p} \left( r_i + {2i-1\over 4} \Delta r\right) \approx \pi k n_p(r_o+r_i) }[/math]

where np is the total number of particles on the surface and Δr is the cell size in the r direction. The resulting uniform stress is

      [math]\displaystyle{ \sigma = {F_{tot}\over \pi(r_o^2-r_i^2)} = { k n_p \over r_o-r_i} }[/math]

Thus the required function (and the "function" style is needed) for particle force per radian to achieve uniform stress of σ is

      [math]\displaystyle{ F_p = {\sigma(r_o-r_i)x\over n_p} = {\sigma x \Delta r\over 2} }[/math]

where x is the radial position of the particle (you need to use x instead of R for functions in boundary condition commands). This result is simply the stress (σ) times the surface area per radian on top of a particle located at rp = x when Δr/2 is the radial distance associated with that particle. For a different number of particles per cell side, change the "2" in the denominator to that number.

If the boundary condition is provided using "net" force instead of "per particle" force, the required function for particle force should be:

      [math]\displaystyle{ F_{net} = n_pF_p = \sigma(r_o-r_i)x }[/math]

This result applies for any number of particles per cell side.

Traction Conditions

The scripted Traction command sets traction load on the edge of each particle within the parents's block shape:

Traction (dir),(face),(style),(value),<(time)>

In XML files, the command is:

<TractionBC dir='(dir)' face='(face)' style='(style)' stress='(value)' time='(time)'
                function='(function)'/>

where

  • (dir) is 1, 2, or 3 to specify the loading direction as in the x, y, or z direction (In scripted files, (dir) can be x, y, or z or can be R or Z if axisymmetric). For TractionBC, dir can be 11 or 12 to mean normal or shear traction relative to the selected face, respectively. A normal traction is positive if pointing out of the particle domain and a shear traction is positive when oriented in the counter-clockwise direction. Shear tractions (option 12) are not yet allowed in 3D calculations.
  • (face) defines which face of the original particle domain is loaded by the traction. In 2D, the faces are the edges numbered 1 through 4 in the counter-clockwise direction with the bottom edge (with normal (0,-1)) being number 1. In 3D, 1 to 4 are the same faces (i.e., faces with normals (0,-1,0), (1,0,0), (0,1,0), and (-1,0,0) on the original particle domain, respectively), 5 is the bottom (with normal (0,0,-1)), and 6 is the top (with normal (0,0,1)).
  • (style) specifies the style of the applied traction.
  • (value) and (time) - each velocity depends on two parameters specified by arguments (value) and (time). The (value) is required because there is no point in applying zero traction. If (time) is not supplied, it is set to zero. The standard units are pressure units for (value) and alt time units for (time) (but the units may change depending on the (style) setting).
  • (function) - if the (style) is function (or 6), this attribute in XML files specifies a user defined function. In scripted files, the user defined function should replace the (value) argument and must be entered as quoted text. The function should evaluate to the desired traction in pressure units.

Note that valid calculation of grid forces resulting from specified traction during 2D simulations requires that you have correctly specified the grid thickness and that the grid thickness matches the particle thickness that is set in Region commands.

Exact Tractions

By using the command

ExactTractions <(option)>

in script files or adding the element

<ExactTractions/>

to the <MPMHeader> element in XML input files, traction loads will be found by exactly integrating shape functions over the deformed particle edge. In script files, set (option) to "yes" to use exact tractions or "no" to revert to standard traction methods. If (option) is omitted, it is treated as "yes".

In theory, this approach is more accurate, especially at large deformations. In practice, it is difficult to confirm an improvement. This option only works for uGIMP and CPDI shape functions and 2D simulations. If used in other simulations, an error will be reported.

Difference Between Loads and Tractions

A Load condition considers the load (in N) to be applied directly to the particle, which in MPM is not really applied to the surface of the body, even when the particle is on the edge. During the MPM algorithm, this load is extrapolated to all nodes around the paraticle resulting in some of a modeled loading being applied internal to the object. It is common, therefore, to see artifacts in particles near edges that are loaded directly by forces. The MPM results away from the particles, however, reflect the edge load better. This form of external loading appears to be common to all MPM codes.

In contrast, a Traction condition applies the load (as a stress) on the actual surface by implementing a surface integral term that appears in MPM derivations. This integral involves integration of the traction times grid shape functions on the particle surface. This surface is found from the current particle deformation.

Traction conditions typically reduce artifacts that occur on particles loaded by Load conditions. Because this method applies forces closer to the actual edge, the potential for artifacts due to low-mass nodes is a concern. The code tries to screen out obvious problem nodes. If instability occurs, try Load conditions instead. Traction conditions will correctly detect one nearby crack and apply force to the appropriate velocity field, but if a Traction condition is interacting with more than one crack, the results will be unpredictable.

Another difference is that a Load condition applies a total force. In large deformation problems, the applied stress will change if the cross-sectional area changes. In contrast, a Traction condition applies a stress to the deformed particle domain. In other words, the stress will be a true stress that remains constant even if the particle cross sectional area changes.

Heat Flux Conditions

The scripted HeatFlux command applies heat fluxes to surfaces near particles within the parents's block shape (the particles are expected to be on the surface):

HeatFlux (mode),(face),(style),(value),<(time)>

In XML files, the command is:

<HeatFluxBC dir='(dir)' face='(face)' style='(style)' value='(value)'
                        time='(time)' function='(function)'/>

where

  • (mode) determines the type of heat flux. The two options are:
    1. external - this mode applies a surface flux in heat flux units for transport rate of heat per unit area. A positive value is flux into the material while a negative value is flux out of the material.
    2. coupled - this mode calculates the heat flux from a function of the particle temperature.
  • (face) - specifies the particle surface that is on the edge and will have the heat flux. In 2D, imagine a box around the initial particle. Surfaces 1 to 4 are the four edges of the box in the order bottom, right, top, and left (with normals (0,-1), (1,0), (0,1), and (-1,0)). In 3D, imagine a cube around the initial particle. Surfaces 1 to 4 are same as for 2D (now with normals (0,-1,0), (1,0,0), (0,1,0), and (-1,0,0)), 5 in the bottom z surface (normal = (0,0,-1)), and 6 is the top z surface (normal = (0,0,1)).
  • (style) specifies the style of the applied heat flux. For coupled heat flux, the (style) must be function (or 6).
  • (value) and (time) - for external heat flux, the value depends on two parameters specified by arguments (value) and (time) (if omitted, their values are set to zero). The standard units are heat flux units for (value) and alt time units for (time) (but the units may change depending on the (style) setting). For coupled heat flux, the flux is applied only for time greater than (time) (in alt time units)
  • (function) - if the (style) is function (or 6), this attribute in XML files specifies a user defined function. In scripted files, the user defined function should replace the (value) argument and must be entered as quoted text. The function should evaluate to the desired heat flux in heat flux units.

Note that valid calculation of total flux resulting from specified heat flux during 2D simulations requires that you have correctly specified the grid thickness and that the grid thickness matches the particle thickness that is set in Region commands.

Coupled Heat Flux

This heat flux calculates the heat flux from a user-defined function. At each time step, the variable t in the function (which usually means time) will be replaced by the particle temperature. The function should evaluate to the desired heat flux in W/m^2. The function can additionally depend on particle position (x, y, z, D, T, R, or Z in length units), and/or clockwise particle rotation (q in radians). If the (time) parameter is used, the coupled heat flux is calculated only after that time.

Two uses of this flux condition are to implement convective and/or radiative boundary conditions. In convective cooling or heating, the function could be

      [math]\displaystyle{ {\rm function} = h(T_0-t) }[/math]

where h is heat transfer coefficient (in W/(m^2 K)), T0 is a reservoir temperature, and t is used for surface particle temperature. In radiative cooling or heating, the flux function could be the Stefan-Boltzman law:

      [math]\displaystyle{ {\rm function} = \sigma\varepsilon(T_0^4 - t^4) }[/math]

where σ = 5.6704e-8 W/(m^2 K^4) is the Stefan-Boltzman constant and ε (<1) is the emissivity. In these functions, the physical terms should be replaced by their numerical values. If desired, however, they could also be functions themselves, such as to have h be a function of t or surface particle temperature. They cannot, however, depend on time, because t is used here for particle temperature instead of time.

Concentration or Pore Pressure Flux Conditions

When doing diffusion calculations, these conditions set concentration flux, but when doing poroelasticity calculations, these same conditions set pore pressure flux (entered as pore volume fraction flux). Only one of these options can be active in a single simulation. These boundary conditions are ignored if neither diffusion calculations nor poroelasticity calculations are activated.

When doing diffusion calculations, the scripted ConcentrationFlux command applies concentration fluxes to surfaces of particles within the parents's block shape (the particles are expected to be on the surface):

ConcentrationFlux (mode),(face),(style),<(value)>,<(timeOrRes)>

When doing poroelasticity calculations, the scripted PorePressureFLus command applies concentration fluxes to surfaces near particles within the parents's block shape (the particles are expected to be on the surface):

PorePressureFlux (mode),(face),(style),<(value)>,<(timeOrRes)>

In XML files, the concentration flux and pore pressure flux commands are the same (the simulation type determines which conditions are set):

<ConcFluxBC dir='(mode)' face='(face)' style='(style)' value='(value)'
                        time='(timeOrRes)' function='(function)'/>

In the above commands:

  • (mode) determines the type of concentration flux. The two options are:
    1. external - This condition applies a surface flux. For diffusion enter flux in solvent flux units for transport rate of substance per unit area. For poroelasticity, enter flux in pore volume fraction/((length units)2-time units). A positive value is flux into the material while a negative value is flux out of the material
    2. coupled - this mode calculates the concentration flux from a function of the particle concentration potential for diffusion or from a function of the particle pore pressure for poroelasticity.
  • (face) - specifies the particle surface that is on the edge and will have the concentration or pore pressure flux. In 2D, imagine a box around the initial particle. Surfaces 1 to 4 are the four edges of the box in the order bottom, right, top, and left (with normals (0,-1), (1,0), (0,1), and (-1,0)). In 3D, imagine a cube around the initial particle. Surfaces 1 to 4 are same as for 2D (now with normals (0,-1,0), (1,0,0), (0,1,0), and (-1,0,0)), 5 in the bottom z surface (normal = (0,0,-1)), and 6 is the top z surface (normal = (0,0,1)).
  • (style) specifies the style of the applied concentration or pore pressure flux. For coupled concentration flux or coupled pore pressure flux, the (style) must be function (or 6). For diffusion, the variable (timeOrRes) should specify the solvent reservoir potential (0 to 1). For poroelasticity, the variable (timeOrRes) should specify the reservoir pressure (in pressure units).
  • (value) and (timeOrRes) - for external fluxes, the value depends on two parameters specified by arguments (value) and (timeOrRes) (if omitted, their values are set to zero). For diffusion, the standard units are solvent flux units for (value) and alt time units for (timeOrRes). For poroelasticity, the standard units are pore volume fraction/((length units)2-time units) for (value) and alt time units for (timeOrRes). (Note: these units may change depending on the (style) setting).
  • (function) - if the (style) is function (or 6), this attribute in XML files specifies a user defined function. In scripted files, the user defined function should replace the (value) argument and must be entered as quoted text. For diffusion, the function should evaluate to the desired concentration flux in solvent flux units. For poroelasticity, the function should evaluate to the desired flux in pore volume fraction/((length units)2-time units).

Note that valid calculation of total flux resulting from specified flux during 2D simulations requires that you have correctly specified the grid thickness and that the grid thickness matches the particle thickness that is set in Region commands. The way that pore volume fraction flux translates to pore pressure increase depends on the poroelasticity properties of materials and is desribed here.

Coupled Concentration Flux

This concentration flux mode calculates the concentration flux from a user-defined function. At each time step, the variable t will be replaced by the difference between the particle concentration potential (0 to 1) and the entered reservoir concentration potential (0 to 1) in parameter (timeOrRes). The function should evaluate to the desired flux in solvent flux units. The function can additionally depend on particle position (x, y, z, D, T, R, or Z in length units), and/or clockwise particle rotation (q in radians). Note that because t is used for particle concentration, a coupled surface flux function cannot depend on time.

Coupled Pore Pressure Flux

This pore pressure flux mode calculates the pore pressure flux from a user-defined function. At each time step, the variable t will be replaced by the difference between the particle pore pressure and the entered reservoir pore pressure in parameter (timeOrRes). The function should evaluate to the desired flux in pore volume fraction/((length units)2-time units). The function can additionally depend on particle position (x, y, z, D, T, R, or Z in length units), and/or clockwise particle rotation (q in radians). Note that because t is used for particle pore pressure, a coupled surface flux function cannot depend on time.

Transport Flux Conditions

When doing other transport calculations, you can set transport fluxes to surfaces of particles within the parents's block shape. The scripted ConcentrationFlux command selects transport fluxes by adding a (phaseStyle) command:

ConcentrationFlux (mode),(face),(style),(value),(timeOrRes),(phaseStyle)

In XML files, the <ConcFluxBC> command adds a phase attribute (which must be numeric):

<ConcFluxBC dir='(mode)' face='(face)' style='(style)' value='(value)'
                        time='(timeOrRes)' function='(function)' phase='(phaseStyle)'/>

where (phaseStyle) can be the following options:

  • fracture (or phaseStyle=3): generally not used; would be flux in (energy units)/(length units)2.
  • battery (or phaseStyle=4): generally not used
  • conduction (or phaseStyle=5): Set flux in units Coulombs/((time units)-(length units)2). For Legacy units (which are mm-g-sec), the flux is in A/mm2.
  • solvent or moisture (or phaseStyle=1): reverts to setting concentration flux without this parameter.

All other parameters are defined above except that style of "silent" is not allowed. To specify (phaseStyle) in scripted files, the (value) and (timeOrRes) parameters are required. They can be set to default zero if not needed.

These options only useful when using materials that support them. Some of these materials are available only in OSParticulas.

Initial Particle Damage

The scripted Damage command adds initial damage state to particles within the parents's block shape. This option only applies if those particles are for a softening material. The format is:

Damage (nx),(ny),<(nz)>,<(dn)>,<(dxy)>,<(dxz)>,<(mode)>

In XML files, the command is:

<Damage nx='0' ny='2' dn='1' dxy='1'/>

where

  • (nx, ny, nz) is normal vector for the damage plane. It need not be normalized, but should not be a zero vector (nz only used for 3D).
  • (dn, dxy, dxz) defines the three damage parameters (dxz only used for 3D). These should all be from 0 to 1 where 0 is undamaged and 1 is fully damaged. If not specified, the default values are 1 (or fully damaged)
  • (mode) damage mode or value for material type in the first damage history variable. This value is only used if all d's are less than 1. The default is 1.

For 2D problems, the Damage command must still use up to 7 parameters (for alignment). The two properties entered for 3D problems will be ignoed. In XML files, specify all the parameters that are needed.

Comments on Initial Damage

As a general rule, an thickness of the initial damage zone should span at least one full cell. A single line of particles when using cells with two particles in each direction, will not create the expected damage plane. Instead, the plane will be constrained by other material points connected as a continuum. That line will cause other particles in the same cell to get over stressed and they will eventually become damaged as well.

If damage parameters are equal to 1 (which is most common), the particles are fully damaged and first softening history variable is set to 3 (so visualization can distinguish new damage from predamage). When all damage variables are less than one, the code will need to find maximum strain corresponding to that damage state and first softening history variable is set to provided (mode). See each material type for failure mode settings.

This setting works for IsoDamageMechanics. The normals are used to improve scaling of toughness and only (dn) is used. If (mode) is set, the command must provided (dxy) and (dxz) for alignment.

The setting of initial particle damage is not yet implemented for TransIsoSoftening, OrthoSoftening, or OrthoPlasticSoftening.

Initial Particle Phase Field

The scripted PhaseField command adds initial phase field value to particles within the parents's block shape. This option only applies if those particles for a material that uses a phase field (current only for Isotropic Phase Field Softening Material). The format is:

PhaseField (phi)

In XML files, the command is:

<Damage phi='(phi)'/>

where (phi) is a user defined function for the phase field value to set on the particle. The function should evaluate to between 0 and 1 (and values outside that range are truncated to be between 0 and 1).