Difference between revisions of "3D Cracks"

From OSUPDOCS
Jump to navigation Jump to search
(38 intermediate revisions by the same user not shown)
Line 3: Line 3:
== Introduction ==
== Introduction ==


3D cracks are defined by a collection of triangular facets. The corners and located using crack key points. Each facet can option input a [[Traction Laws|traction law]].
3D cracks are defined by a collection of triangular facets. The corners and located using crack key points. The final crack surface can be an arbitrary 2D surface within an object and need not be a planar surface. Note that cracks are defined using large triangles (as large as possible depending on the crack surface). The [[NairnMPM]] code will subdivide each specified triangle into smaller triangular facets. Accurate modeling of 3D cracks typically needs the final facet size to be similar to the grid cell size (or smaller). The entire crack can use a custom [[Contact Laws|contact law]]. Each definition facet can optionally add a [[Traction Laws|traction law]].


== Planar Crack Definition ==
== Planar Crack Definition ==


If the crack has a parallelogram shape, you can define with a few commands. In scripted files, the commands are:
If the crack has a planar, parallelogram shape, you can define it with a few commands. In scripted files, the commands are:


  NewCrack (x0),(y0),(z0),(k0)
  NewCrack (x0),(y0),(z0),(k0),<(lawID)>
  CrackKeypoint (x1),(y1),(z1),(k1)
  CrackKeypoint (x1),(y1),(z1),(k1)
  CrackKeypoint (x2),(y2),(z2),(k2)
  CrackKeypoint (x2),(y2),(z2),(k2)
Line 16: Line 16:
In XML files, a parallelogram crack is defined with one command in a <tt><CrackList></tt> element:
In XML files, a parallelogram crack is defined with one command in a <tt><CrackList></tt> element:


  <CrackList>
  <CrackList law='(lawnum)' lawname='(lawname)'>
   <Plane V0x='(x0)' V0y='(y0)' V0z='(z0)' V1x='(x1)' V1y='(y1)' V1z='(z1)'
   <Plane V0x='(x0)' V0y='(y0)' V0z='(z0)' V1x='(x1)' V1y='(y1)' V1z='(z1)'
           V2x='(x2)' V2y='(y2)' V2z='(z2)' length='(length)' mat='(czmnum)' matname='(czmname)'></Plane>
           V2x='(x2)' V2y='(y2)' V2z='(z2)' length='(length)' mat='(czmnum)' matname='(czmname)'></Plane>
Line 24: Line 24:


<ul>
<ul>
<li><tt>(xn),(yn),(zn)</tt> - for n = 0, 1, and 2 defines three points and <tt>(kn)</tt> in scripted files are key point labels (which have to be unique). The defined crack will be parallelogram with edges along point 0 to 1 and along point 0 to 2.
<li><tt>(xn),(yn),(zn)</tt> - for n = 0, 1, and 2 defines three points and <tt>(kn)</tt> in scripted files are key point labels (which have to be unique). The defined crack will be planar parallelogram with edges along point 0 to 1 and along point 0 to 2. The fourth point is at the sum of these two vectors.
</li>
</li>


<li><tt>(length)</tt> - is preferred maximum length for facet edges. The parallelogram is divided into triangular facets with the maximum facet edge length given by this parameter. Typically this value should be smaller than a grid cell, such as half of a grid cell.
<li><tt>(length)</tt> - is preferred maximum length for final facet edges. The parallelogram is divided into triangular facets with the maximum facet edge length given by this parameter. Typically this value should be smaller than a grid cell, such as half of a grid cell.
</li>
</li>


<li><tt>(czmID)</tt> - is optional [[Traction Laws]]traction law material ID]] to add a traction law to the entire crack plane. Scripted files can use the material ID.
<li><tt>(czmID)</tt> (and <tt>(czmnum)</tt>) - is optional [[Traction Laws|traction law material ID]] to add a traction law to the entire crack plane. Scripted files can use the material ID. XML files specify an optional [[Traction Laws|traction law]] by number or name using <tt>(czmname)</tt>. If both are used, the name takes precedence.
</li>
</li>


