MPM Region and Hole Commands
In MPM, the most common way to discretize an object is to add material points to the background grid using Region commands and to designate regions of the grid has having no material points using Hole commands. Enclosed in these commands are various shape commands to define the object. An alternative and powerful option for discretizing an object is to create material points automatically from an image of the object.
When modeling with membrane materials (which are only in OSParticulas), membrane material points are added with <Membrane> XML elements.
Region Commands
Once the background grid is created, material points are added to the grid using a series of Region commands. In scripted files, the Region command defines material type, initial velocity, thickness (in 2D), and optionally an initial angle (for some anisotropic materials), temperature, and concentration. The command is
Region (matid),(velx),(vely),(velz) or (thick),<(property),(value)>... (an initial angular velocity command) (any number of shape commands) (one optional Transform Command) (interspersed rotation commands) EndRegion
In XML files, Region command are replaced by <Body> commands and optionally one <PointList> block. All these elements must be within the single <MaterialPoints> element in the input file:
<MaterialPoints> <PointList> (see help on PointList block) </PointList> <Body mat='(matid)' vx='(velx)' vy='(vely)' vz='(velz)' thick='(thick)' angle='(angle)' temp='(temp)' conc='(conc)' wtconc='(wtconc)' pp='(pp)'> <MatlPtsPerElement>(totalNumber)</MatlPtsPerElement> (see note 1) (interspersed initial velocity commands) (interspersed initial angular velocity commands) (any number of shape commands) (interspersed <Deform> and <Undeform> commands) (interspersed rotation commands) </Body> .... </MaterialPoints>
where
- (matid) is the material ID for a previously defined material (or can reference by material name).
- (velx), (vely), and (velz) are the components of the initial velocity for all particles in the region (velz is only used for 3D simulations). The units are velocity units. In scripted input files, the velocities can be numerical constants or can be user defined functions of particle position. The values of the functions are applied to all particles in the region. In XML input files, the velocites must be numerical constants, but you can set position dependent velocities by using initial velocity commands within the <Body> element.
- (thick) is the thickness of each material point in length units. The thickness is only used for planar 2D calculations. In scripted files for axisymmetric calculations, the thickness parameter is still required, but it is only used for parameter alignment (its value is ignored).
- (totalNumber) is to optionally set the number of material points in each element of the background grid for this region to differ from the default setting.1 (it must be square or cube of points per side in 2D or 3D, respectively). This option is for XML files only. Use the "res" option below to pick points per element in scripted file.
Besides the above required parameters, you can provide optional parameters to set initial conditions for all particles in the region. In scripted files, the optional parameters appear in pairs. The first item in the pair (i.e., (property)) is the name of the property to set and the second item (i.e., (value)) is the initial value for that property. In XML files, the optional properties are set using optional attributes:
- angle,(angle) to set the initial rotation angle for the material axes about the z axis. The units are degrees. This parameter is sufficient for 2D analyses with constant material angle. See help on setting material angles for methods to set variable angles or to set more than one rotation angle in 3D calculations.
- temp,(temp) to set the initial particle temperature. The units are degrees.
- conc,(conc) to set the initial particle concentration potential. The dimensionless concentration potential must be from 0 to 1. Only used when doing diffusion calculations.
- (wtconc)to set concentration by weight fraction concentration instead of by concentration potential. The resulting potential will be (wtconc) divided by the material's saturation concentration. This option is only available in XML input files. The units are dimensionless and must be from 0 to the material's saturation concentration. Only used when doing diffusion calculations.
- pp,(pp) to set the initial particle pore pressure in pressure units. Only used when doing poroelasticity calculations.
- res,(axisNumber) is to optionally set the number of material points along each axis in each element of the background grid for this region to differ from the default setting.1 The total number of points per element is square (for 2D) or cube (for 3D) of (axisNumber).
Besides these particle properties, other material point properties some Particle-Based Boundary Conditions set initial values for particles (e.g., particle damage state).
The optional PointList Block can be used to define individual material points, each with individual initial conditions. The option is only available to XML input files.
Shape Commands
Between the Region command and the subsequent EndRegion command (or within each <Body> element), there can be any number of shape commands to define material point positions and the shapes. The details on these shape command are given elsewhere:
By nesting shapes, you can create many more types of shapes.
Hole Commands
The Hole command is used to designate regions of the background grid that should not have material points. In scripted files, the Hole command is:
Hole (any number of shape commands) EndHole
In XML files, the <Hole> block is:
<Hole> (any number of shape commands) </Hole>
Between the Hole command and the subsequent EndHole command (or within the <Hole> block), there can be any number of shape commands to define hole locations. The details on these shape command are given elsewhere:
By nesting shapes, you can create many more types of shapes.
An object with holes (or voids) is created by a sequence of Region and Hole commands. Each Region command fills every location within its shapes with a material point unless that location was previously designated as a hole. Each Hole command designates every location within its shapes as being a hole, but, if any location already has a material point, that point is left intact. In other words, the order of these commands is crucial. By selecting the correct order, you have greatly flexibility in creating objects with solid regions and void (or hole) regions.
Membrane Particles
Membrane material points can only be added using XML commands by added <Membrane> elements with the <MaterialPoints> element. The options are currently very limited. In 2D. membrane particles can only be added along a straight lines using an <MemLine> element. In 3D, the only option is particle within a flat plane using <MemPlane> element. In 2D, the details are:
<MaterialPoints> <Membrane mat='(matid)' vx='(velx)' vy='(vely)' vz='(velz)' angle='(angle)' temp='(temp)' conc='(conc)' wtconc='(wtconc)' pp='(pp)'> <MemLine y1='(y1)' y2='(y2)' x1='(x1)' x2='(x2)' tolerance='(tol)' thickness='(mthick)' length='(mlen)'/> (interspersed initial velocity commands) (interspersed initial angular velocity commands) </Membrane> .... </MaterialPoints>
where attributes on the <Membrane> are the same as those defined for the <Body> element and the material must be a membrane material type. The first five attributes on the <MemLine> element the same as those for a Line command. The last two set membrane particle properties:
- (mthick) to set thickness of membranes in the 2D plane of the analysis (the (thick) property on <Membrane> elements sets thickness in z direction).
- (mlen) to set length of each particle along the line (the line is divided into an integral number of material points). Membrane lines should have at least two membrane particles per background cell and can benefit from having more.
In 3D, the details are:
<MaterialPoints> <Membrane mat='(matid)' vx='(velx)' vy='(vely)' vz='(velz)' thick='(thick)' angle='(angle)' temp='(temp)' conc='(conc)' wtconc='(wtconc)' pp='(pp)'> <MemPlane xmin='(xmin)' xmax='(xmax)' ymin='(ymin)' ymax='(ymax)' zmin='(zmin)' zmax='(zmax)' length='(length)' memaxis='(memaxis)'/> (interspersed initial velocity commands) (interspersed initial angular momentum commands) </Membrane> .... </MaterialPoints>
where attributes on the <Membrane> are the same as those defined for the <Body> element and the material must be a membrane material type. The first six attributes on the <MemPlane> element the same as those for a Box command. The last two set membrane particle properties:
- (length) to set length for sides of membrane particles within the plane. Membrane planes should have at least two particles in each background cell directon and can benefit from having more.
- (memaxis) is normal direction to the plane of particles. This command is currently limited to planes normal to x, y, or z axis. The thickness of membrane particles normal to the place is found from limits of that plane (e.g., when (memaxis)=z, the particle thicknesses are set to (zmax)-(zmin).
Simulations can combine standard, solid material point types with membrane materials points. Because the code does not check if membrane particle overlap other material points, the user is responsible for defining non-overlapping regions in simulations that use membranes or that combine membranes with solid material points.
Membranes can be added in scripting input files but putting the XML command inside an XMLData Command block where first parameter adds the data to the MaterialPoint element. For example:
XMLData "MaterialPoints"
<Membrane mat="&MemMat;" thick="&thick;" vx="0" vy="0">
<MemLine y1="&yloc;" y2="&yloc;" x1="0" x2="&xmax;" thickness="&mthick;" length="&mlen;"/> </Membrane> EndXMLData
Notice defining terms in Entity commands is a good way to couple scripting commands to XML data blocks.
Notes
- If you set the number of material points per element in a region that differs from the default setting, the code will no longer check to make sure particles are not overlapping. The user is therefore responsible for defining non-overlapping regions. Note also that this setting can use any valid number per element and is not limited to the values allowed when choosing the default setting.