Difference between revisions of "Rigid Material"
(61 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== Constitutive Law == | == Constitutive Law == | ||
These page documents two types of rigid [[Material Models|MPM materials]] depending if you create a [[#RigidBC Material: Moving Boundary Condition|RigidBC material]] or a [[#RigidContact Material|RigidContact material]]. A <tt>RigidBC</tt> material implements moving boundary conditions while a <tt>RigidContact</tt> material is a moving rigid object that interacts with non-rigid materials by contact. | |||
== | == RigidBC Material: Moving Boundary Condition == | ||
Thiis material is not really a material and points that use this type of rigid material will not really be part of the MPM analysis. These rigid material points are used to set [[Grid-Based Boundary Conditions|boundary conditions on the grid]] that move with the particles. The rigid material points should be initialized to a velocity, temperature, concentration or pore pressure when they are created in [[MPM Region and Hole Commands|Region commands]]. As the rigid material points move through the grid, all nodes connected to those points will be assigned [[Grid-Based Boundary Conditions|grid-based boundary conditions]] for the selected particle properties of velocity, temperature, concentration, and/or pore pressure. | |||
You use the <tt>direction</tt> property to determine which components of velocity are controlled by the moving rigid particles. Setting grid values for temperature, concentration or pore pressure and determine by other rigid material properties, | |||
To have the boundary condition vary in time and position, use the <tt>settingFunction(2)(3)</tt> and <tt>valueFunction</tt> properties below to set the values with [[User Defined Functions|user defined functions]] rather than using the initial particle properties to pick a constant value. When the particle values vary with position, it is sometimes better to use the [[ExtrapolateRigid Command|ExtrapolateRigid mode]] that extrapolates rigid particle to the grid and sets boundary conditions from the extrapolated values instead of the particle values. | |||
As boundary conditions dynamically created by rigid particles cross between grid elements, the boundary conditions jump for some nodes to neighboring nodes. These jumps can induce artifacts. To minimize these artifacts, the <tt>mirrored</tt> property should be set, whenever possible, depending on the direction of motion. | |||
== Material Properties == | === RigidBC Material Properties === | ||
The rigid material properties are set with the following commands: | The rigid boundary condition material properties are set with the following commands: | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 25: | Line 21: | ||
! Property !! Description !! Units !! Default | ! Property !! Description !! Units !! Default | ||
|- | |- | ||
| SetDirection <br> direction|| <ul><li>1 through 7: set grid velocities to various components of the rigid particle velocity (see table below) | | SetDirection <br> direction|| <ul><li>1 through 7: set grid velocities to various components of the rigid particle velocity (see table below). <li>0: sets no velocity components, but can set temperature and/or concentration values from moving particles.</ul> (Note: the <tt>direction</tt> property name can only be used in scripted files) || none || 0 | ||
|- | |||
| SetTemperature <br>temperature || 1 to set temperature boundary condition or 0 to not set it. This setting has no affect unless the analysis is doing thermal calculations. Use <tt>SetDirection</tt> = 0 to having moving heat source only; use <tt>SetDirection</tt> = 1 to 7 to combine moving heat source with velocity boundary conditions. (Note: the <tt>temperature</tt> property name can only be used in scripted files) || none || 0 | |||
|- | |- | ||
| | | SetConcentration<br>concentration || 1 to set concentration boundary condition or 0 to not set it (in scripted files only). This setting has no affect unless the analysis is doing [[Diffusion Calculations|diffusion calculations]]. Use <tt>SetDirection</tt> = 0 to having moving concentration source only; use <tt>SetDirection</tt> = 1 to 7 to combine moving concentration source with velocity boundary conditions. (Note: the <tt>concentration</tt> property name can only be used in scripted files)|| none || 0 | ||
|- | |- | ||
| | | SetPorePressure<br>porepressure || 1 to set pore pressure boundary condition or 0 to not set it (in scripted files only). This setting has no affect unless the analysis is doing [[Poroelasticity Calculations|poroelasticity calculations]]. Use <tt>SetDirection</tt> = 0 to having moving pore pressure source only; use <tt>SetDirection</tt> = 1 to 7 to combine moving pore pressure source with velocity boundary conditions. (Note: the <tt>porepressure</tt> property name can only be used in scripted files)|| none || 0 | ||
|- | |- | ||
| settingFunction<br>settingFunction2<br>settingFunction3 || You can enter one to three [[User Defined Functions|user defined functions]] (settingFunction and settingFunction1 are synonyms) of time, time step, and position. The function should evaluate to the velocity in | | settingFunction<br>settingFunction2<br>settingFunction3 || You can enter one to three [[User Defined Functions|user defined functions]] (settingFunction and settingFunction1 are synonyms) of time, time step, and position. The function should evaluate to the velocity in [[ConsistentUnits Command#Legacy and Consistent Units|velocity units]] and it will set the rigid-particle velocity (any initial velocity setting will be ignored). See example [[#Rotation of Rigid Object|below]] for a problem that needs to use time step in the functions. || none || none | ||
|- | |- | ||
| valueFunction || You can enter a [[User Defined Functions|user defined function]] of time, time step, and position. The function should evaluate to the temperature | | valueFunction || You can enter a [[User Defined Functions|user defined function]] of time, time step, and position. The function should evaluate to the temperature, concentration potential, or pore pressure. Any initial temperature or concentration assigned to the rigid particles will be ignored. Because there is only one value function, you cannot independently set temperature, concentration, and pore pressure with a function. Thus rigid particles with value functions should only set one of these quantities. || none || none | ||
|- | |- | ||
| mirrored || Set to -1 or +1 to indicate that rigid particles with <tt>SetDirection</tt> = 1 to 7 are setting a velocity on the minimum edge (-1) or maximum edge (+1) of the object along the moving direction. This property can improve the performance of velocity boundary conditions as explained [[#Mirrored Velocity Property|below]]. The default setting of 0 means to not use mirroring. || none || 0 | | mirrored || Set to -1 or +1 to indicate that rigid particles with <tt>SetDirection</tt> = 1 to 7 are setting a velocity on the minimum edge (-1) or maximum edge (+1) of the object along the moving direction. This property can improve the performance of velocity boundary conditions as explained [[#Mirrored Velocity Property|below]]. The default setting of 0 means to not use mirroring. || none || 0 | ||
Line 61: | Line 59: | ||
|} | |} | ||
The (up to) three setting functions can set up to three velocity direction | The (up to) three setting functions can set up to three velocity direction. The functions must be given in order (<tt>settingFunction</tt>, <tt>settingFunction2</tt>, and <tt>settingFunction3</tt>) and they apply to the velocities that are controlled in order (''e.g.'', when controlling <tt>y</tt> and <tt>z</tt> with <tt>SetDirection</tt>=6, the <tt>settingFunction</tt> is for <tt>y</tt> velocity and <tt>settingFunction2</tt> is for <tt>z</tt> velocity). Note that in scripted files, you can use <tt>settingFunction1</tt> (or <tt>x</tt>) as a synonym for <tt>settingFunction</tt> and you can use <tt>settingFunctiony</tt> (or <tt>z</tt>) as a synonym for <tt>settingFunction2</tt> (or <tt>3</tt>). | ||
=== Rotation of Rigid Object === | === Rotation of Rigid Object === | ||
Line 72: | Line 66: | ||
| | ||
<math> (v_x,v_y) = 2\pi | <math> (v_x,v_y) = \omega r\bigl(-\sin\theta,\cos\theta\bigr) = 2\pi f \bigl(-(y-y_0),x-x_0\bigr)</math> | ||
[[File:RigidRotation.jpg|right]] | [[File:RigidRotation.jpg|right]] | ||
where ω is the | where <tt>r</tt> and <tt>θ</tt> are polar coordinates based on the center of the object, ω is the angular velocity and ''f'' is frequency in cycles per second. If you model rotation of these particles by setting these <tt>x</tt> and <tt>y</tt> velocities, the shape might distort with time and could distort rapidly at high rotation speeds. The problem is this tangential velocity field does not account for the discrete rotation that occurs during each time step. As illustrated on the right, a tangential velocity (''v<sub>tang</sub>'') moves the particle in the tangential direction, but after a finite time step, the motion should be to a rotated positioned. If this rotation affect is not accounted for, the rigid object will slowly expand as the simulation proceeds. The solution is to replace ''v<sub>tang</sub>'' with an effective velocity, ''v<sub>eff</sub>''. A particle that starts at <tt>(x-x<sub>0</sub>,y-y<sub>0</sub>)</tt> = <tt>(r</tt> <tt>cosθ,r</tt> <tt>sinθ)</tt>, should end at <tt>(r</tt> <tt>cos(θ+dθ),r</tt> <tt>sin(θ+dθ))</tt> where the incremental rotation angle is: | ||
| | ||
<math> d\theta = 2\pi | <math> d\theta = 2\pi f\Delta t</math> | ||
where Δt is time step | where Δt is time step. The effective velocity becomes: | ||
| | ||
<math> v_{eff} = {r\over \Delta t}\bigl( \cos(\theta+d\theta) - \cos\theta, \sin(\theta+d\theta) - \sin\theta\bigr)</math> | <math> v_{eff} = {r\over \Delta t}\bigl( \cos(\theta+d\theta) - \cos\theta, \sin(\theta+d\theta) - \sin\theta\bigr)</math> | ||
In terms of variables available to [[User Defined Functions|user defined functions]], the effective velocity field (in | In terms of variables available to [[User Defined Functions|user defined functions]], the effective velocity field (in [[ConsistentUnits Command#Legacy and Consistent Units|velocity units]] when using consistent units) for a rotating rigid object is: | ||
| | ||
<math> v_x = { | <math> v_x = {1\over \Delta t}\bigl(-(y-y_0)\sin(2\pi f\Delta t)+(x-x_0)(\cos(2\pi f\Delta t)-1)\bigr)</math> | ||
| | ||
<math> v_y = { | <math> v_y = {1\over \Delta t}\bigl((x-x_0)\sin(2\pi f\Delta t) + (y-y_0)(\cos(2\pi f\Delta t)-1)\bigr)</math> | ||
This function is an example of the need to allow time step as a variable in [[User Defined Functions|user defined functions]]. It | where ''f'' is set to 1/''t<sub>rev</sub>'' where ''t<sub>rev</sub>'' is the amount of simulation time you want to complete one complete revolution. For clockwise rotation, change the sign of each velocity. This function is an example of the need to allow time step as a variable in [[User Defined Functions|user defined functions]]. It generalizes the tangential velocity field to allow for discrete rotation in each time step. A rotating and translating object can be modeled by adding the translational velocity and by accounting for any time dependence of <tt>x<sub>0</sub></tt> and <tt>y<sub>0</sub></tt>. | ||
=== Mirrored Velocity Property === | === Mirrored Velocity Property === | ||
When rigid particles moving along the x, y, or z axis are setting [[#Moving Boundary Condition|moving boundary conditions]], those dynamic boundary conditions will jump from one layer of nodes to the next as the rigid particles cross between grid elements. This jumping of boundary conditions can cause artifacts, but those artifacts can be reduced by using the <tt>mirrored</tt> property. When mirroring is turned on the node adjacent to the object will set the specified velocity (call it <tt>V<sub>0</sub></tt>), but nodes that are one layer further from the object will set the velocity to: | |||
| |||
<math>V_{BC} = 2V_0 - V_{ghost}</math> | <math>V_{BC} = 2V_0 - V_{ghost}</math> | ||
where <tt>V<sub>ghost</sub></tt> is the extrapolated nodal velocity from particles at the first node interior to the object (''i.e.'', on the opposite side of the node adjacent to the object). The net effect is that the velocity boundary condition on the second layer of nodes will be a linear interpolation from the interior node, through the <tt>V<sub>0</sub></tt> node to the second layer of nodes. The figure below shows a sample tensile loading calculation with and without the <tt>mirrored</tt> property. The result on the left without mirroring shows artifacts in the layer of particles next to the rigid particles. The result on the right with mirroring eliminates those artifacts. | |||
[[File:Mirrored.jpg|center]] | |||
The <tt>mirrored</tt> property is set to +1 or -1 to specify the direction from the interior node to the rigid particles. Use -1 when the rigid particles are at the minimum edge of the object and use +1 when they are at the maximum edge (as in the above example). At large deformations (after many element crossings) additional artifacts may arise, but mirroring is always beneficial when it can be used in a simulation. | |||
Note that the mirroring property is deactivated when using the [[ExtrapolateRigid Command|ExtrapolateRigid mode]] for setting boundary conditions from rigid particles. | |||
=== Rigid Reaction Forces === | |||
Rigid materials with | Rigid boundary condition materials with interact with other material through [[Grid-Based Boundary Conditions|boundary conditions on the grid]]. During boundary condition calculations, the code calculates reaction forces at velocity boundary conditions. These forces can be output as follows: | ||
* The [[MPM Global Archiving Options|global archiving options]] has options for <tt>reactionx</tt>, <tt>reactiony</tt>, and <tt>reactionz</tt> that output components of the total reaction forces at [[Grid-Based Boundary Conditions|velocity boundary conditions on the grid]]. By using the <tt>(material)</tt> option in the [[MPM Global Archiving Options|global archive settings]], the output can be reaction forces on boundary conditions created by one specific type of rigid material. | |||
* If the [[ExtrapolateRigid Command|ExtrapolateRigid mode]] is activated, you can archive reaction forces for all rigid particles by setting <tt>(material)</tt> option in the [[MPM Global Archiving Options|global archive settings]] to -40 (the ID for all such boundary conditions). In this mode, it is not possible to partition reaction forces into forces on different types of rigid materials. | |||
== History Data == | === Rigid BC Material History Data === | ||
None | None | ||
== RigidContact Material == | |||
Particle with this material type will correspond to actual material points that move through the analysis at specified velocities. Since they are rigid, they will move with their prescribed velocity. They will interact with other material points only through [[Multimaterial MPM|multimaterial]] contact or [[Imperfect Interfaces|imperfect interface laws]] and thus this type of rigid material can only be used in [[Multimaterial MPM|multimaterial mode MPM calculations]]. | |||
The advantage of this type of rigid material (unlike the other type) is that you can set [[Friction|frictional properties]] for contact between rigid materials and non-rigid materials or you can use [[Multimaterial MPM|multimaterial methods]] to model [[Imperfect Interfaces|imperfect interfaces]]. These rigid materials will move in the direction defined by the initial velocity, or, by using <tt>settingFunction(2)(3)</tt> properties below, they can moved by any velocity given by [[User Defined Functions|user defined functions]]. If two ''different'' rigid contact materials interact at the same node, however, there is a conflict and the calculations will stop. | |||
Rigid contact materials ignores [[Defining Cracks|cracks]], but that actually makes it possible to use them for new crack problems. For example, these rigid particles can provide wedge opening of a crack. If the rigid particles run along an [[Defining Cracks|explicit crack plane]], those particles may contact particles on both sides of the crack, which can move the top and bottom surfaces of the crack apart. It may be only way to wedge open a crack (<i>i.e.</i>, the only material that can act like it is within a crack rather than on either side of the crack). All crack calculations (<i>e.g.</i>, crack contact, traction laws, imperfect interfaces, updating of crack position, and J integral) will ignore the rigid particles. The interactions with the rigid particles arise only by contact laws between the rigid particles and the various crack velocity fields. | |||
=== RigidContact Material Properties === | |||
The rigid contact material properties are set with the following commands: | |||
{| class="wikitable" | |||
|- | |||
! Property !! Description !! Units !! Default | |||
|- | |||
| settingFunction<br>settingFunction2<br>settingFunction3 || You can enter one to three [[User Defined Functions|user defined functions]] (settingFunction and settingFunction1 are synonyms) of time, time step, and position. The function should evaluate to the velocity in [[ConsistentUnits Command#Legacy and Consistent Units|velocity units]] and it will set the rigid-particle velocity (any initial velocity setting will be ignored). See example [[#Rotation of Rigid Object|below]] for a problem that needs to use time step in the functions. || none || none | |||
|} | |||
The possible three setting functions (regardless of order) are for setting <tt>x</tt>, <tt>y</tt>, and <tt>z</tt> velocities and zero to three can be used. Any not controlled will use the initial particle velocity. Note that in scripted files, you can use <tt>settingFunction1</tt> (or <tt>x</tt>) as a synonym for <tt>settingFunction</tt> and you can use <tt>settingFunctiony</tt> (or <tt>z</tt>) as a synonym for <tt>settingFunction2</tt> (or <tt>3</tt>). | |||
=== Rigid Reaction and Contact Forces === | |||
Rigid contact materials interact with other material through contact. During contact calculations, the code calculates the contact forces. These force can be a useful output of the simulation. The rigid material controls position and the contact force provides the resulting surface forces. There are two ways to output contact forces: | |||
* The [[MPM Global Archiving Options|global archiving options]] has options for <tt>contactx</tt>, <tt>contacty</tt>, and <tt>contactz</tt> that output components of the total contact forces on the grid due to all rigid particles in the simulation. | |||
* The [[VTKArchive Custom Task]] can archive <tt>contactForces</tt>. This option gives contact force on each node in the grid. Contact forces are only available in this grid archive, and not in particle archiving, because they are a result of a grid-based calculation in [[Multimaterial MPM|multimaterial mode]] simulations. | |||
=== Rigid Contact Material History Data === | |||
None | |||
== Deprecated Rigid Material == | |||
Prior to introduction of separate rigid boundary condition particles and rigid contact particles, simulations had only one type of rigid material. This type had two functions by choosing <tt>SetDirection</tt> from 0 to 7 to get rigid boundary condition particles or <tt>SetDirection</tt> equal to 8 for rigid contact particles. Old simulations that define rigid materials by this method still work, but that approach is deprecated. New simulations should specify rigid materials as "RigidBC" or "RigidContact" materials. | |||
== Notes == | == Notes == | ||
Line 121: | Line 156: | ||
<ol> | <ol> | ||
<li>Note that [[Multimaterial MPM|multimaterial mode MPM]] calculations can combine | <li>Note that [[Multimaterial MPM|multimaterial mode MPM]] calculations can combine rigid boundary condition particles with rigid contact particlesto provide different functions, but single-material mode MPM can only use boundary condition rigid particles (<tt>direction</tt>=0 to 7). | ||
<li>Note that creating rigid particles but not setting any velocity direction (<tt>direction</tt>=0) can be used to create moving temperature or concentration boundary conditions that move over the particles; <i>i.e.</i>, the rigid particles will move through the real particles. Such moving temperature or concentration boundary conditions can only move at a constant velocity defined by the initial particle velocity, because the <tt>direction</tt>=0 setting implies no axis is controlled by a function. | <li>Note that creating rigid boundary condition particles but not setting any velocity direction (<tt>direction</tt>=0) can be used to create moving temperature or concentration boundary conditions that move over the particles; <i>i.e.</i>, the rigid particles will move through the real particles. Such moving temperature or concentration boundary conditions can only move at a constant velocity defined by the initial particle velocity, because the <tt>direction</tt>=0 setting implies no axis is controlled by a function. | ||
<li>If a rigid particle is added to a problem, but it does not set any velocity, temperature, or concentration (<tt>direction</tt>=<tt>temperature</tt>=<tt>concentration</tt>=0 or omitted), it will have no affect on the calculations. It may plot in visualization software and therefore appear to be part of the simulation, but it will be identical to the results that would be obtained if it had never been added to the problem. | <li>If a rigid particle is added to a problem, but it does not set any velocity, temperature, or concentration (<tt>direction</tt>=<tt>temperature</tt>=<tt>concentration</tt>=<tt>porepressure</tt>=0 or omitted), it will have no affect on the calculations. It may plot in visualization software and therefore appear to be part of the simulation, but it will be identical to the results that would be obtained if it had never been added to the problem. | ||
</ol> | </ol> | ||
== Examples == | == Examples == | ||
Material "rigid","Loading Clamp","RigidBC" | |||
direction 1 | |||
mirrored 1 | |||
Done |
Latest revision as of 08:37, 28 November 2023
Constitutive Law
These page documents two types of rigid MPM materials depending if you create a RigidBC material or a RigidContact material. A RigidBC material implements moving boundary conditions while a RigidContact material is a moving rigid object that interacts with non-rigid materials by contact.
RigidBC Material: Moving Boundary Condition
Thiis material is not really a material and points that use this type of rigid material will not really be part of the MPM analysis. These rigid material points are used to set boundary conditions on the grid that move with the particles. The rigid material points should be initialized to a velocity, temperature, concentration or pore pressure when they are created in Region commands. As the rigid material points move through the grid, all nodes connected to those points will be assigned grid-based boundary conditions for the selected particle properties of velocity, temperature, concentration, and/or pore pressure.
You use the direction property to determine which components of velocity are controlled by the moving rigid particles. Setting grid values for temperature, concentration or pore pressure and determine by other rigid material properties,
To have the boundary condition vary in time and position, use the settingFunction(2)(3) and valueFunction properties below to set the values with user defined functions rather than using the initial particle properties to pick a constant value. When the particle values vary with position, it is sometimes better to use the ExtrapolateRigid mode that extrapolates rigid particle to the grid and sets boundary conditions from the extrapolated values instead of the particle values.
As boundary conditions dynamically created by rigid particles cross between grid elements, the boundary conditions jump for some nodes to neighboring nodes. These jumps can induce artifacts. To minimize these artifacts, the mirrored property should be set, whenever possible, depending on the direction of motion.
RigidBC Material Properties
The rigid boundary condition material properties are set with the following commands:
Property | Description | Units | Default |
---|---|---|---|
SetDirection direction |
|
none | 0 |
SetTemperature temperature |
1 to set temperature boundary condition or 0 to not set it. This setting has no affect unless the analysis is doing thermal calculations. Use SetDirection = 0 to having moving heat source only; use SetDirection = 1 to 7 to combine moving heat source with velocity boundary conditions. (Note: the temperature property name can only be used in scripted files) | none | 0 |
SetConcentration concentration |
1 to set concentration boundary condition or 0 to not set it (in scripted files only). This setting has no affect unless the analysis is doing diffusion calculations. Use SetDirection = 0 to having moving concentration source only; use SetDirection = 1 to 7 to combine moving concentration source with velocity boundary conditions. (Note: the concentration property name can only be used in scripted files) | none | 0 |
SetPorePressure porepressure |
1 to set pore pressure boundary condition or 0 to not set it (in scripted files only). This setting has no affect unless the analysis is doing poroelasticity calculations. Use SetDirection = 0 to having moving pore pressure source only; use SetDirection = 1 to 7 to combine moving pore pressure source with velocity boundary conditions. (Note: the porepressure property name can only be used in scripted files) | none | 0 |
settingFunction settingFunction2 settingFunction3 |
You can enter one to three user defined functions (settingFunction and settingFunction1 are synonyms) of time, time step, and position. The function should evaluate to the velocity in velocity units and it will set the rigid-particle velocity (any initial velocity setting will be ignored). See example below for a problem that needs to use time step in the functions. | none | none |
valueFunction | You can enter a user defined function of time, time step, and position. The function should evaluate to the temperature, concentration potential, or pore pressure. Any initial temperature or concentration assigned to the rigid particles will be ignored. Because there is only one value function, you cannot independently set temperature, concentration, and pore pressure with a function. Thus rigid particles with value functions should only set one of these quantities. | none | none |
mirrored | Set to -1 or +1 to indicate that rigid particles with SetDirection = 1 to 7 are setting a velocity on the minimum edge (-1) or maximum edge (+1) of the object along the moving direction. This property can improve the performance of velocity boundary conditions as explained below. The default setting of 0 means to not use mirroring. | none | 0 |
The SetDirection options 1 through 7 set grid velocities to various components of the rigid particle velocity by bit-wise selection with first three bits being for x, y, and z directions (or R, Z, θ if axisymmetric). A value of 0 sets no direction:
Value | Binary | Set Directions |
---|---|---|
0 | 0x000 | no direction |
1 | 0x001 | x only |
2 | 0x010 | y only |
3 | 0x011 | x and y |
4 | 0x100 | z only |
5 | 0x101 | x and z |
6 | 0x110 | y and x |
7 | 0x111 | x, y, and z |
The (up to) three setting functions can set up to three velocity direction. The functions must be given in order (settingFunction, settingFunction2, and settingFunction3) and they apply to the velocities that are controlled in order (e.g., when controlling y and z with SetDirection=6, the settingFunction is for y velocity and settingFunction2 is for z velocity). Note that in scripted files, you can use settingFunction1 (or x) as a synonym for settingFunction and you can use settingFunctiony (or z) as a synonym for settingFunction2 (or 3).
Rotation of Rigid Object
The velocity field of a block of rigid particles centered on (x0,y0) and rotating in the counter-clockwise direction can be described by:
[math]\displaystyle{ (v_x,v_y) = \omega r\bigl(-\sin\theta,\cos\theta\bigr) = 2\pi f \bigl(-(y-y_0),x-x_0\bigr) }[/math]
where r and θ are polar coordinates based on the center of the object, ω is the angular velocity and f is frequency in cycles per second. If you model rotation of these particles by setting these x and y velocities, the shape might distort with time and could distort rapidly at high rotation speeds. The problem is this tangential velocity field does not account for the discrete rotation that occurs during each time step. As illustrated on the right, a tangential velocity (vtang) moves the particle in the tangential direction, but after a finite time step, the motion should be to a rotated positioned. If this rotation affect is not accounted for, the rigid object will slowly expand as the simulation proceeds. The solution is to replace vtang with an effective velocity, veff. A particle that starts at (x-x0,y-y0) = (r cosθ,r sinθ), should end at (r cos(θ+dθ),r sin(θ+dθ)) where the incremental rotation angle is:
[math]\displaystyle{ d\theta = 2\pi f\Delta t }[/math]
where Δt is time step. The effective velocity becomes:
[math]\displaystyle{ v_{eff} = {r\over \Delta t}\bigl( \cos(\theta+d\theta) - \cos\theta, \sin(\theta+d\theta) - \sin\theta\bigr) }[/math]
In terms of variables available to user defined functions, the effective velocity field (in velocity units when using consistent units) for a rotating rigid object is:
[math]\displaystyle{ v_x = {1\over \Delta t}\bigl(-(y-y_0)\sin(2\pi f\Delta t)+(x-x_0)(\cos(2\pi f\Delta t)-1)\bigr) }[/math]
[math]\displaystyle{ v_y = {1\over \Delta t}\bigl((x-x_0)\sin(2\pi f\Delta t) + (y-y_0)(\cos(2\pi f\Delta t)-1)\bigr) }[/math]
where f is set to 1/trev where trev is the amount of simulation time you want to complete one complete revolution. For clockwise rotation, change the sign of each velocity. This function is an example of the need to allow time step as a variable in user defined functions. It generalizes the tangential velocity field to allow for discrete rotation in each time step. A rotating and translating object can be modeled by adding the translational velocity and by accounting for any time dependence of x0 and y0.
Mirrored Velocity Property
When rigid particles moving along the x, y, or z axis are setting moving boundary conditions, those dynamic boundary conditions will jump from one layer of nodes to the next as the rigid particles cross between grid elements. This jumping of boundary conditions can cause artifacts, but those artifacts can be reduced by using the mirrored property. When mirroring is turned on the node adjacent to the object will set the specified velocity (call it V0), but nodes that are one layer further from the object will set the velocity to:
[math]\displaystyle{ V_{BC} = 2V_0 - V_{ghost} }[/math]
where Vghost is the extrapolated nodal velocity from particles at the first node interior to the object (i.e., on the opposite side of the node adjacent to the object). The net effect is that the velocity boundary condition on the second layer of nodes will be a linear interpolation from the interior node, through the V0 node to the second layer of nodes. The figure below shows a sample tensile loading calculation with and without the mirrored property. The result on the left without mirroring shows artifacts in the layer of particles next to the rigid particles. The result on the right with mirroring eliminates those artifacts.
The mirrored property is set to +1 or -1 to specify the direction from the interior node to the rigid particles. Use -1 when the rigid particles are at the minimum edge of the object and use +1 when they are at the maximum edge (as in the above example). At large deformations (after many element crossings) additional artifacts may arise, but mirroring is always beneficial when it can be used in a simulation.
Note that the mirroring property is deactivated when using the ExtrapolateRigid mode for setting boundary conditions from rigid particles.
Rigid Reaction Forces
Rigid boundary condition materials with interact with other material through boundary conditions on the grid. During boundary condition calculations, the code calculates reaction forces at velocity boundary conditions. These forces can be output as follows:
- The global archiving options has options for reactionx, reactiony, and reactionz that output components of the total reaction forces at velocity boundary conditions on the grid. By using the (material) option in the global archive settings, the output can be reaction forces on boundary conditions created by one specific type of rigid material.
- If the ExtrapolateRigid mode is activated, you can archive reaction forces for all rigid particles by setting (material) option in the global archive settings to -40 (the ID for all such boundary conditions). In this mode, it is not possible to partition reaction forces into forces on different types of rigid materials.
Rigid BC Material History Data
None
RigidContact Material
Particle with this material type will correspond to actual material points that move through the analysis at specified velocities. Since they are rigid, they will move with their prescribed velocity. They will interact with other material points only through multimaterial contact or imperfect interface laws and thus this type of rigid material can only be used in multimaterial mode MPM calculations.
The advantage of this type of rigid material (unlike the other type) is that you can set frictional properties for contact between rigid materials and non-rigid materials or you can use multimaterial methods to model imperfect interfaces. These rigid materials will move in the direction defined by the initial velocity, or, by using settingFunction(2)(3) properties below, they can moved by any velocity given by user defined functions. If two different rigid contact materials interact at the same node, however, there is a conflict and the calculations will stop.
Rigid contact materials ignores cracks, but that actually makes it possible to use them for new crack problems. For example, these rigid particles can provide wedge opening of a crack. If the rigid particles run along an explicit crack plane, those particles may contact particles on both sides of the crack, which can move the top and bottom surfaces of the crack apart. It may be only way to wedge open a crack (i.e., the only material that can act like it is within a crack rather than on either side of the crack). All crack calculations (e.g., crack contact, traction laws, imperfect interfaces, updating of crack position, and J integral) will ignore the rigid particles. The interactions with the rigid particles arise only by contact laws between the rigid particles and the various crack velocity fields.
RigidContact Material Properties
The rigid contact material properties are set with the following commands:
Property | Description | Units | Default |
---|---|---|---|
settingFunction settingFunction2 settingFunction3 |
You can enter one to three user defined functions (settingFunction and settingFunction1 are synonyms) of time, time step, and position. The function should evaluate to the velocity in velocity units and it will set the rigid-particle velocity (any initial velocity setting will be ignored). See example below for a problem that needs to use time step in the functions. | none | none |
The possible three setting functions (regardless of order) are for setting x, y, and z velocities and zero to three can be used. Any not controlled will use the initial particle velocity. Note that in scripted files, you can use settingFunction1 (or x) as a synonym for settingFunction and you can use settingFunctiony (or z) as a synonym for settingFunction2 (or 3).
Rigid Reaction and Contact Forces
Rigid contact materials interact with other material through contact. During contact calculations, the code calculates the contact forces. These force can be a useful output of the simulation. The rigid material controls position and the contact force provides the resulting surface forces. There are two ways to output contact forces:
- The global archiving options has options for contactx, contacty, and contactz that output components of the total contact forces on the grid due to all rigid particles in the simulation.
- The VTKArchive Custom Task can archive contactForces. This option gives contact force on each node in the grid. Contact forces are only available in this grid archive, and not in particle archiving, because they are a result of a grid-based calculation in multimaterial mode simulations.
Rigid Contact Material History Data
None
Deprecated Rigid Material
Prior to introduction of separate rigid boundary condition particles and rigid contact particles, simulations had only one type of rigid material. This type had two functions by choosing SetDirection from 0 to 7 to get rigid boundary condition particles or SetDirection equal to 8 for rigid contact particles. Old simulations that define rigid materials by this method still work, but that approach is deprecated. New simulations should specify rigid materials as "RigidBC" or "RigidContact" materials.
Notes
- Note that multimaterial mode MPM calculations can combine rigid boundary condition particles with rigid contact particlesto provide different functions, but single-material mode MPM can only use boundary condition rigid particles (direction=0 to 7).
- Note that creating rigid boundary condition particles but not setting any velocity direction (direction=0) can be used to create moving temperature or concentration boundary conditions that move over the particles; i.e., the rigid particles will move through the real particles. Such moving temperature or concentration boundary conditions can only move at a constant velocity defined by the initial particle velocity, because the direction=0 setting implies no axis is controlled by a function.
- If a rigid particle is added to a problem, but it does not set any velocity, temperature, or concentration (direction=temperature=concentration=porepressure=0 or omitted), it will have no affect on the calculations. It may plot in visualization software and therefore appear to be part of the simulation, but it will be identical to the results that would be obtained if it had never been added to the problem.
Examples
Material "rigid","Loading Clamp","RigidBC" direction 1 mirrored 1 Done