<li><tt>(czmnum)</tt> or tt>(czmname)</tt> - in XML files, you specify an optional [[Traction Laws|traction law]] by number or name. If both are used, the name takes precedence.
<li><tt>(lawID)</tt> (and <tt>(lawnum)</tt>) - this parameter customizes this crack to use a different [[Contact Laws|contact law]] for modeling crack contact (''i.e.'', a different [[Contact Laws|contact law]] or [[Imperfect Interfaces#Imperfect Interfaces on Explicit Cracks|imperfect interface]] for this crack than the one selected by the [[Friction#Friction on Explicit Cracks|global <tt>ContactCracks</tt> command]]). In XML files, the custom [[Contact Laws|contact law]] can be specified by number or name (in <tt>(lawnum)</tt> or <tt>(lawname)</tt>). If both are used, the name takes precedence.
</li>
</li>


</ul>
</ul>
Line 41: Line 40:
== General 3D Crack Definition ==
== General 3D Crack Definition ==


In scripting software, 3D cracks created with
In scripted files, each arbitrary crack surface is constructed from a series of connected triangular facets. The defining commands are:


```
NewCrack (x),(y),(z),(id),<(lawID)>
  NewCrack x,y,z,id
CrackKeypoint (x),(y),(z),(id)
  CrackKeypoint x,y,z,id
    ...
      ...
CrackFacet (id1),(id2),(id3),(length),(czm)
  CrackFacet id1,id2,id3,length,czm
    ...
```


Whene `NewCrack` starts to crack (or starts another crack is one already active. The argments are coordinate of one point and a label (or id) for that point. A series of `CrackPoint` commands (with same arguments) creates all the crack mesh keypoints (id's must be unique). A series of `CrackFacet` commands links keypoints (by their ids) into a triangle. Length gets preferred maximum length for facet edge and czm is options traction law ID.
In XML files, each arbitrary crack is defined with one and only one <tt><Mesh></tt> block within a <tt><CrackList></tt> block:


<CrackList law='(lawnum)' lawname='(lawname)'>
  <Mesh>
    <NodeList>
      <pt x='(x)' y='(y)' z='(z)'/>
      <pt x='(x)' y='(y)' z='(z)'/>
        ...
    </NodeList>
    <ElementList>
      <elem type='1' length='(length)' czm='(czm)' czmname='(czmname)'>(nd1),(nd2),(nd3)</elem>
        ...
    </ElementList>
  </Mesh>
</CrackList>


Notes:
where the main crack setting is
 
# Meshing may deviate from preferred length to get better proportioned elements.
# Works best if facets are similar sized or to control resolution best, start with the largest ones.
# Works best if each new facet has two new edges. If needed, only one new edge is OK, but all edges preexisting is bad option (and never needed).
# The crack mesh must use all defined keypoints.
# No pair of keypoints can be connected more than twice (``i.e.``, two edges of two connected facets.
 
!!! 3D Crack Using a `Mesh` Element with Generated mesh options
 
You can also create cracks using a low-level method (a `Mesh` command) or a single command to create an initially planar crack in the shape of a parallelogram (a `Plane` command, see next section). Each `CrackList` can have one, and only one, of these commands. This `Mesh` creates a 3D crack using a single `Mesh` command within the `CrackList` command for one crack:
 
```
  <CrackList>
    <Mesh>
      <NodeList>
        <pt x='0' y='&yc;' z='0'/>
        <pt x='0' y='&yc;' z='&zt;'/>
        <pt x='1' y='&yc;' z='0'/>
        <pt x='1' y='&yc;' z='&zt;'/>
      </NodeList>
      <ElementList>
        <elem type='1' length='2' czm='id'>1,4,2</elem>
        <elem type='1'>1,3,4</elem>
      </ElementList>
    </Mesh>
  </CrackList>
```
 
The subordinate elements to the `Mesh` command define crack points on the crack surface (in the `NodeList` block) and connects those points with triangular elements (in the `ElementList` block). The three points in each `elem` command refer to three points by number in the `NodeList` (numbers are assigned automatically starting with 1).
 
if czm is provided it is traction law applied to each segment in the meshed area. In direct XML, czmname='name' can be used instead,
 
If length is provided, the edges of the element are divided up into more segments and the element is meshed into subelements as follows. First create edge objects by


# Searching for existing edges, use if found, but edge used a third time is an error
* (lawID)</tt> (and <tt>(lawnum)</tt>) - this parameter customizes this crack to use a different [[Contact Laws|contact law]] for modeling crack contact (''i.e.'', a different [[Contact Laws|contact law]] or [[Imperfect Interfaces#Imperfect Interfaces on Explicit Cracks|imperfect interface]] for this crack than the one selected by the [[Friction#Friction on Explicit Cracks|global <tt>ContactCracks</tt> command]]). In XML files, the custom [[Contact Laws|contact law]] can be specified by number or name (in <tt>(lawnum)</tt> or <tt>(lawname)</tt>). If both are used, the name takes precedence.
# Decide on number of intervals for new edges
#* Preferred number is int(length/segLength)+1. Perhaps add a preference to keep them all the same.
#* If all new- find the pair (0-1) or (1-2) that are close and match other to 0 or 1. My downgrade resolution of 0 is 1-2 pair is used.
#* If one was existing - match other two to it
#* If two existing - match new one to an existing edge. This case may not get all edges with the same number of inrtervalis
#* If three present look for two matching and use. If all differ an error. Note that can be fixed by defining triangles in order that does not surround any area.


New class for edge that will store start and end segment and sequence of interior segments. It will also count number of times the edge is used in the mesh
The subsequent commands for both scripted files and XML files define a collection of crack points or nodes on the crack surface with coordinates <tt>((x),(y),(z))</tt>. In scripted files, each key point is assigned an <tt>(id)</tt>, which can be any string. In XML files, key points are implicitly numbered by order in the <tt><NodeList></tt> block starting at 1.


Meshing:
Once the key points are defined, they are connected by triangular facets. Scripted files use CrackFacet commands where <tt>(id1),(id2),(id3)</tt> specify three key points using their IDs. XML files use <tt><elem></tt> commands where <tt>(nd1),(nd2),(nd3)</tt> specify three key points by number in the <tt><NodeList></tt> block. The two remaining parameters are:


# Create segments along any new edges
* <tt>(length)</tt> - the triangular facets defined above are subdivided into smaller triangular facets with maximum edge length given by this parameter. This length should be smaller than a grid cell, such as half a grid cell.
# Set segments of each edge as no in the crack and if czmID>0 set its traction law
* <tt>(czm)</tt> (or <tt>(czmname)</tt>) - all facets created can optionally be assigned a [[Traction Laws|traction law]]. Scripted files choose the law by material ID. In XML files, you specify an optional [[Traction Laws|traction law]] by number in <tt>(czm)</tt> or by name in <tt>(czmname)</tt>. If both are used, the name takes precedence.
# Start with edge having unique number of internal segments (or same if all the same), call it n. Let s be number of internal segments with equal intervals, then loop for i from 1 to s
#* Create n-i segments along line connect segment i of each edge
#* Create triangle strip of facets under that line, but if n-1<=0, just divide into two facets
# When done, if n-s>0, connect each one to tip of the triangle


When crack is done, throw an error if any crack points were not connected to the crack (because their index is needed)
Some notes on defining 3D cracks are as follows:


!!! Planar 3D Crack
# Crack meshes may deviate from the entered <tt>(length)</tt> to get better proportioned elements.
# Crack meshes work best if the facets used to create the crack are similarly sized. If different sizes are needed, it is best to start with the largest ones.
# The code to optimize cracks works best if each new facet has two new edges. If needed, a facet with only one new edge is allowed. Except for the first facet, added facets should never have three new edges; in other words, each added facet should be connected to one (or two) previous facets.
# The crack mesh must use all defined key points. An error occurs if any are left unused.
# No edge connecting two key points can be used in more than two facets (''i.e.'', an edge can only be shared by two facets).
# If a facet has a cohesive zone, all crack particles in that facet will be assigned to that cohesive zone. If one of the edges of that facet is shared with another facet, two possibilities arise:
## If the other facet does not have a cohesive zone, the crack particles on the shared edge will use the cohesive zone
## If two facets with different cohesive zones share an edge, the crack particles on the shared edge will used the cohesive zone assigned to the second facet with that edge.

Revision as of 14:42, 1 August 2022

3D cracks are currently in development and available only in OSParticulas. This page explains how to add them to 3D MPM simulations.

Introduction

3D cracks are defined by a collection of triangular facets. The corners and located using crack key points. The final crack surface can be an arbitrary 2D surface within an object and need not be a planar surface. Note that cracks are defined using large triangles (as large as possible depending on the crack surface). The NairnMPM code will subdivide each specified triangle into smaller triangular facets. Accurate modeling of 3D cracks typically needs the final facet size to be similar to the grid cell size (or smaller). The entire crack can use a custom contact law. Each definition facet can optionally add a traction law.

Planar Crack Definition

If the crack has a planar, parallelogram shape, you can define it with a few commands. In scripted files, the commands are:

NewCrack (x0),(y0),(z0),(k0),<(lawID)>
CrackKeypoint (x1),(y1),(z1),(k1)
CrackKeypoint (x2),(y2),(z2),(k2)
CrackPlane (k0),(k1),(k2),(length),(czmID)

In XML files, a parallelogram crack is defined with one command in a <CrackList> element:

<CrackList law='(lawnum)' lawname='(lawname)'>
  <Plane V0x='(x0)' V0y='(y0)' V0z='(z0)' V1x='(x1)' V1y='(y1)' V1z='(z1)'
         V2x='(x2)' V2y='(y2)' V2z='(z2)' length='(length)' mat='(czmnum)' matname='(czmname)'></Plane>
</CrackList>

where

  • (xn),(yn),(zn) - for n = 0, 1, and 2 defines three points and (kn) in scripted files are key point labels (which have to be unique). The defined crack will be planar parallelogram with edges along point 0 to 1 and along point 0 to 2. The fourth point is at the sum of these two vectors.
  • (length) - is preferred maximum length for final facet edges. The parallelogram is divided into triangular facets with the maximum facet edge length given by this parameter. Typically this value should be smaller than a grid cell, such as half of a grid cell.
  • (czmID) (and (czmnum)) - is optional traction law material ID to add a traction law to the entire crack plane. Scripted files can use the material ID. XML files specify an optional traction law by number or name using (czmname). If both are used, the name takes precedence.
  • (lawID) (and (lawnum)) - this parameter customizes this crack to use a different contact law for modeling crack contact (i.e., a different contact law or imperfect interface for this crack than the one selected by the global ContactCracks command). In XML files, the custom contact law can be specified by number or name (in (lawnum) or (lawname)). If both are used, the name takes precedence.

General 3D Crack Definition

In scripted files, each arbitrary crack surface is constructed from a series of connected triangular facets. The defining commands are:

NewCrack (x),(y),(z),(id),<(lawID)>
CrackKeypoint (x),(y),(z),(id)
   ...
CrackFacet (id1),(id2),(id3),(length),(czm)
   ...

In XML files, each arbitrary crack is defined with one and only one <Mesh> block within a <CrackList> block:

<CrackList law='(lawnum)' lawname='(lawname)'>
  <Mesh>
    <NodeList>
      <pt x='(x)' y='(y)' z='(z)'/>
      <pt x='(x)' y='(y)' z='(z)'/>
        ...
    </NodeList>
    <ElementList>
      <elem type='1' length='(length)' czm='(czm)' czmname='(czmname)'>(nd1),(nd2),(nd3)</elem>
        ...
    </ElementList>
  </Mesh>
</CrackList>

where the main crack setting is

The subsequent commands for both scripted files and XML files define a collection of crack points or nodes on the crack surface with coordinates ((x),(y),(z)). In scripted files, each key point is assigned an (id), which can be any string. In XML files, key points are implicitly numbered by order in the <NodeList> block starting at 1.

Once the key points are defined, they are connected by triangular facets. Scripted files use CrackFacet commands where (id1),(id2),(id3) specify three key points using their IDs. XML files use <elem> commands where (nd1),(nd2),(nd3) specify three key points by number in the <NodeList> block. The two remaining parameters are:

  • (length) - the triangular facets defined above are subdivided into smaller triangular facets with maximum edge length given by this parameter. This length should be smaller than a grid cell, such as half a grid cell.
  • (czm) (or (czmname)) - all facets created can optionally be assigned a traction law. Scripted files choose the law by material ID. In XML files, you specify an optional traction law by number in (czm) or by name in (czmname). If both are used, the name takes precedence.

Some notes on defining 3D cracks are as follows:

  1. Crack meshes may deviate from the entered (length) to get better proportioned elements.
  2. Crack meshes work best if the facets used to create the crack are similarly sized. If different sizes are needed, it is best to start with the largest ones.
  3. The code to optimize cracks works best if each new facet has two new edges. If needed, a facet with only one new edge is allowed. Except for the first facet, added facets should never have three new edges; in other words, each added facet should be connected to one (or two) previous facets.
  4. The crack mesh must use all defined key points. An error occurs if any are left unused.
  5. No edge connecting two key points can be used in more than two facets (i.e., an edge can only be shared by two facets).
  6. If a facet has a cohesive zone, all crack particles in that facet will be assigned to that cohesive zone. If one of the edges of that facet is shared with another facet, two possibilities arise:
    1. If the other facet does not have a cohesive zone, the crack particles on the shared edge will use the cohesive zone
    2. If two facets with different cohesive zones share an edge, the crack particles on the shared edge will used the cohesive zone assigned to the second facet with that edge.