Difference between revisions of "Damping Options"
Line 15: | Line 15: | ||
* α<sub>''g''</sub> - grid damping that scales with the velocity extrapolated to the particle | * α<sub>''g''</sub> - grid damping that scales with the velocity extrapolated to the particle | ||
* α<sub>''p''</sub> - particle damping that scales with the particle velocity | * α<sub>''p''</sub> - particle damping that scales with the particle velocity | ||
* α(β) - PIC damping where β is the fraction FLIP in the simulation (from 0 to 1) and it scales with the extrapolation error between the particle velocity and the velocity extrapolated back to the particle. | * α(β) - PIC damping where β is the fraction FLIP in the simulation (from 0 to 1) and it scales with the extrapolation error between the particle velocity and the velocity extrapolated from the grid back to the particle. | ||
[[NairnMPM]] only has grid damping; [[OSParticulas]] has added the new particle and PIC damping options. | [[NairnMPM]] only has grid damping; [[OSParticulas]] has added the new particle and PIC damping options. |
Revision as of 13:13, 17 June 2014
NairnMPM has several forms of grid damping. Their most common use to damp dynamic effects such that the solution converges to a static result.
Introduction
Many times it is useful to apply damping to results, such as when the goal to to achieve a simulation of quasi-static results. This section explains various artificial damping options that are applied to the particle update in the MPM time step. The particle updates for position and velocity with damping become:
[math]\displaystyle{ \vec x_p^{(n+1)} = \vec x_p^{(n)} + \left(\vec v_{g\to p}^{(n+1)} - {\Delta t\over 2}\biggl(\vec a_{g\to p}^{(n)} + \alpha_g \vec v_{g\to p}^{(n)} + \alpha_p \vec v_{p}^{(n)} + \alpha(\beta)\bigl(\vec v_{p}^{(n)} -\vec v_{g\to p}^{(n)} \bigr) \biggr)\right)\Delta t }[/math]
[math]\displaystyle{ \vec v_p^{(n+1)} = \vec v_p^{(n)} + \biggl(\vec a_{g\to p}^{(n)} - \alpha_g \vec v_{g\to p}^{(n)} - \alpha_p \vec v_{p}^{(n)} - \alpha(\beta)\bigl(\vec v_{p}^{(n)} -\vec v_{g\to p}^{(n)} \bigr) \biggr)\Delta t }[/math]
where x is position, v is velocity, a is acceleration, and Δt is the time step. Subscript p indicates a particle property and subscript g→p indicates a grid property that has been extrapolated to the particle. Subscripts (n) and (n+1) indicate at the start or end of time step n. The damping terms are:
- αg - grid damping that scales with the velocity extrapolated to the particle
- αp - particle damping that scales with the particle velocity
- α(β) - PIC damping where β is the fraction FLIP in the simulation (from 0 to 1) and it scales with the extrapolation error between the particle velocity and the velocity extrapolated from the grid back to the particle.
NairnMPM only has grid damping; OSParticulas has added the new particle and PIC damping options.
Grid and Particle Damping
Two types of grid and particle damping are available. Simple damping just specifies the damping value (which can be a function of time). Alternatively, feedback damping provides a variant of Nose-Hoover feedback,[1][2][3] which implements a scheme to evolve the damping coefficient depending on the current total kinetic energy. The net grid or particle damping will be a sum of the two damping options:
[math]\displaystyle{ \alpha_g = \alpha_{g,simple}(t) + \alpha_{g,feedback}(t) \qquad {\rm and}\qquad \alpha_p = \alpha_{p,simple}(t) + \alpha_{p,feedback}(t) }[/math]
A single simulation can use any combination of these damping options. The αg,simple and αp,simple are specified with Damping and PDamping commands, respeectively. The αg,feedback and αp,feedback are initialized to zero, but can separately evolve during a simulation based on settings in FeedbackDamping and PFeedbackDamping commands. Feedback damping will evolve such that kinetic energy approaches zero (for a static result) or approaches any non-zero target kinetic energy. The αg,feedback and αp,feedbackterms evolve by kinetic energy evaluated on the grid:
[math]\displaystyle{ {d\alpha\over dt} = {2K\over m_{tot}} \left(\sum_{{\rm node}\ i} {1\over 2} m_i |v_i|^2 - T_k \right) }[/math]
where K is a gain parameter, mtot is total mass, and Tk is the target kinetic energy. The grid and particle feedback damping terms can set separate values for K and Tk. The (2/mtot) is an arbitrary scaling used to make K similar to a different feedback damping method used in earlier versions of this code and an attempt to make K less dependent on problem size.
PIC Damping
A paper on using MPM for animation[4] suggested that simulations could be improved by modifying the velocity update to include a fraction β using standard FLIP style MPM velocity updates and a fraction (1-β) using PIC style updates. In brief, an undamped FLIP update increments the particle velocity using grid acceleration:
[math]\displaystyle{ \vec v_{p,FLIP}^{(n+1)} = \vec v_p^{(n)} + \vec a_{g\to p}^{(n)} \Delta t }[/math]
while an undamped PIC update sets particle velocity to the extrapolated grid velocity:
[math]\displaystyle{ \vec v_{p,PIC}^{(n+1)} = \vec v_{g\to p}^{(n+1)} }[/math]
The siggestion[4] is that an improved update combines these two updates using:
[math]\displaystyle{ \vec v_{p}^{(n+1)} = \beta \vec v_{p,FLIP}^{(n+1)} + (1-\beta)\vec v_{p,PIC}^{(n+1)} }[/math]
This FLIP/PIC option appears to provide benefit in some simulations, but its use is difficult to justfy. We noticed, however, that the FLIP/PIC update is actually a special case of the above damping where the PIC damping constant is set equal to:
[math]\displaystyle{ \alpha(\beta) = {1-\beta\over \Delta t} }[/math]
This view leads to two significant improvements on use of PIC in simulations:
- It provides insight and justification for PIC damping. The PIC damping term is related to the extrapolation error between particle velocity and extrapolated grid velocity. This error will be large in element that contain particles with widely varying velocity (as sometimes happens in MPM simulations) and small in areas with rather uniform velocity. Thus PIC damping will selectively damp out regions with large velocity variations and have no affect on regions with smooth velocities.
- By implement PIC as a damping mechanism, it became clear how to modify the position update to include a fraction PIC as well. The original reference[4] on this option did not modify the position update and that approach appears to be an error. The above position update fixes that error. Also note that the damping terms in the position update are second order, but because PIC damping is inversely proportional to Δt, the PIC damping terms become first order terms in the position update.
PIC damping is added to simulations using the Damping or PDamping terms.
Damping Commands
In scripted files, grid damping (which is currently only damping that can be selected with scripted commands) is activated with the two commands
Damping (alphaVsT) FeedbackDamping (gain),<(Tk)>,<(maxAlpha)>
Although both can be used, usually only one damping method is used in a simulation. The parameters are:
- (alphaVsT) is a constant damping factor or a user defined function of time that evaluates to a grid damping constant. The units are 1/sec and the default value is 0.
- (gain) is gain for evolution of α in feedback damping. It has units of 1/mm2. The default is 0 or no damping.
- (Tk) in an optional user-defined function of time that evaluates to a target kinetic energy in μJ. The default value is 0.
- (maxAlpha) can optionally specify a maximum feedback damping coefficient (α) entered in units of 1/sec. The default is to have no limit to damping, but a maximum can be used to prevent out-of-control overdamping. When a limit is needed, however, it might be a symptom of a poor simulation with too much kinetic energy.
In XML input files, grid, particle, and/or PIC damping are activated with the the following commands, which must be within the <MPMHeader> element:
<Damping PIC="(fractionPIC)' function='(alphaVsT)'>(alphaNum)</Damping> <FeedbackDamping target='(Tk)' max='(maxAlpha)'>(gain)</FeedbackDamping> <PDamping function='(alphaVsT)'>(alphaNum)</PDamping> <PFeedbackDamping target='(Tk)' max='(maxAlpha)'>(gain)</PFeedbackDamping>
where
- (fractionPIC) is the fraction PIC to use in the simulation (i.e., 1-β). It can vary from 1 for pure PIC to 0 for pure FLIP. The default is 0.
- (alphaNum) parameters are constant grid and particle damping factors (only numbers are allowed). These constant values are only used if no function attribute is provided. The units are 1/sec and the default value is 0.
The Damping and FeedbackDamping commands set grid and particle damping terms, respectively.
Using Damping
Adding damping allows a dynamic calculation to approach static or quasi static results after sufficiently long times. Too much damping, however, will alter the results. The challenge is to select the appropriate amount of damping. The amount of damping to approach static results without over damping depends on the problem being damped. Under static conditions (no longer applying forces or moving particles), damping will cause the total kinetic energy on the grid to decay with a exponential time constant on the order of
[math]\displaystyle{ \tau = {1\over 2\alpha} }[/math]
One set of tension simulations for an isotropic material with E = 2300 MPa and ρ = 1 g/cm3 were damped weill with α = 5000 sec-1 or τ ≈ 0.1 msec. For other materials, an appropriate amount of damping will likely scale from this choice approximately with wave speed √(E/ρ) of the materials. When the problem involves bending, however, the damping coefficient may need to based on the transverse vibration frequency rather than on material wave speed.
For problems with monotonic loading, you would not want to damp to zero kinetic energy, but rather to a non-zero kinetic energy appropriate for the problem. For example, a simple tension test the x direction on a bar with one end (at x=0) fixed and the other end (at x=l) moving at velocity v in quasi-static conditions, would have position-dependent velocity of vx/l. The quasi-static kinetic energy for this simulation would be
[math]\displaystyle{ T_k = \int_V {\rho\over2} \left({vx\over l}\right)^2 dV = {1\over 6} m v^2 }[/math]
where m is total mass of the object. This problem is best damped using feedback damping with the target kinetic energy equal to this evaluated Tk. The (gain) parameter would have to be selected by trial and error to avoid too little or too much damping.
You can monitor total grid and particle damping constants, α and αp, by using global archiving options. Ideally the simulation α will remain as a reasonable number for the dynamics of the problem (i.e., provided damping time constant appropriate for the problem). When using a target kinetic energy, α should decrease as kinetic energy moves toward the target result. If the damping cannot keep up with dynamic effects, the α may continue to increase and may eventually cause overdamping. The (maxAlpha) parameter can be used to prevent α growing too large, but typically a need to use this parameter might mean the simulations will not work well and other methods should be considered.
The differences between grid and particle damping are typically minor. The two options are available, however, in case one type (or a combination) works better in specific problems.
PIC damping can be used alone or in addition to grid and particle. It seems to have the most affect in problems involving non-zero velocity boundary conditions and problems involving contact. It has less affect on problems with traction boundary conditions. The current recommendation is purely trial and error. Try adding from fraction PIC and see if it helps the results without altering them to a poor solution.
Notes
- The use of feedback damping in MPM calculations was first described in Ayton, et al., 2002.[3] This reference evolved α using
[math]\displaystyle{ {d\alpha\over dt} = K \sum_p |v_p|^2 }[/math]
In other words the update was based on sum of particle velocities and there was no target kinetic energy. This approach is only suitable for problems with static boundary conditions. The modifications in NairnMPM allow the use of damping with variable boundary conditions (assuming you can estimate the expected kinetic energy) and uses kinetic energy rather than a velocity sum. The use of kinetic energy makes the method more general and therefore better able to handle composite materials having particles of different masses. Furthermore, the kinetic energy for NairnMPM damping is found from grid masses and velocities rather than particle masses and velocities becuase in some problems particle kinetric energy can develop artifacts while grid kinetic energy is more robust estimate of total kinetic energy. - A Nose-Hoover thermostat works in molecular calculations by tying kinetic energy to temperature.[1][2] In MPM the thermostat ties kinetic energy to an expected kinetic energy after vibrations are damped out.[3] When boundary conditions are constant, either simple damping or feedback damping with no target kinetic energy will help the problem converge to the static solution. For non-constant boundary conditions, you need to use feedback damping, estimate the "static" (i.e., very slow loading) kinetic energy, and set (Tk) parameter to this estimate to have this thermostat work correctly.
References
- ↑ 1.0 1.1 D. J. Evans and B. L. Holian, The Nose-Hoover Thermostat. J. Chem. Phys., 83, 4069–4074 (1985).
- ↑ 2.0 2.1 W. G. Hoover, Canonical dynamics: equilibrium phase-space distributions. Phys. Rev. A., 31, 1695–1697 (1985).
- ↑ 3.0 3.1 3.2 G. Ayton, A. M. Smondyrev, S. G. Bardenhagen, P. McMurtry, and G. A. Voth, "Interfacing Molecular Dynamics and Macro-Scale Simulations for Lipid Bilayer Vesicles," Biophys J, 83, 1026-1038 (2002)
- ↑ 4.0 4.1 4.2 A. Stomakhin, C. Schroeder, L. Chai, J. Teran, and A. Selle, A material point method for snow simulation, ACM Transactions on Graphics (TOG) - SIGGRAPH 2013 Conference Proceedings, 32(4), Article No. 102, July (2013)