initial upload

This commit is contained in:
2025-12-17 11:00:57 +08:00
parent 2bc7b24a71
commit a09a73537f
4614 changed files with 3478433 additions and 2 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@@ -0,0 +1,35 @@
# Image Gallery
Gallery written: Fri Aug 9 16:26:43 2019
Image Directory: /project/meshing/demos/Tutorial\_Hex\_Mesh/images
| | | |
| :---: | :---: | :---: |
| | | |
| **01\_hex\_01** | **02\_hex\_01\_top\_region** | **03\_hex\_01\_2surfs** |
| ![](gallery/01_hex_01.png)| ![](gallery/02_hex_01_top_region.png)| ![](gallery/03_hex_01_2surfs.png) |
| **03\_hex\_01\_2surfs\_b** | **03\_hex\_01\_set\_imt\_itetclr** | **03\_hex\_01\_set\_imt\_itetclr\_threshold\_remove\_material3** |
| ![](gallery/03_hex_01_2surfs_b.png)| ![](gallery/03_hex_01_set_imt_itetclr.png)| ![](gallery/03_hex_01_set_imt_itetclr_threshold_remove_material3.png) |
| **05\_hex\_01\_fault\_imt\_itetclr** | **06\_boundary\_truncate** | **07\_boundary\_truncate\_fence** |
| ![](gallery/05_hex_01_fault_imt_itetclr.png)| ![](gallery/06_boundary_truncate.png)| ![](gallery/07_boundary_truncate_fence.png) |
| **08\_truncate\_set\_id** | **09\_truncate\_set\_id\_close\_up** | **10\_hex\_01\_truncate\_close\_up** |
| ![](gallery/08_truncate_set_id.png)| ![](gallery/09_truncate_set_id_close_up.png)| ![](gallery/10_hex_01_truncate_close_up.png) |
| **11\_hex\_01\_truncate** | **12\_hex\_01\_truncate\_w\_grid** | **13\_hex\_01\_fault\_refine** |
| ![](gallery/11_hex_01_truncate.png)| ![](gallery/12_hex_01_truncate_w_grid.png)| ![](gallery/13_hex_01_fault_refine.png) |
| **14\_hex\_01\_fault\_refine\_close\_up** | **15\_hex\_01\_insert\_wells** | **16\_hex\_01\_insert\_wells\_close\_up** |
| ![](gallery/14_hex_01_fault_refine_close_up.png)| ![](gallery/15_hex_01_insert_wells.png)| ![](gallery/16_hex_01_insert_wells_close_up.png) |
| **17\_hex\_01\_insert\_wells\_outline** | **18\_hex\_01\_insert\_wells\_dfield\_wells** | **19\_hex\_01\_to\_tet** |
| ![](gallery/17_hex_01_insert_wells_outline.png)| ![](gallery/18_hex_01_insert_wells_dfield_wells.png)| ![](gallery/19_hex_01_to_tet.png) |
| **21\_tet\_01\_exo\_blocks** | **21\_tet\_01\_exo\_blocks\_ex** | **21\_tet\_01\_exo\_bndry\_faces** |
| ![](gallery/21_tet_01_exo_blocks.png)| ![](gallery/21_tet_01_exo_blocks_ex.png)| ![](gallery/21_tet_01_exo_bndry_faces.png) |
| **21\_tet\_01\_fehm\_node\_zone\_rad16** | **21\_tet\_01\_fehm\_node\_zone\_top** | **21\_tet\_01\_fehm\_nodes** |
| ![](gallery/21_tet_01_fehm_node_zone_rad16.png)| ![](gallery/21_tet_01_fehm_node_zone_top.png)| ![](gallery/21_tet_01_fehm_nodes.png) |
| **21\_tet\_01\_fehm\_tet\_a** | **21\_tet\_01\_fehm\_vor\_a** | **21\_tet\_01\_fehm\_vor\_tet\_a** |
| ![](gallery/21_tet_01_fehm_tet_a.png)| ![](gallery/21_tet_01_fehm_vor_a.png)| ![](gallery/21_tet_01_fehm_vor_tet_a.png) |
| **21\_tet\_01\_fehm\_voronoi** | **21\_tet\_01\_fehm\_voronoi\_a** |
| ![](gallery/21_tet_01_fehm_voronoi.png)| ![](gallery/21_tet_01_fehm_voronoi_a.png) |
End Gallery

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@@ -0,0 +1,49 @@
<ul class="uk-breadcrumb">
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials &amp; Examples</a></li>
<li><span>Stratigraphic Hex Mesh Tutorial</span></li>
</ul>
<div class="uk-inline">
<img src="{{ "/pages/tutorial/stratigraphy/images/19_hex_01_to_tet.png" | relative_url }}" alt="">
<div class="uk-overlay uk-light uk-position-bottom">
<h2 id="strat-index" class="uk-h3 uk-margin-remove">Stratigraphic Hex Mesh Tutorial</h2>
</div>
</div>
<a href="{{ "/pages/tutorial/stratigraphy/Tutorial_Hex_Mesh.zip" | relative_url }}" class="uk-button uk-button-primary tm-button-default uk-icon">
Download Resources (7.5 MB)
<span uk-icon="download"></span>
</a>
<div uk-alert>
In this tutorial, we will be constructing a complex geostratigraphic mesh with a fault, distinct subsurface layering and multiple wells.
The goal of this tutorial is to introduce the reader to intermediate and advanced LaGriT topics, including refinement, truncation, point-sets, element-sets and more.
</div>
<ul class="uk-pagination">
<li class="uk-margin-auto-left"><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}">Next <span class="uk-margin-small-left" uk-pagination-next></span></a></li>
</ul>
<div class="tm-sidebar-right uk-visible@l">
<div uk-sticky="offset: 160" class="uk-sticky uk-active uk-sticky-fixed" style="position: fixed; top: 160px; width: 200px;">
<ul uk-scrollspy-nav="closest: li; scroll: true; offset: 100" class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
<li class="uk-active"><a href="#strat-index">Index</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}">1. Building a Hex Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}">2. Define Boundaries Using Point Sets</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}">3. Constructing Stratigraphy</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}">4. Map Surfaces to Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}">5. Constructing a Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}">6. Truncate with Polyline</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}">7. Refine Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}">8. Insert Well</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}">9. Convert Hex Mesh to Tet</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}">10.1 Write FEHM Files</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_exo.html" | relative_url }}">10.2 Write ExodusII Files</a></li>
<li class="uk-nav-divider"></li>
<!---->
<li><a href="{{ "/pages/tutorial/stratigraphy/images/gallery.html" | relative_url }}" target="_blank"><span uk-icon="icon: image" class="uk-margin-small-right uk-icon"></span> <span class="uk-text-middle">Image Gallery</span></a></li>
<li><a href="https://github.com/lanl/LaGriT/issues" target="_blank"><span uk-icon="icon: warning" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="warning"><circle cx="10" cy="14" r="1"></circle><circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle><path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z"></path></svg></span> <span class="uk-text-middle">Report issue</span></a></li>
<li><a href="mailto:lagrit-dev@lanl.gov" target="_blank"><span uk-icon="icon: commenting" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="commenting"><polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5"></polygon><circle cx="10" cy="8" r="1"></circle><circle cx="6" cy="8" r="1"></circle><circle cx="14" cy="8" r="1"></circle></svg></span> <span class="uk-text-middle">Get help</span></a></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,105 @@
<!-- Begin breadcrumb -->
<ul class="uk-breadcrumb">
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials &amp; Examples</a></li>
<li><span>Stratigraphic Hex Mesh Tutorial</span></li>
</ul>
<!-- End breadcrumb -->
<!-- Begin image -->
<img data-src="{{ "/pages/tutorial/stratigraphy/images/01_hex_01.png" | relative_url }}" width="639" height="525" alt="" uk-img>
<br/>
<!-- End image -->
<h2 id="build-hex" class="uk-h3 uk-margin-remove">1. Building a Hex Mesh</h2>
First, we are going to construct a structured hex mesh. The hex mesh will span
from 0 meters to 4000 m, 4000 m, and 3000 m, for the x/y/z coordinates
respectively.
For both consistency and rapid parameter manipulation, these can be stored in
variables. In LaGriT, variables are assigned using the `define` keyword.
```
define / X0 / 0.
define / X1 / 4000.
define / Y0 / 0.
define / Y1 / 4000.
define / Z0 / 0.
define / Z1 / 3000.
define / NX / 51
define / NY / 51
define / NZ / 26
define / MONAME / mohex
```
Above, the spatial domain (`X0,X1,Y0,...`), element density (`NX/NY/NZ`), and
mesh name (`MONAME`) have been defined.
Next, we will create an empty mesh object, with element type `hex`, using the
[`cmo / create`](../../docs/commands/cmo/cmo_create.md) command:
```
cmo / create / MONAME / / / hex
```
Due to the variable assignment of `MONAME <- mohex` above, this command is
translated internally as:
```
cmo / create / mohex / / / hex
```
This empty object can then be populated with nodes and elements.
The [`createpts / brick`](../../docs/commands/createpts/CRTPTBRICK.md) command will generate a defined number of
hex elements across a defined domain.
```
createpts / brick / xyz / NX NY NZ / X0 Y0 Z0 / X1 Y1 Z1 / 1 1 1
```
`NX` number of hex elements, along with their corresponding vertices, have been
created in the spatial domain spanning `X0->X1`, along with `NY` elements in
the Y domain and `NZ` elements in the Z domain.
Optionally, [save the mesh object](../../docs/commands/DUMP2.md):
```
dump / avs / tmp_hex_01.inp / MONAME
```
This file can be rendered in certain scientific 3D visualization applications,
such as [ParaView](https://www.paraview.org).
<!-- Page left / right -->
<ul class="uk-pagination">
<li><a href="{{ "/pages/tutorial/stratigraphy/index.html" | relative_url }}"><span class="uk-margin-small-right" uk-pagination-previous></span> Previous</a></li>
<li class="uk-margin-auto-left"><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}">Next <span class="uk-margin-small-left" uk-pagination-next></span></a></li>
</ul>
<!-- Sidebar -->
<div class="tm-sidebar-right uk-visible@l">
<div uk-sticky="offset: 160" class="uk-sticky uk-active uk-sticky-fixed" style="position: fixed; top: 160px; width: 200px;">
<ul uk-scrollspy-nav="closest: li; scroll: true; offset: 100" class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/index.html" | relative_url }}">Index</a></li>
<li class="uk-active"><a href="#build-hex">1. Building a Hex Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}">2. Define Boundaries Using Point Sets</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}">3. Constructing Stratigraphy</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}">4. Map Surfaces to Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}">5. Constructing a Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}">6. Truncate with Polyline</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}">7. Refine Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}">8. Insert Wells</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}">9. Convert Hex Mesh to Tet</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}">10.1 Write FEHM Files</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_exo.html" | relative_url }}">10.2 Write ExodusII Files</a></li>
<li class="uk-nav-divider"></li>
<!---->
<li><a href="{{ "/pages/tutorial/stratigraphy/images/gallery.html" | relative_url }}" target="_blank"><span uk-icon="icon: image" class="uk-margin-small-right uk-icon"></span> <span class="uk-text-middle">Image Gallery</span></a></li>
<li><a href="https://github.com/lanl/LaGriT/issues" target="_blank"><span uk-icon="icon: warning" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="warning"><circle cx="10" cy="14" r="1"></circle><circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle><path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z"></path></svg></span> <span class="uk-text-middle">Report issue</span></a></li>
<li><a href="mailto:lagrit-dev@lanl.gov" target="_blank"><span uk-icon="icon: commenting" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="commenting"><polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5"></polygon><circle cx="10" cy="8" r="1"></circle><circle cx="6" cy="8" r="1"></circle><circle cx="14" cy="8" r="1"></circle></svg></span> <span class="uk-text-middle">Get help</span></a></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,179 @@
<!-- Begin breadcrumb -->
<ul class="uk-breadcrumb">
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials &amp; Examples</a></li>
<li><span>Stratigraphic Hex Mesh Tutorial</span></li>
</ul>
<!-- End breadcrumb -->
<!-- Begin image -->
<img data-src="{{ "/pages/tutorial/stratigraphy/images/02_hex_01_top_region.png" | relative_url }}" width="639" height="525" alt="" uk-img>
<br/>
<!-- End image -->
<h2 id="psets" class="uk-h3 uk-margin-remove">2. Define Boundaries Using Point Sets</h2>
In LaGriT, a pset (or *point-set*) is a collection of points (nodes) within a
mesh object. Similarly, an eltset (*element-set*) is a collection of mesh
elements. By capturing points and elements, discrete manipulations can be
performed on them, such as translation, removal, or attribute functions.
In this example, point sets are used to create a boundary on the top surface of
the created hex mesh. The boundary will be the intersection of three circles on
the top layer of the mesh.
```
# Set vertices (imt) and cells (itetlcr) to 1
cmo / setatt / mohex / imt / 1 0 0 / 1
cmo / setatt / mohex / itetclr / 1 0 0 / 1
resetpts / itp
```
Capturing a `pset` is done through the command
```
pset / pset_name / select_type / select_type_options
```
where `pset_name` is an arbitrary variable name to store the pset into,
`select_type` is the method of pset selection, and `select_type_options` are
parameters specific to the chosen `select_type` for configuring the subset
selection (see the [documentation](../../docs/commands/PSET.md) for more information).
### 2.1 PSet Definitions
As the boundary will live only in the top layer, nodes belonging to the top
layer will be identified first.
```
pset / p_top / attribute / zic / 1 0 0 / ge / Z1
```
Here, a pset named `p_top` is created. This pset contains all nodes
(stride = `1 0 0`) where the node's Z value (`zic`) is greater than or equal to
(`ge`) the top of the mesh (`Z1`). Remember that we defined `Z1` above for the
initial creation of the mesh - and that by simply changing `Z1` and re-running
the script, this pset capture will still be valid for any value of `Z1`
(where `Z1 > Z0`).
Now that the top is defined, we will move to defining three cylindrical
objects.
This is done through the command
```
pset / pset_name / geom / rtz / ifirst,ilast,istride / r1,t1,z1 / r2,t2,z2 / xcen,ycen,zcen
```
which forms a pset of nodes within the cylinder or cylindrical shell given by
radius r1 to r2, angle theta t1 to t2 and height z1 to z2.
```
pset / p_circle1 / geom / rtz / 1 0 0 / 0. 0. -1.0 / &
1100. 360. 1.e4 / 1500. 1500. 0.
pset / p_circle2 / geom / rtz / 1 0 0 / 0. 0. -1.0 / &
1100. 360. 1.e4 / 2500. 2500. 0.
pset / p_circle3 / geom / rtz / 1 0 0 / 0. 0. -1.0 / &
1100. 360. 1.e4 / 2500. 1500. 0.
```
Above, any points within a full circle (theta = `360`) of radius `1100.` and
within `Z={-1.0,1.e4}` are captured. Three different cylinders are created,
where only the centroids change.
Finally, all four psets are intersected such that all points belonging to the
union of all given sets are preserved into the point seet `p_region`:
```
pset / p_region / inter / p_top p_circle1 p_circle2 p_circle3
```
This creates a point-set where all points (i) live on the top layer, and (ii)
live within the intersection of the three cylinders.
### 2.2 Map PSets to an Attribute
As a simple sanity check during meshing, it can be helpful to map mesh
operations to an attribute. These can be visualized at intermediate steps in
the meshing process to provide a form of verification or debugging.
First, create an attribute using the `cmo / addatt` command:
```
cmo / addatt / MONAME / id_top_region / vint / scalar / nnodes
```
Here, an attribute named `id_top_region` is created within the mesh `MONAME`,
and has type integer (`vint`), is of scalar dimensions, and is a node-based
attribute (`nnodes`).
The attribute can be progressively filled in with different values based on
the psets:
```
# Fill the entire attribute with 1
cmo / setatt / MONAME / id_top_region / 1 0 0 / 1
# Color all nodes in the pset p_circle1 with the value 2
cmo / setatt / MONAME / id_top_region / pset get p_circle1 / 2
# Color all nodes in the pset p_circle2 with the value 2
cmo / setatt / MONAME / id_top_region / pset get p_circle2 / 3
# And so on...
cmo / setatt / MONAME / id_top_region / pset get p_circle3 / 4
cmo / setatt / MONAME / id_top_region / pset get p_region / 5
```
Finally, release the psets from memory:
```
pset / p_top / release
pset / p_circle1 / release
pset / p_circle2 / release
pset / p_circle3 / release
pset / p_region / release
```
Cutting through the mesh in ParaView, we can visualize `id_top_region` and
validate that the mesh is being constructed as expected:
<!-- Lightbox image -->
<div class="uk-child-width-1-2@m" uk-grid uk-lightbox="animation: slide">
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/ch2_transparent_cbar.png" | relative_url }}" data-caption="Visualization of id_top_region">
<img src="{{ "/pages/tutorial/stratigraphy/images/ch2_transparent_cbar.png" | relative_url }}" alt="">
</a>
</div>
</div>
<!-- Next / Prev -->
<ul class="uk-pagination">
<li><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}"><span class="uk-margin-small-right" uk-pagination-previous></span> Previous</a></li>
<li class="uk-margin-auto-left"><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}">Next <span class="uk-margin-small-left" uk-pagination-next></span></a></li>
</ul>
<!-- Sidebar -->
<div class="tm-sidebar-right uk-visible@l">
<div uk-sticky="offset: 160" class="uk-sticky uk-active uk-sticky-fixed" style="position: fixed; top: 160px; width: 200px;">
<ul uk-scrollspy-nav="closest: li; scroll: true; offset: 100" class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/index.html" | relative_url }}">Index</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}">1. Building a Hex Mesh</a></li>
<li class="uk-active"><a href="#psets">2. Define Boundaries Using Point Sets</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}">3. Constructing Stratigraphy</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}">4. Map Surfaces to Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}">5. Constructing a Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}">6. Truncate with Polyline</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}">7. Refine Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}">8. Insert Wells</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}">9. Convert Hex Mesh to Tet</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}">10.1 Write FEHM Files</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_exo.html" | relative_url }}">10.2 Write ExodusII Files</a></li>
<li class="uk-nav-divider"></li>
<!---->
<li><a href="{{ "/pages/tutorial/stratigraphy/images/gallery.html" | relative_url }}" target="_blank"><span uk-icon="icon: image" class="uk-margin-small-right uk-icon"></span> <span class="uk-text-middle">Image Gallery</span></a></li>
<li><a href="https://github.com/lanl/LaGriT/issues" target="_blank"><span uk-icon="icon: warning" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="warning"><circle cx="10" cy="14" r="1"></circle><circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle><path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z"></path></svg></span> <span class="uk-text-middle">Report issue</span></a></li>
<li><a href="mailto:lagrit-dev@lanl.gov" target="_blank"><span uk-icon="icon: commenting" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="commenting"><polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5"></polygon><circle cx="10" cy="8" r="1"></circle><circle cx="6" cy="8" r="1"></circle><circle cx="14" cy="8" r="1"></circle></svg></span> <span class="uk-text-middle">Get help</span></a></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,94 @@
<!-- Begin breadcrumb -->
<ul class="uk-breadcrumb">
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials &amp; Examples</a></li>
<li><span>Stratigraphic Hex Mesh Tutorial</span></li>
</ul>
<!-- End breadcrumb -->
<!-- Begin image -->
<img data-src="{{ "/pages/tutorial/stratigraphy/images/03_hex_01_2surfs_b.png" | relative_url }}" width="639" height="525" alt="" uk-img>
<br/>
<!-- End image -->
<h2 id="const-stratigraphy" class="uk-h3 uk-margin-remove">3. Constructing Stratigraphy</h2>
In the next step of this tutorial, we will build some surfaces to define
stratigraphy.
In a real model, the surfaces would come from some geologic framework model
and would define geologic or hydro-geologic horizons and topography.
These surfaces will be planar quad meshes that cut through a defined section of
the hex mesh. Later, we will map the intersections of the surfaces to the hex
mesh.
#### Create the top surface:
```
cmo / create / mosurf1
cmo / select / mosurf1
define / X0S / -20.0
define / X1S / 4020.0
define / Y0S / -20.0
define / Y1S / 4020.0
define / Z1 / 1000.
define / Z2 / 1500.
define / Z3 / 2500.
define / Z4 / 500.
quadxy / NX NY /X0S Y0S Z1/X1S Y0S Z2/X1S Y1S Z3/X0S Y1S Z4
createpts/brick/xyz/ NX NY 1 /1,0,0/connect
```
Note that the X and Y domains of the quad mesh exceed that of the hex mesh.
This serves two purposes. First, it serves as a helpful visualization aid,
allowing one to easily see how the surfaces cut the hex mesh without adjusting
opacity. Second, and more importantly, it ensures that all elements cut by the
surfaces will be properly recognized as such. Rounding errors may affect
elements at the perimeter of the cutting planes from being properly labeled.
#### Create the bottom surface:
```
cmo / create / mosurf2
cmo / select / mosurf2
define / Z1 / 1800.
define / Z2 / 2100.
define / Z3 / 2800.
define / Z4 / 800.
quadxy / NX NY /X0S Y0S Z1/X1S Y0S Z2/X1S Y1S Z3/X0S Y1S Z4
createpts/brick/xyz/ NX NY 1 /1,0,0/connect
```
<!-- Next / Prev -->
<ul class="uk-pagination">
<li><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}"><span class="uk-margin-small-right" uk-pagination-previous></span> Previous</a></li>
<li class="uk-margin-auto-left"><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}">Next <span class="uk-margin-small-left" uk-pagination-next></span></a></li>
</ul>
<!-- Sidebar -->
<div class="tm-sidebar-right uk-visible@l">
<div uk-sticky="offset: 160" class="uk-sticky uk-active uk-sticky-fixed" style="position: fixed; top: 160px; width: 200px;">
<ul uk-scrollspy-nav="closest: li; scroll: true; offset: 100" class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/index.html" | relative_url }}">Index</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}">1. Building a Hex Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}">2. Define Boundaries Using Point Sets</a></li>
<li class="uk-active"><a href="#const-stratigraphy">3. Constructing Stratigraphy</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}">4. Map Surfaces to Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}">5. Constructing a Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}">6. Truncate with Polyline</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}">7. Refine Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}">8. Insert Wells</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}">9. Convert Hex Mesh to Tet</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}">10.1 Write FEHM Files</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_exo.html" | relative_url }}">10.2 Write ExodusII Files</a></li>
<li class="uk-nav-divider"></li>
<!---->
<li><a href="{{ "/pages/tutorial/stratigraphy/images/gallery.html" | relative_url }}" target="_blank"><span uk-icon="icon: image" class="uk-margin-small-right uk-icon"></span> <span class="uk-text-middle">Image Gallery</span></a></li>
<li><a href="https://github.com/lanl/LaGriT/issues" target="_blank"><span uk-icon="icon: warning" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="warning"><circle cx="10" cy="14" r="1"></circle><circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle><path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z"></path></svg></span> <span class="uk-text-middle">Report issue</span></a></li>
<li><a href="mailto:lagrit-dev@lanl.gov" target="_blank"><span uk-icon="icon: commenting" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="commenting"><polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5"></polygon><circle cx="10" cy="8" r="1"></circle><circle cx="6" cy="8" r="1"></circle><circle cx="14" cy="8" r="1"></circle></svg></span> <span class="uk-text-middle">Get help</span></a></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,162 @@
<!-- Begin breadcrumb -->
<ul class="uk-breadcrumb">
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials &amp; Examples</a></li>
<li><span>Stratigraphic Hex Mesh Tutorial</span></li>
</ul>
<!-- End breadcrumb -->
<!-- Begin image slideshow -->
<div class="uk-position-relative uk-visible-toggle uk-light" tabindex="-1" uk-slideshow>
<ul class="uk-slideshow-items">
<li>
<img data-src="{{ "/pages/tutorial/stratigraphy/images/03_hex_01_set_imt_itetclr.png" | relative_url }}" width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
<li>
<img data-src="{{ "/pages/tutorial/stratigraphy/images/03_hex_01_set_imt_itetclr_threshold_remove_material3.png" | relative_url }}" width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
</ul>
<a class="uk-position-center-left uk-position-small uk-hidden-hover" href="#" uk-slidenav-previous uk-slideshow-item="previous"></a>
<a class="uk-position-center-right uk-position-small uk-hidden-hover" href="#" uk-slidenav-next uk-slideshow-item="next"></a>
</div>
<!-- End image slideshow -->
<br/>
<h2 id="map-surfaces-to-mesh" class="uk-h3 uk-margin-remove">4. Map Surfaces to Mesh</h2>
Now that the straitipgrahy has been modeled and we are comfortable with our
results, we will map their spanning domain to the parent mesh. As done with the
psets above, this process will be driven via attributes.
We now have two planes spanning the X,Y domain of the mesh. These planes can be
leveraged to create different material IDs at different regions of the
subsurface.
For example,
* For all nodes/cells above plane 1, set their material ID to 1
* For all nodes/cells between plane 1 and plane 2, set their material ID to 2
* For all nodes/cells below plane 2, set their material ID to 3
This process can be accomplished by:
1. Defining the above regions using the `region` keyword
2. Capturing the relevant nodes and elements that fall within the defined regions
3. Setting the node and element material IDs based on the `psets` and `eltsets`
### 4.1 Defining Regions
The syntax for `region` is:
region / region_name / region_definition
where `region_definition` is a string composed of boolean operators and
instantiated `surface` objects.
Recall that we have defined two planes, `mosurf1` and `mosurf2`. We would like
to generate the `region` objects from these planes, but the arguments for
`region` require `surface` objects.
Fortunately, we can map the planes to a `surface` very easily. The syntax for
generating a `surface` object from a quad or triangle mesh is:
surface / surface_name / reflect / sheet / input_mesh
The two planes can then be mapped to surface objects:
```
surface / s_1 / reflect / sheet / mosurf1
surface / s_2 / reflect / sheet / mosurf2
```
And finally, we can remove the plane meshes and define regions:
```
cmo / delete / mosurf1
cmo / delete / mosurf2
cmo / select / MONAME
region / r_1 / le s_1
region / r_2 / gt s_1 and le s_2
region / r_3 / gt s_2
```
### 4.2 Creating Eltsets and PSets from Regions
Point sets and element sets can easily be created through region objects.
The syntax is:
pset / pset_name / region / region_object / 1,0,0
eltset / eltset_name / region / region_object
Applying this to our `region` objects yields:
```
pset / p_r_1 / region / r_1 / 1 0 0
pset / p_r_2 / region / r_2 / 1 0 0
pset / p_r_3 / region / r_3 / 1 0 0
eltset / e_r_1 / region / r_1
eltset / e_r_2 / region / r_2
eltset / e_r_3 / region / r_3
```
### 4.3 Setting Attributes from Eltsets and PSets
Recall that the node attribute `imt` holds the 'node colors' of the mesh, and
cell attribute `itetclr` stores the 'cell colors' (or material ID).
Let's use the defined `pset`s and `eltset`s to change these:
```
cmo / setatt / MONAME / imt / pset get p_r_1 / 1
cmo / setatt / MONAME / imt / pset get p_r_2 / 2
cmo / setatt / MONAME / imt / pset get p_r_3 / 3
cmo / setatt / MONAME / itetclr / eltset get e_r_1 / 1
cmo / setatt / MONAME / itetclr / eltset get e_r_2 / 2
cmo / setatt / MONAME / itetclr / eltset get e_r_3 / 3
```
Our mesh's cells and nodes now store information about their intersections
with the cut-planes. Visualizing `itetclr`, we can see that this has behaved
as expected:
<!-- Lightbox image -->
<div class="uk-child-width-1-2@m" uk-grid uk-lightbox="animation: slide">
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/ch4.png" | relative_url }}" data-caption="Visualization of materialID">
<img src="{{ "/pages/tutorial/stratigraphy/images/ch4.png" | relative_url }}" alt="">
</a>
</div>
</div>
<!-- Next / Prev -->
<ul class="uk-pagination">
<li><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}"><span class="uk-margin-small-right" uk-pagination-previous></span> Previous</a></li>
<li class="uk-margin-auto-left"><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}">Next <span class="uk-margin-small-left" uk-pagination-next></span></a></li>
</ul>
<!-- Sidebar -->
<div class="tm-sidebar-right uk-visible@l">
<div uk-sticky="offset: 160" class="uk-sticky uk-active uk-sticky-fixed" style="position: fixed; top: 160px; width: 200px;">
<ul uk-scrollspy-nav="closest: li; scroll: true; offset: 100" class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/index.html" | relative_url }}">Index</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}">1. Building a Hex Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}">2. Define Boundaries Using Point Sets</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}">3. Constructing Stratigraphy</a></li>
<li class="uk-active"><a href="#map-surfaces-to-mesh">4. Map Surfaces to Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}">5. Constructing a Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}">6. Truncate with Polyline</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}">7. Refine Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}">8. Insert Wells</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}">9. Convert Hex Mesh to Tet</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}">10.1 Write FEHM Files</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_exo.html" | relative_url }}">10.2 Write ExodusII Files</a></li>
<li class="uk-nav-divider"></li>
<!---->
<li><a href="{{ "/pages/tutorial/stratigraphy/images/gallery.html" | relative_url }}" target="_blank"><span uk-icon="icon: image" class="uk-margin-small-right uk-icon"></span> <span class="uk-text-middle">Image Gallery</span></a></li>
<li><a href="https://github.com/lanl/LaGriT/issues" target="_blank"><span uk-icon="icon: warning" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="warning"><circle cx="10" cy="14" r="1"></circle><circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle><path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z"></path></svg></span> <span class="uk-text-middle">Report issue</span></a></li>
<li><a href="mailto:lagrit-dev@lanl.gov" target="_blank"><span uk-icon="icon: commenting" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="commenting"><polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5"></polygon><circle cx="10" cy="8" r="1"></circle><circle cx="6" cy="8" r="1"></circle><circle cx="14" cy="8" r="1"></circle></svg></span> <span class="uk-text-middle">Get help</span></a></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,186 @@
<!-- Begin breadcrumb -->
<ul class="uk-breadcrumb">
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials &amp; Examples</a></li>
<li><span>Stratigraphic Hex Mesh Tutorial</span></li>
</ul>
<!-- End breadcrumb -->
<!-- Begin image slideshow -->
<div class="uk-position-relative uk-visible-toggle uk-light" tabindex="-1" uk-slideshow>
<ul class="uk-slideshow-items">
<li>
<img data-src="{{ "/pages/tutorial/stratigraphy/images/05_hex_01_fault_imt_itetclr.png" | relative_url }}" width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
</ul>
</div>
<!-- End image slideshow -->
<br/>
<h2 id="constructing-a-fault" class="uk-h3 uk-margin-remove">5. Constructing a Fault and Layers</h2>
### 5.1 Creating a Fault and Subsurface Layers
Next, we are going to map a fault and surfaces to our mesh. The objects created
will be:
<!-- Lightbox image -->
<div class="uk-child-width-1-2@m" uk-grid uk-lightbox="animation: slide">
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/05_fault_objects.png" | relative_url }}" data-caption="Fault and layer surfaces">
<img src="{{ "/pages/tutorial/stratigraphy/images/05_fault_objects.png" | relative_url }}" alt="">
</a>
</div>
</div>
For all five of these surfaces, we will:
1. Define the X,Y,Z extent
2. Use `quadxy` to generate the point distribution
3. Connect the points into a quad mesh using `createpts/brick`.
For the main fault mesh, this process looks like:
```
cmo / create / mosurf_fault
cmo / select / mosurf_fault
define / X0S / -20.0
define / X1S / 4020.0
define / Y0S / -20.0
define / Y1S / 4020.0
define / Z1 / -1.e4
define / Z2 / -1.e4
define / Z3 / 1.e4
define / Z4 / 1.e4
quadxy / NX NY /X0S Y0S Z1/X1S Y0S Z2/X1S Y1S Z3/X0S Y1S Z4
createpts/brick/xyz/ NX NY 1 /1,0,0/connect
cmo / printatt / mosurf / -xyz- / minmax
```
For the remaining four surfaces this process is repeated, with `Z1,Z2,Z3,Z4`
altered independently.
The created surfaces have the names `mosurf1_fminus`, `mosurf2_fminus`,
`mosurf1_fplus`, `mosurf2_fplus`, and `mosurf_fault`.
### 5.2 Define Geometry of Hydrostratigraphic Model
Recall in step 4 how we used two surface meshes to alter `imt` and `itetclr`
values: first, by defining `surfaces` from the planar meshes; second, using the
`surface` objects to define `region` objects; third, creating `psets` and
`eltsets` from the `regions`; and finally, by modifying `itetclr` and `imt`
through the defined `psets` and `eltsets`.
This process is replicated here. First, by creating the `surfaces`:
```
surface / s_1_fm / reflect / sheet / mosurf1_fminus
surface / s_2_fm / reflect / sheet / mosurf2_fminus
surface / s_1_fp / reflect / sheet / mosurf1_fplus
surface / s_2_fp / reflect / sheet / mosurf2_fplus
surface / s_f / reflect / sheet / mosurf_fault
```
Then, by mapping the surfaces to regions (and deleting the planar meshes to
free up memory):
```
region / r_1_fm / le s_1_fm and le s_f
region / r_2_fm / gt s_1_fm and le s_2_fm and le s_f
region / r_3_fm / gt s_2_fm and le s_f
region / r_1_fp / le s_1_fp and gt s_f
region / r_2_fp / gt s_1_fp and le s_2_fp and gt s_f
region / r_3_fp / gt s_2_fp and gt s_f
cmo / delete / mosurf1_fminus
cmo / delete / mosurf2_fminus
cmo / delete / mosurf1_fplus
cmo / delete / mosurf2_fplus
cmo / delete / mosurf_fault
```
And finally, by creating `psets` and `eltsets` and using them to modify material
attributes of the parent mesh:
```
pset / p_r_1_fm / region / r_1_fm / 1 0 0
pset / p_r_2_fm / region / r_2_fm / 1 0 0
pset / p_r_3_fm / region / r_3_fm / 1 0 0
pset / p_r_1_fp / region / r_1_fp / 1 0 0
pset / p_r_2_fp / region / r_2_fp / 1 0 0
pset / p_r_3_fp / region / r_3_fp / 1 0 0
eltset / e_r_1_fm / region / r_1_fm
eltset / e_r_2_fm / region / r_2_fm
eltset / e_r_3_fm / region / r_3_fm
eltset / e_r_1_fp / region / r_1_fp
eltset / e_r_2_fp / region / r_2_fp
eltset / e_r_3_fp / region / r_3_fp
cmo / setatt / MONAME / imt / 1 0 0 / 7
cmo / setatt / MONAME / itetclr / 1 0 0 / 7
cmo / setatt / MONAME / imt / pset get p_r_1_fm / 1
cmo / setatt / MONAME / imt / pset get p_r_2_fm / 2
cmo / setatt / MONAME / imt / pset get p_r_3_fm / 3
cmo / setatt / MONAME / imt / pset get p_r_1_fp / 4
cmo / setatt / MONAME / imt / pset get p_r_2_fp / 5
cmo / setatt / MONAME / imt / pset get p_r_3_fp / 6
cmo / setatt / MONAME / itetclr / eltset get e_r_1_fm / 1
cmo / setatt / MONAME / itetclr / eltset get e_r_2_fm / 2
cmo / setatt / MONAME / itetclr / eltset get e_r_3_fm / 3
cmo / setatt / MONAME / itetclr / eltset get e_r_1_fp / 4
cmo / setatt / MONAME / itetclr / eltset get e_r_2_fp / 5
cmo / setatt / MONAME / itetclr / eltset get e_r_3_fp / 6
```
The six distinct regions can now be seen by viewing `itetclr` on the
parent mesh:
<!-- Lightbox image -->
<div class="uk-child-width-1-2@m" uk-grid uk-lightbox="animation: slide">
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/05_hex_01_fault_imt_itetclr.png" | relative_url }}" data-caption="Visualizing the fault in relation to subsurface layers">
<img src="{{ "/pages/tutorial/stratigraphy/images/05_hex_01_fault_imt_itetclr.png" | relative_url }}" alt="">
</a>
</div>
</div>
<!-- Next / Prev -->
<ul class="uk-pagination">
<li><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}"><span class="uk-margin-small-right" uk-pagination-previous></span> Previous</a></li>
<li class="uk-margin-auto-left"><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}">Next <span class="uk-margin-small-left" uk-pagination-next></span></a></li>
</ul>
<!-- Sidebar -->
<div class="tm-sidebar-right uk-visible@l">
<div uk-sticky="offset: 160" class="uk-sticky uk-active uk-sticky-fixed" style="position: fixed; top: 160px; width: 200px;">
<ul uk-scrollspy-nav="closest: li; scroll: true; offset: 100" class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/index.html" | relative_url }}">Index</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}">1. Building a Hex Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}">2. Define Boundaries Using Point Sets</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}">3. Constructing Stratigraphy</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}">4. Map Surfaces to Mesh</a></li>
<li class="uk-active"><a href="#constructing-a-fault">5. Constructing a Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}">6. Truncate with Polyline</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}">7. Refine Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}">8. Insert Wells</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}">9. Convert Hex Mesh to Tet</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}">10.1 Write FEHM Files</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_exo.html" | relative_url }}">10.2 Write ExodusII Files</a></li>
<li class="uk-nav-divider"></li>
<!---->
<li><a href="{{ "/pages/tutorial/stratigraphy/images/gallery.html" | relative_url }}" target="_blank"><span uk-icon="icon: image" class="uk-margin-small-right uk-icon"></span> <span class="uk-text-middle">Image Gallery</span></a></li>
<li><a href="https://github.com/lanl/LaGriT/issues" target="_blank"><span uk-icon="icon: warning" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="warning"><circle cx="10" cy="14" r="1"></circle><circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle><path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z"></path></svg></span> <span class="uk-text-middle">Report issue</span></a></li>
<li><a href="mailto:lagrit-dev@lanl.gov" target="_blank"><span uk-icon="icon: commenting" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="commenting"><polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5"></polygon><circle cx="10" cy="8" r="1"></circle><circle cx="6" cy="8" r="1"></circle><circle cx="14" cy="8" r="1"></circle></svg></span> <span class="uk-text-middle">Get help</span></a></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,176 @@
<!-- Begin breadcrumb -->
<ul class="uk-breadcrumb">
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials &amp; Examples</a></li>
<li><span>Stratigraphic Hex Mesh Tutorial</span></li>
</ul>
<!-- End breadcrumb -->
<!-- Begin image slideshow -->
<div class="uk-position-relative uk-visible-toggle uk-light" tabindex="-1" uk-slideshow>
<ul class="uk-slideshow-items">
<li>
<img data-src="{{ "/pages/tutorial/stratigraphy/images/06_truncate_set_id.png" | relative_url }}" width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
<li>
<img data-src width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
<li>
<img data-src width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
<li>
<img data-src width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
</ul>
</div>
<!-- End image slideshow -->
<br/>
<h2 id="truncate-with-polyline" class="uk-h3 uk-margin-remove">6. Truncate with Polyline</h2>
### 6.1 Create boundary surface
We now have a mesh with complex stratigraphy encoded in its material ID.
However, the domain of this mesh is a rather boring cuboid and doesn't
accurately reflect the geospatial domain that we are trying to model.
By importing a polyline, the exterior boundary of the mesh can be truncated.
As in previous steps, we will use a mesh to define a `region` that will be used
for element-wise operations.
However, the boundary is a line object. In order to use it as a surface/region,
it must be a surface. A polyline can be turned into a vertical surface by
'extruding' it in the vertical (0,0,1) direction:
```
read / avs / basin_bnd_ply_rescale.inp / mo_bndry
extrude / mo_fence / mo_bndry / const / 3200. / volume / 0. 0. -1.
```
We will also translate the extrusion so that it covers the vertical extent
of the hex mesh:
```
trans / 1 0 0 / 0. 0. -3200. / 0. 0. 0.
```
<!-- Lightbox -->
<div class="uk-child-width-1-2@m" uk-grid uk-lightbox="animation: slide">
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/06_boundary_truncate.png" | relative_url }}" data-caption="Polyline boundary">
<img src="{{ "/pages/tutorial/stratigraphy/images/06_boundary_truncate.png" | relative_url }}" alt="">
</a>
</div>
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/06_boundary_truncate_fence.png" | relative_url }}" data-caption="Polyline boundary extruded">
<img src="{{ "/pages/tutorial/stratigraphy/images/06_boundary_truncate_fence.png" | relative_url }}" alt="">
</a>
</div>
</div>
### 6.2 Truncate mesh
Next, we use the boundary to truncate (remove) cells outside the boundary.
There are three ways to define 'outside':
1. Only remove a cell if ALL vertices are outside
2. Remove a cell if the centroid (average of all vertices) is outside
3. Remove a cell if one or more vertices are outside
```
cmo / select / MONAME
surface / s_bndry / reflect / sheet / mo_fence
cmo / select / MONAME
region / r_bndry / ge s_bndry
pset / p_bndry / region r_bndry
```
**Method 1:**
eltset / e_delete1 / exclusive / pset get p_bndry
**Method 2:**
eltset / e_delete2 / region r_bndry
**Method 3:**
eltset / e_delete3 / inclusive / pset get p_bndry
Next, add the integer cell attribute `id_in_out_bndry`:
cmo / addatt / MONAME / id_in_out_bndry / vint / scalar / nelements
and 'color' it based on the three element sets created above:
```
cmo / setatt / MONAME / id_in_out_bndry / 1 0 0 / 4
cmo / setatt / MONAME / id_in_out_bndry / eltset get e_delete3 / 3
cmo / setatt / MONAME / id_in_out_bndry / eltset get e_delete2 / 2
cmo / setatt / MONAME / id_in_out_bndry / eltset get e_delete1 / 1
```
All elements colored 4 (the default value for `id_in_out_bndry`) are elements
who evaluate false for all of the above `eltsets`.
Create an element set for all `id_in_out_bndry(cell_i) == 4`:
```
eltset / e_delete4 / id_in_out_bndry / eq / 4
eltset / e_delete3 / id_in_out_bndry / eq / 3
eltset / e_delete2 / id_in_out_bndry / eq / 2
eltset / e_delete1 / id_in_out_bndry / eq / 1
```
Finally, remove all elements 'colored' by method 3 and all elements *not* colored by any of methods 1, 2, or 3:
```
rmpoint / element / eltset get e_delete4
rmpoint / element / eltset get e_delete3
rmpoint / compress
resetpts / itp
```
<!-- Lightbox -->
<div class="uk-child-width-1-2@m" uk-grid uk-lightbox="animation: slide">
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/06_truncate_set_id_close_up.png" | relative_url }}" data-caption="Boundary fence intersection with hex mesh">
<img src="{{ "/pages/tutorial/stratigraphy/images/06_truncate_set_id_close_up.png" | relative_url }}" alt="">
</a>
</div>
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/06_hex_01_truncate_w_grid.png" | relative_url }}" data-caption="Hex mesh truncated with boundary fence">
<img src="{{ "/pages/tutorial/stratigraphy/images/06_hex_01_truncate_w_grid.png" | relative_url }}" alt="">
</a>
</div>
</div>
<!-- Next / Prev -->
<ul class="uk-pagination">
<li><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}"><span class="uk-margin-small-right" uk-pagination-previous></span> Previous</a></li>
<li class="uk-margin-auto-left"><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}">Next <span class="uk-margin-small-left" uk-pagination-next></span></a></li>
</ul>
<!-- Sidebar -->
<div class="tm-sidebar-right uk-visible@l">
<div uk-sticky="offset: 160" class="uk-sticky uk-active uk-sticky-fixed" style="position: fixed; top: 160px; width: 200px;">
<ul uk-scrollspy-nav="closest: li; scroll: true; offset: 100" class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/index.html" | relative_url }}">Index</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}">1. Building a Hex Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}">2. Define Boundaries Using Point Sets</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}">3. Constructing Stratigraphy</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}">4. Map Surfaces to Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}">5. Constructing a Fault</a></li>
<li class="uk-active"><a href="#truncate-with-polyline">6. Truncate with Polyline</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}">7. Refine Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}">8. Insert Wells</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}">9. Convert Hex Mesh to Tet</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}">10.1 Write FEHM Files</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_exo.html" | relative_url }}">10.2 Write ExodusII Files</a></li>
<li class="uk-nav-divider"></li>
<!---->
<li><a href="{{ "/pages/tutorial/stratigraphy/images/gallery.html" | relative_url }}" target="_blank"><span uk-icon="icon: image" class="uk-margin-small-right uk-icon"></span> <span class="uk-text-middle">Image Gallery</span></a></li>
<li><a href="https://github.com/lanl/LaGriT/issues" target="_blank"><span uk-icon="icon: warning" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="warning"><circle cx="10" cy="14" r="1"></circle><circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle><path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z"></path></svg></span> <span class="uk-text-middle">Report issue</span></a></li>
<li><a href="mailto:lagrit-dev@lanl.gov" target="_blank"><span uk-icon="icon: commenting" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="commenting"><polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5"></polygon><circle cx="10" cy="8" r="1"></circle><circle cx="6" cy="8" r="1"></circle><circle cx="14" cy="8" r="1"></circle></svg></span> <span class="uk-text-middle">Get help</span></a></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,128 @@
<!-- Begin breadcrumb -->
<ul class="uk-breadcrumb">
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials &amp; Examples</a></li>
<li><span>Stratigraphic Hex Mesh Tutorial</span></li>
</ul>
<!-- End breadcrumb -->
<!-- Begin image slideshow -->
<div class="uk-position-relative uk-visible-toggle uk-light" tabindex="-1" uk-slideshow>
<ul class="uk-slideshow-items">
<li>
<img data-src="{{ "/pages/tutorial/stratigraphy/images/07_hex_01_fault_refine.png" | relative_url }}" width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
<li>
<img data-src="{{ "/pages/tutorial/stratigraphy/images/07_hex_01_fault_refine_close_up.png" | relative_url }}" width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
</ul>
<a class="uk-position-center-left uk-position-small uk-hidden-hover" href="#" uk-slidenav-previous uk-slideshow-item="previous"></a>
<a class="uk-position-center-right uk-position-small uk-hidden-hover" href="#" uk-slidenav-next uk-slideshow-item="next"></a>
</div>
<!-- End image slideshow -->
<br/>
<h2 id="refine-fault" class="uk-h3 uk-margin-remove">7. Refine Fault</h2>
In step 5, we defined a fault surface (named `s_f`) intersecting the mesh. In
this section, we are going to refine the mesh where the fault intersects it.
The LaGriT command `intersect_elements` takes two meshes and creates an
element-based attribute in mesh1 that contains the number of elements in mesh2
that intersected the respective element in mesh1.
Performing the intersection between the mesh `MONAME` and fault `s_f`, storing
the intersection count in attribute `if_inter`:
```
cmo / select / MONAME
intersect_elements / MONAME / s_f / if_inter
```
The attribute `if_inter` will be non-zero everywhere there is an intersection,
and zero where there was not intersection. Taking advantage of this fact,
we can create an eltset to refine:
```
eltset / e_refine / if_inter / gt / 0
refine / eltset / eltset get e_refine
cmo / DELATT / MONAME / if_inter
```
The element density has now increased where the mesh intersects `s_f`.
We can then run this step *again*, further refining elements along that intersection:
```
intersect_elements / MONAME / s_f / if_inter
eltset / e_refine / if_inter / gt / 0
refine/ eltset / eltset get e_refine
cmo / setatt / MONAME / if_inter / 1 0 0 / 0
```
And finally, remove the attribute `if_inter`, as it is no longer needed:
```
cmo / DELATT / MONAME / if_inter
```
At this point, many different mesh objects and surfaces still exist in memory from previous steps. Let's deallocate them and verify with the `memory` command:
```
cmo / status / brief
cmo / status / MONAME
memory / verify
memory / print
cmo / delete / s_bndry
cmo / delete / mo_fence
cmo / delete / mo_bndry
cmo / delete / s_f
cmo / delete / s_2_fp
cmo / delete / s_1_fp
cmo / delete / s_2_fm
cmo / delete / s_1_fm
cmo / delete / s_2
cmo / delete / s_1
memory / verify
memory / print
```
<!-- Lightbox -->
<div class="uk-child-width-1-2@m" uk-grid uk-lightbox="animation: slide">
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/07_hex_01_fault_refine_close_up.png" | relative_url }}" data-caption="Boundary fence intersection with hex mesh">
<img src="{{ "/pages/tutorial/stratigraphy/images/07_hex_01_fault_refine_close_up.png" | relative_url }}" alt="">
</a>
</div>
</div>
<!-- Next / Prev -->
<ul class="uk-pagination">
<li><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}"><span class="uk-margin-small-right" uk-pagination-previous></span> Previous</a></li>
<li class="uk-margin-auto-left"><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}">Next <span class="uk-margin-small-left" uk-pagination-next></span></a></li>
</ul>
<!-- Sidebar -->
<div class="tm-sidebar-right uk-visible@l">
<div uk-sticky="offset: 160" class="uk-sticky uk-active uk-sticky-fixed" style="position: fixed; top: 160px; width: 200px;">
<ul uk-scrollspy-nav="closest: li; scroll: true; offset: 100" class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/index.html" | relative_url }}">Index</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}">1. Building a Hex Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}">2. Define Boundaries Using Point Sets</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}">3. Constructing Stratigraphy</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}">4. Map Surfaces to Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}">5. Constructing a Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}">6. Truncate with Polyline</a></li>
<li class="uk-active"><a href="#refine-fault">7. Refine Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}">8. Insert Wells</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}">9. Convert Hex Mesh to Tet</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}">10.1 Write FEHM Files</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_exo.html" | relative_url }}">10.2 Write ExodusII Files</a></li>
<li class="uk-nav-divider"></li>
<!---->
<li><a href="{{ "/pages/tutorial/stratigraphy/images/gallery.html" | relative_url }}" target="_blank"><span uk-icon="icon: image" class="uk-margin-small-right uk-icon"></span> <span class="uk-text-middle">Image Gallery</span></a></li>
<li><a href="https://github.com/lanl/LaGriT/issues" target="_blank"><span uk-icon="icon: warning" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="warning"><circle cx="10" cy="14" r="1"></circle><circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle><path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z"></path></svg></span> <span class="uk-text-middle">Report issue</span></a></li>
<li><a href="mailto:lagrit-dev@lanl.gov" target="_blank"><span uk-icon="icon: commenting" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="commenting"><polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5"></polygon><circle cx="10" cy="8" r="1"></circle><circle cx="6" cy="8" r="1"></circle><circle cx="14" cy="8" r="1"></circle></svg></span> <span class="uk-text-middle">Get help</span></a></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,250 @@
<!-- Begin breadcrumb -->
<ul class="uk-breadcrumb">
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials &amp; Examples</a></li>
<li><span>Stratigraphic Hex Mesh Tutorial</span></li>
</ul>
<!-- End breadcrumb -->
<!-- Begin image slideshow -->
<div class="uk-position-relative uk-visible-toggle uk-light" tabindex="-1" uk-slideshow>
<ul class="uk-slideshow-items">
<li>
<img data-src="{{ "/pages/tutorial/stratigraphy/images/08_hex_01_insert_wells.png" | relative_url }}" width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
<li>
<img data-src="{{ "/pages/tutorial/stratigraphy/images/08_hex_01_insert_wells_close_up.png" | relative_url }}" width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
<li>
<img data-src="{{ "/pages/tutorial/stratigraphy/images/08_hex_01_insert_wells_dfield_wells.png" | relative_url }}" width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
</ul>
<a class="uk-position-center-left uk-position-small uk-hidden-hover" href="#" uk-slidenav-previous uk-slideshow-item="previous"></a>
<a class="uk-position-center-right uk-position-small uk-hidden-hover" href="#" uk-slidenav-next uk-slideshow-item="next"></a>
</div>
<!-- End image slideshow -->
<br/>
<h2 id="insert-well" class="uk-h3 uk-margin-remove">8. Insert Wells</h2>
In this step, we will generate two cylindrical 'wells', refine the mesh
`MONAME` around them, and identify a line of nodes that will be the well
source/sink for boundary conditions (ultimately writing these nodes
to `zone` files).
### 8.1 Generating Cylindrical Tetrahedral Wells
First, we define variables for the well's position (`XWELL`,`YWELL`), radius (`RADIUS_WELL`), and number of nodes across the cylindrical radius
(`NRADIUS`):
```
define / XWELL1 / 1234.56
define / YWELL1 / 1987.65
define / XWELL2 / 2243.21
define / YWELL2 / 1212.34
define / RADIUS_WELL / 25.0
define / NRADIUS / 2
```
Now, we create a cylindrical point cloud defining the first well using
`createpts / rtz`:
```
cmo / create / mo_well1 / / / tet
createpts / rtz / NRADIUS 9 NZ / 0. 0. 3100. / RADIUS_WELL 360. 1500. / 1 1 1
```
This creates a point cloud centered around (0,0,0) with a radius of `RADIUS_WELL`, an angular component spanning a full 360 degrees (`φ = {0., 360.}`), and a Z range of `{3100.,1500.}`.
Run `filter`, `rmpoint / compress`, and set `imt` to 1 for the well:
```
filter / 1 0 0
rmpoint / compress
cmo / setatt / mo_well1 / imt / 1 0 0 / 1
```
Next, connect the point cloud into a tetrahedral mesh and translate the
X and Y origin to `{XWELL1,YWELL1}`:
```
connect
resetpts / itp
cmo / printatt / mo_well1 / -xyz- / minmax
trans / 1 0 0 / 0. 0. 0. / XWELL1 YWELL1 0.0
cmo / printatt / mo_well1 / -xyz- / minmax
```
The first 'well' mesh object has been generated. Repeat this process with different parameters to create the second well:
```
cmo / create / mo_well2 / / / tet
createpts / rtz / NRADIUS 9 NZ / 0. 0. 3100. / RADIUS_WELL 360. 2200. / 1 1 1
filter / 1 0 0
rmpoint / compress
cmo / setatt / mo_well1 / imt / 1 0 0 / 1
connect
resetpts / itp
cmo / printatt / mo_well2 / -xyz- / minmax
trans / 1 0 0 / 0. 0. 0. / XWELL2 YWELL2 0.0
cmo / printatt / mo_well2 / -xyz- / minmax
```
Finally, join the two distinct wells into a single mesh object with `addmesh / merge`:
```
addmesh / merge / mo_wells / mo_well1 mo_well2
```
### 8.2 Refining `MONAME` around the wells
As we did for the fault in step 7, we refine the main mesh `MONAME` around the wells:
```
# First pass refinement
cmo / select / MONAME
intersect_elements / MONAME / mo_wells / if_inter
eltset / e_refine / if_inter / gt / 0
refine/ eltset / eltset get e_refine
cmo / setatt / MONAME / if_inter / 1 0 0 / 0
eltset / e_refine / delete
# Second pass refinement
cmo / select / MONAME
intersect_elements / MONAME / mo_wells / if_inter
eltset / e_refine / if_inter / gt / 0
refine/ eltset / eltset get e_refine
cmo / setatt / MONAME / if_inter / 1 0 0 / 0
eltset / e_refine / delete
# Third pass refinement
cmo / select / MONAME
intersect_elements / MONAME / mo_wells / if_inter
eltset / e_refine / if_inter / gt / 0
refine/ eltset / eltset get e_refine
cmo / setatt / MONAME / if_inter / 1 0 0 / 0
eltset / e_refine / delete
```
The refinement process returns a octree grid object, which stores information about parent-children relationships, among other properties. It's important, as the prepare to finalize the mesh for exporting, to strip this information and convert the octree grid object to a standard mesh object.
This conversion is done through the `grid2grid / tree_to_fe` command:
```
grid2grid / tree_to_fe / mohex_octree / mohex
define / MONAME / mohex_octree
```
<!-- Lightbox -->
<div class="uk-child-width-1-2@m" uk-grid uk-lightbox="animation: slide">
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/08_hex_01_insert_wells_dfield_wells.png" | relative_url }}" data-caption="Node Euclidean distances to wells">
<img src="{{ "/pages/tutorial/stratigraphy/images/08_hex_01_insert_wells_dfield_wells.png" | relative_url }}" alt="">
</a>
</div>
</div>
### 8.3 Writing `zone` files based on well distances
The `zone` files are lists of node numbers in [FEHM](https://fehm.lanl.gov) file format and used to identify materials, well source/sinks, and boundary conditions.
In this subsection, we will generate `zone` files describing all nodes within 32, 16, 8, 4, 2 and 1 meters of the wells.
To begin, we will compute the well point cloud again, as we did above. First, for well 1:
```
cmo / create / mo_pts1
createpts / rtz / 2 2 1000 / 0. 0. 3100. / 0.0 360. 2200. / 1 1 1
trans / 1 0 0 / 0. 0. 0. / XWELL1 YWELL1 0.0
```
Then for well 2:
```
cmo / create / mo_pts2
createpts / rtz / 2 2 1000 / 0. 0. 3100. / 0.0 360. 2200. / 1 1 1
trans / 1 0 0 / 0. 0. 0. / XWELL2 YWELL2 0.0
```
and joining them into a single mesh object, `mo_pts`:
```
addmesh / merge / mo_pts / mo_pts1 / mo_pts2
cmo / select / mo_pts
filter / 1 0 0
rmpoint / compress
```
Next, we will compute a distance field attribute, `dfield_well`, which is a node-based attribute storing the Euclidean distance from `node_i` in one mesh to the closest node in another mesh. In other words, all nodes in `MONAME` store their distance to the closest well (`mo_pts`) node.
```
compute / distance_field / MONAME / mo_pts / dfield_well
```
Clean up unneeded mesh objects:
```
cmo / delete / mo_pts1
cmo / delete / mo_pts2
cmo / delete / mo_pts
cmo / delete / mo_wells
cmo / delete / mo_well1
cmo / delete / mo_well2
```
And finally, for each mesh-to-well distance in {32,16,8,4,2,1} (which is stored in `dfield_well`), (i) create a pset object
containing all nodes within that distance, and (ii) write those nodes to a `zone` file:
```
cmo / select / MONAME
pset / pwell / attribute / dfield_well / 1 0 0 / le / 1.0
pset / pwell / zone / zone_radius_01.0.zone
pset / pwell / attribute / dfield_well / 1 0 0 / le / 2.0
pset / pwell / zone / zone_radius_02.0.zone
pset / pwell / attribute / dfield_well / 1 0 0 / le / 4.0
pset / pwell / zone / zone_radius_04.0.zone
pset / pwell / attribute / dfield_well / 1 0 0 / le / 8.0
pset / pwell / zone / zone_radius_08.0.zone
pset / pwell / attribute / dfield_well / 1 0 0 / le / 16.0
pset / pwell / zone / zone_radius_16.0.zone
pset / pwell / attribute / dfield_well / 1 0 0 / le / 32.0
pset / pwell / zone / zone_radius_32.0.zone
```
<!-- Next / Prev -->
<ul class="uk-pagination">
<li><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}"><span class="uk-margin-small-right" uk-pagination-previous></span> Previous</a></li>
<li class="uk-margin-auto-left"><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}">Next <span class="uk-margin-small-left" uk-pagination-next></span></a></li>
</ul>
<!-- Sidebar -->
<div class="tm-sidebar-right uk-visible@l">
<div uk-sticky="offset: 160" class="uk-sticky uk-active uk-sticky-fixed" style="position: fixed; top: 160px; width: 200px;">
<ul uk-scrollspy-nav="closest: li; scroll: true; offset: 100" class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/index.html" | relative_url }}">Index</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}">1. Building a Hex Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}">2. Define Boundaries Using Point Sets</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}">3. Constructing Stratigraphy</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}">4. Map Surfaces to Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}">5. Constructing a Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}">6. Truncate with Polyline</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}">7. Refine Fault</a></li>
<li class="uk-active"><a href="#insert-well">8. Insert Wells</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}">9. Convert Hex Mesh to Tet</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}">10.1 Write FEHM Files</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_exo.html" | relative_url }}">10.2 Write ExodusII Files</a></li>
<li class="uk-nav-divider"></li>
<!---->
<li><a href="{{ "/pages/tutorial/stratigraphy/images/gallery.html" | relative_url }}" target="_blank"><span uk-icon="icon: image" class="uk-margin-small-right uk-icon"></span> <span class="uk-text-middle">Image Gallery</span></a></li>
<li><a href="https://github.com/lanl/LaGriT/issues" target="_blank"><span uk-icon="icon: warning" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="warning"><circle cx="10" cy="14" r="1"></circle><circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle><path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z"></path></svg></span> <span class="uk-text-middle">Report issue</span></a></li>
<li><a href="mailto:lagrit-dev@lanl.gov" target="_blank"><span uk-icon="icon: commenting" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="commenting"><polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5"></polygon><circle cx="10" cy="8" r="1"></circle><circle cx="6" cy="8" r="1"></circle><circle cx="14" cy="8" r="1"></circle></svg></span> <span class="uk-text-middle">Get help</span></a></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,130 @@
<!-- Begin breadcrumb -->
<ul class="uk-breadcrumb">
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials &amp; Examples</a></li>
<li><span>Stratigraphic Hex Mesh Tutorial</span></li>
</ul>
<!-- End breadcrumb -->
<!-- Begin image slideshow -->
<div class="uk-position-relative uk-visible-toggle uk-light" tabindex="-1" uk-slideshow>
<ul class="uk-slideshow-items">
<li>
<img data-src="{{ "/pages/tutorial/stratigraphy/images/19_hex_01_to_tet.png" | relative_url }}" width="1800" height="1200" alt="" uk-cover uk-img="target: !.uk-slideshow-items">
</li>
</ul>
</div>
<!-- End image slideshow -->
<br/>
<h2 id="convert-hex-mesh-to-tet" class="uk-h3 uk-margin-remove">9. Convert Hex Mesh to Tet</h2>
In this final step, we will convert our mesh from hexahedral to tetrahedral
elements.
Create an empty mesh object, `motet`, and copy all nodes from `MONAME`
(or, `mohex_octree`) to `motet`:
```
cmo / create / motet
copypts / motet / mohex_octree
```
Next, reset the `imt` and `itp` variables and connect the nodes into
tetrahedral elements:
```
cmo / setatt / motet / imt / 1 0 0 / 1
cmo / setatt / motet / itp / 1 0 0 / 0
connect
resetpts / itp
```
Interpolate the node and cell 'colors' over the tetrahedral mesh, using
`interpolate / voronoi` for node-to-node interpolations, and
`interpolate / map` for cell-to-cell interpolations:
```
interpolate / voronoi / motet / imt / 1 0 0 / mohex_octree / imt
interpolate / map / motet / itetclr / 1 0 0 / mohex_octree / itetclr
```
Recall in step 5 that we set `imt` and `itetclr` to the value 7 for all
nodes and elements that weren't captured by the surface-created element sets.
We can use the command `rmmat / 7` to remove all nodes and elements with
`imt` and `itetclr` values of 7:
```
rmmat / 7
rmpoint / compress
resetpts / itp
```
Check the mesh that it has all positive element volumes and no bad aspect ratios.
Use the `quality` command for a report on these mesh quantities.
```
quality
epsilonl, epsilonaspect: 1.3230281E-09 2.3158330E-27
--------------------------------------------
elements with aspect ratio < .01: 0
elements with aspect ratio b/w .01 and .02: 0
elements with aspect ratio b/w .02 and .05: 0
elements with aspect ratio b/w .05 and .1 : 0
elements with aspect ratio b/w .1 and .2 : 18
elements with aspect ratio b/w .2 and .5 : 20538
elements with aspect ratio b/w .5 and 1. : 631394
min aspect ratio = 0.1613E+00 max aspect ratio = 0.9377E+00
epsilonvol: 8.8249408E-03
---------------------------------------
element volumes b/w 0.2500E+03 and 0.8706E+03: 43109
element volumes b/w 0.8706E+03 and 0.3031E+04: 273639
element volumes b/w 0.3031E+04 and 0.1056E+05: 98379
element volumes b/w 0.1056E+05 and 0.3676E+05: 63075
element volumes b/w 0.3676E+05 and 0.1280E+06: 173748
min volume = 2.5000000E+02 max volume = 1.2800000E+05
-----------------------------------------------------------
651950 total elements evaluated.
```
Finally, write the mesh object to AVS UCD file format and signal the EOF
`finish` command:
```
dump/avs/tet_mesh.inp/motet
finish
```
<!-- Next / Prev -->
<ul class="uk-pagination">
<li><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}"><span class="uk-margin-small-right" uk-pagination-previous></span> Previous</a></li>
<li class="uk-margin-auto-left"><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}">Next <span class="uk-margin-small-left" uk-pagination-next></span></a></li>
</ul>
<!-- Sidebar -->
<div class="tm-sidebar-right uk-visible@l">
<div uk-sticky="offset: 160" class="uk-sticky uk-active uk-sticky-fixed" style="position: fixed; top: 160px; width: 200px;">
<ul uk-scrollspy-nav="closest: li; scroll: true; offset: 100" class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/index.html" | relative_url }}">Index</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}">1. Building a Hex Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}">2. Define Boundaries Using Point Sets</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}">3. Constructing Stratigraphy</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}">4. Map Surfaces to Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}">5. Constructing a Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}">6. Truncate with Polyline</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}">7. Refine Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}">8. Insert Wells</a></li>
<li class="uk-active"><a href="#convert-hex-mesh-to-tet">9. Convert Hex Mesh to Tet</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}">10.1 Write FEHM Files</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_exo.html" | relative_url }}">10.2 Write ExodusII Files</a></li>
<li class="uk-nav-divider"></li>
<!---->
<li><a href="{{ "/pages/tutorial/stratigraphy/images/gallery.html" | relative_url }}" target="_blank"><span uk-icon="icon: image" class="uk-margin-small-right uk-icon"></span> <span class="uk-text-middle">Image Gallery</span></a></li>
<li><a href="https://github.com/lanl/LaGriT/issues" target="_blank"><span uk-icon="icon: warning" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="warning"><circle cx="10" cy="14" r="1"></circle><circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle><path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z"></path></svg></span> <span class="uk-text-middle">Report issue</span></a></li>
<li><a href="mailto:lagrit-dev@lanl.gov" target="_blank"><span uk-icon="icon: commenting" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="commenting"><polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5"></polygon><circle cx="10" cy="8" r="1"></circle><circle cx="6" cy="8" r="1"></circle><circle cx="14" cy="8" r="1"></circle></svg></span> <span class="uk-text-middle">Get help</span></a></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,154 @@
<!-- Begin breadcrumb -->
<ul class="uk-breadcrumb">
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials &amp; Examples</a></li>
<li><span>Stratigraphic Hex Mesh Tutorial</span></li>
</ul>
<!-- End breadcrumb -->
<!-- Begin image -->
<img data-src="{{ "/pages/tutorial/stratigraphy/images/21_tet_01_exo_blocks.png" | relative_url }}" width="639" height="525" alt="" uk-img>
<br/>
<!-- End image -->
<h2 id="dump-exo" class="uk-h3 uk-margin-remove">10.2 Write ExodusII Files</h2>
Write the tet mesh in Exodus II format. This format defines materials as blocks
and is element based.
The node properties will be ignored. The below image shows the Exodus mesh
(read with GMV or ParaView) with material blocks shown in 'exploded' view.
<!-- Lightbox -->
<div class="uk-child-width-1-2@m" uk-grid uk-lightbox="animation: slide">
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/21_tet_01_exo_blocks_ex.png" | relative_url }}" data-caption="Exodus cells 'exploded' by material blocks">
<img src="{{ "/pages/tutorial/stratigraphy/images/21_tet_01_exo_blocks_ex.png" | relative_url }}" alt="">
</a>
</div>
</div>
We can define the boundary faces for this mesh by extracting the 2D external
surface and writing the element and face id for each. These can be written as
sets based on element selection.
In this example we use `settets/normal` to assign values 1-6 to the faces
based on normal directions where `1=bot`, `2=top`, `3=right`, `4=back`, `5=left`,
`6=front`. Define element sets for top, bottom, and lump sides
all together for set 3. Write the faceset relation for each element set.
```
define / FILENAME / ss3_sides.faceset
define / SS_ID / 3
cmo / copy / mo_tmp / mo_surf
cmo / select / mo_tmp
eltset / e_keep / itetclr / eq / SS_ID
eltset / e_delete / not / e_keep
rmpoint / element / eltset get e_delete
rmpoint / compress
dump / avs2 / FILENAME / mo_tmp / 0 0 0 2
cmo / delete / mo_tmp
define / FILENAME / ss1_bottom.faceset
define / SS_ID / 1
cmo / copy / mo_tmp / mo_surf
cmo / select / mo_tmp
eltset / e_keep / itetclr / eq / SS_ID
eltset / e_delete / not / e_keep
rmpoint / element / eltset get e_delete
rmpoint / compress
dump / avs2 / FILENAME / mo_tmp / 0 0 0 2
cmo / delete / mo_tmp
define / FILENAME / ss2_top.faceset
define / SS_ID / 2
cmo / copy / mo_tmp / mo_surf
cmo / select / mo_tmp
eltset / e_keep / itetclr / eq / SS_ID
eltset / e_delete / not / e_keep
rmpoint / element / eltset get e_delete
rmpoint / compress
dump / avs2 / FILENAME / mo_tmp / 0 0 0 2
cmo / delete / mo_tmp
```
Write the Exodus II mesh with the faceset files. This mesh and associated
face sets can be viewed with GMV or ParaView.
```
dump/exo/ mesh_fs.exo / MO_MESH / / / facesets &
ss1_bottom.faceset, ss2_top.faceset, ss3_sides.faceset
```
Check the summary report to see that mesh quantities are as expected.
The report shows 6 element blocks (materials) and 3 side sets with appropriate face counts.
```
Title: LAGRIT TO EXODUSII
number of dimension: 3
number of nodes: 115547
number of elements: 651950
number of edges: 0
number of edge blocks: 0
number of element blocks: 6
number of face blocks: 0
number of node sets: 0
number of edge sets: 0
number of element sets: 0
number of side sets: 3
number of face sets: 0
number of node maps: 0
number of edge maps: 0
number of face maps: 0
number of element maps: 0
------------------------------------------
EXPSS loop:
1 Side Set tag: 1 Faces: 4098
2 Side Set tag: 2 Faces: 4640
3 Side Set tag: 3 Faces: 11812
------------------------------------------
Done ExodusII Side Sets Total: 3
```
Image show the Exodus face sets (side sets) with bottom (blue), top (red), and sides (light blue).
<!-- Lightbox -->
<div class="uk-child-width-1-2@m" uk-grid uk-lightbox="animation: slide">
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/21_tet_01_exo_bndry_faces.png" | relative_url }}" data-caption="Exodus side sets: bottom (blue), top (red), and sides (light blue).">
<img src="{{ "/pages/tutorial/stratigraphy/images/21_tet_01_exo_bndry_faces.png" | relative_url }}" alt="">
</a>
</div>
</div>
<!-- Next / Prev -->
<ul class="uk-pagination">
<li><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}"><span class="uk-margin-small-right" uk-pagination-previous></span> Previous</a></li>
</ul>
<!-- Sidebar -->
<div class="tm-sidebar-right uk-visible@l">
<div uk-sticky="offset: 160" class="uk-sticky uk-active uk-sticky-fixed" style="position: fixed; top: 160px; width: 200px;">
<ul uk-scrollspy-nav="closest: li; scroll: true; offset: 100" class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/index.html" | relative_url }}">Index</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}">1. Building a Hex Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}">2. Define Boundaries Using Point Sets</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}">3. Constructing Stratigraphy</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}">4. Map Surfaces to Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}">5. Constructing a Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}">6. Truncate with Polyline</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}">7. Refine Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}">8. Insert Wells</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}">9. Convert Hex Mesh to Tet</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_fehm.html" | relative_url }}">10.1 Write FEHM Files</a></li>
<li class="uk-active"><a href="#dump-exo">10.2 Write ExodusII Files</a></li>
<li class="uk-nav-divider"></li>
<!---->
<li><a href="{{ "/pages/tutorial/stratigraphy/images/gallery.html" | relative_url }}" target="_blank"><span uk-icon="icon: image" class="uk-margin-small-right uk-icon"></span> <span class="uk-text-middle">Image Gallery</span></a></li>
<li><a href="https://github.com/lanl/LaGriT/issues" target="_blank"><span uk-icon="icon: warning" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="warning"><circle cx="10" cy="14" r="1"></circle><circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle><path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z"></path></svg></span> <span class="uk-text-middle">Report issue</span></a></li>
<li><a href="mailto:lagrit-dev@lanl.gov" target="_blank"><span uk-icon="icon: commenting" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="commenting"><polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5"></polygon><circle cx="10" cy="8" r="1"></circle><circle cx="6" cy="8" r="1"></circle><circle cx="14" cy="8" r="1"></circle></svg></span> <span class="uk-text-middle">Get help</span></a></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,158 @@
<!-- Begin breadcrumb -->
<ul class="uk-breadcrumb">
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials &amp; Examples</a></li>
<li><span>Stratigraphic Hex Mesh Tutorial</span></li>
</ul>
<!-- End breadcrumb -->
<!-- Begin image -->
<img data-src="{{ "/pages/tutorial/stratigraphy/images/21_tet_01_fehm_voronoi.png" | relative_url }}" width="639" height="525" alt="" uk-img>
<br/>
<!-- End image -->
<h2 id="dump-fehm" class="uk-h3 uk-margin-remove">10. Write FEHM Files</h2>
Write out a series of files for the FEHM flow and transport code.
FEHM uses the control volume finite element method (CVFE) with node materials
and properties assigned to the mesh nodes.
The image shows the tetrahedral mesh colored by the 6 node `imt` (materials)
values and showing the voronoi cell edges.
These two close-up images show the relationship between the Delaunay tet mesh
edges and the voronoi volumes, the latter of which are used by FEHM.
The mesh nodes are the vertices of the tetrahedral elements and are the center
of each voronoi volume.
<!-- Lightbox -->
<div class="uk-child-width-1-2@m" uk-grid uk-lightbox="animation: slide">
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/21_tet_01_fehm_tet_a.png" | relative_url }}" data-caption="Close-up view of mesh with Delaunay tetrahedral cells">
<img src="{{ "/pages/tutorial/stratigraphy/images/21_tet_01_fehm_tet_a.png" | relative_url }}" alt="">
</a>
</div>
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/21_tet_01_fehm_vor_a.png" | relative_url }}" data-caption="Close-up view of mesh with Voronoi cells">
<img src="{{ "/pages/tutorial/stratigraphy/images/21_tet_01_fehm_vor_a.png" | relative_url }}" alt="">
</a>
</div>
</div>
We prepare the tet mesh for FEHM with the following commands. These ensure
that there are no duplicate nodes and sets the elements to a single material.
We also make sure nodes are not doubly defined and parent-child chains are
removed.
```
cmo/select/motet
resetpts/parent
filter/1,0,0
rmpoint/compress
```
LaGriT can write a full set of FEHM model files with a single command.
The `keepatt` option will save attributes tagging nodes on the outside boundaries.
These can be used to define additional point sets and zones for FEHM.
The following files are written:
* `.fehm` - mesh coordinates and geometry
* `_material.zone` - node imt (material) zone lists
* `_outside.zone` - node external boundary zone lists
* `_outside_vor.area` - node external boundary area lists
* `_interface.zone` - zone lists for nodes along material interfaces
* `_multi_mat.zone` - lists of node pairs connected across material interfaces
* `.stor` - FEHM format file giving the voronoi (control volume) associated with each node and the sparce matrix structure
```
dump / fehm / mesh / motet / keepatt
```
Review the report written to the screen and the output file (`lagrit.out`) for
mesh quantities.
These are usful summaries and will help in finding problems in the mesh design.
Check that material node counts are as expected.
```
*** Write FEHMN GEOM AND ZONE FILES ***
*********dump_material_lists********
Minimum material ID value = 1
Maximum material ID value = 6
Total possible materials = 6
Material 1 has 23944 nodes. #nodes/nnodes is 0.207223027945
Material 2 has 6867 nodes. #nodes/nnodes is 0.594303607941E-01
Material 3 has 16072 nodes. #nodes/nnodes is 0.139094918966
Material 4 has 33192 nodes. #nodes/nnodes is 0.287259727716
Material 5 has 12871 nodes. #nodes/nnodes is 0.111391901970
Material 6 has 22601 nodes. #nodes/nnodes is 0.195600062609
```
Check that the Sparse Matrix volumes are positive.
Negative coefficient values can result from poorly formed tetrahedra.
These usually occur on non-convex boundaries.
FEHM will still run but accuracy may be impacted.
```
*** Construct and Compress Sparse Matrix:3D ***
*** Compress Area Coefficient Values ***
AMatbld3d_stor: Matrix compress_eps: 0.1000000E-07
AMatbld3d_stor: Local epsilon: 0.1000000E-14
AMatbld3d_stor: *****Zero Negative Coefficients ******
AMatbld3d_stor: Number of 'zero' (< compress_eps) coefs 0
AMatbld3d_stor: npoints = 115547 ncoefs = 964637
AMatbld3d_stor: Number of unique coefs = 313
AMatbld3d_stor: Maximum num. connections to a node = 25
AMatbld3d_stor: Volume min = 7.4999999E+02
AMatbld3d_stor: Volume max = 7.6800000E+05
AMatbld3d_stor: Total Volume: 2.3846400E+10
AMatbld3d_stor: abs(Aij/xij) min = 0.0000000E+00
AMatbld3d_stor: abs(Aij/xij) max = 1.3500000E+02
AMatbld3d_stor: (Aij/xij) max = 0.0000000E+00
AMatbld3d_stor: (Aij/xij) min = -1.3500000E+02
AMatbld3d_stor Matrix coefficient values stored as scalar area/distance
AMatbld3d_stor Matrix compression used for graph and coefficient values
ascii STOR file written with name mesh.stor
```
Visually inspect the mesh for the assignment of boundary zones such as top nodes.
<!-- Lightbox -->
<div class="uk-child-width-1-2@m" uk-grid uk-lightbox="animation: slide">
<div>
<a class="uk-inline" href="{{ "/pages/tutorial/stratigraphy/images/21_tet_01_fehm_node_zone_top.png" | relative_url }}" data-caption="GMV visualization of mesh nodes, with top nodes colored red">
<img src="{{ "/pages/tutorial/stratigraphy/images/21_tet_01_fehm_node_zone_top.png" | relative_url }}" alt="">
</a>
</div>
</div>
<!-- Next / Prev -->
<ul class="uk-pagination">
<li><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}"><span class="uk-margin-small-right" uk-pagination-previous></span> Previous</a></li>
<li class="uk-margin-auto-left"><a href="{{ "/pages/tutorial/stratigraphy/step_10_exo.html" | relative_url }}">Next <span class="uk-margin-small-left" uk-pagination-next></span></a></li>
</ul>
<!-- Sidebar -->
<div class="tm-sidebar-right uk-visible@l">
<div uk-sticky="offset: 160" class="uk-sticky uk-active uk-sticky-fixed" style="position: fixed; top: 160px; width: 200px;">
<ul uk-scrollspy-nav="closest: li; scroll: true; offset: 100" class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/index.html" | relative_url }}">Index</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_01.html" | relative_url }}">1. Building a Hex Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_02.html" | relative_url }}">2. Define Boundaries Using Point Sets</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_03.html" | relative_url }}">3. Constructing Stratigraphy</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_04.html" | relative_url }}">4. Map Surfaces to Mesh</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_05.html" | relative_url }}">5. Constructing a Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_06.html" | relative_url }}">6. Truncate with Polyline</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_07.html" | relative_url }}">7. Refine Fault</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_08.html" | relative_url }}">8. Insert Wells</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_09.html" | relative_url }}">9. Convert Hex Mesh to Tet</a></li>
<li class="uk-active"><a href="#dump-fehm">10.1 Write FEHM Files</a></li>
<li class=""><a href="{{ "/pages/tutorial/stratigraphy/step_10_exo.html" | relative_url }}">10.2 Write ExodusII Files</a></li>
<li class="uk-nav-divider"></li>
<!---->
<li><a href="{{ "/pages/tutorial/stratigraphy/images/gallery.html" | relative_url }}" target="_blank"><span uk-icon="icon: image" class="uk-margin-small-right uk-icon"></span> <span class="uk-text-middle">Image Gallery</span></a></li>
<li><a href="https://github.com/lanl/LaGriT/issues" target="_blank"><span uk-icon="icon: warning" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="warning"><circle cx="10" cy="14" r="1"></circle><circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle><path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z"></path></svg></span> <span class="uk-text-middle">Report issue</span></a></li>
<li><a href="mailto:lagrit-dev@lanl.gov" target="_blank"><span uk-icon="icon: commenting" class="uk-margin-small-right uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="commenting"><polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5"></polygon><circle cx="10" cy="8" r="1"></circle><circle cx="6" cy="8" r="1"></circle><circle cx="14" cy="8" r="1"></circle></svg></span> <span class="uk-text-middle">Get help</span></a></li>
</ul>
</div>
</div>