initial upload
BIN
docs/pages/tutorial/stratigraphy/Tutorial_Hex_Mesh.zip
Executable file
BIN
docs/pages/tutorial/stratigraphy/images/01_hex_01.png
Executable file
|
After Width: | Height: | Size: 292 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/02_hex_01_top_region.png
Executable file
|
After Width: | Height: | Size: 314 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/03_hex_01_2surfs.png
Executable file
|
After Width: | Height: | Size: 328 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/03_hex_01_2surfs_b.png
Executable file
|
After Width: | Height: | Size: 370 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/03_hex_01_set_imt_itetclr.png
Executable file
|
After Width: | Height: | Size: 350 KiB |
|
After Width: | Height: | Size: 91 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/05_fault_objects.png
Executable file
|
After Width: | Height: | Size: 51 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/05_hex_01_fault_imt_itetclr.png
Executable file
|
After Width: | Height: | Size: 464 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/06_boundary_truncate.png
Executable file
|
After Width: | Height: | Size: 42 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/06_boundary_truncate_fence.png
Executable file
|
After Width: | Height: | Size: 156 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/06_hex_01_truncate.png
Executable file
|
After Width: | Height: | Size: 164 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/06_hex_01_truncate_close_up.png
Executable file
|
After Width: | Height: | Size: 113 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/06_hex_01_truncate_w_grid.png
Executable file
|
After Width: | Height: | Size: 270 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/06_truncate_set_id.png
Executable file
|
After Width: | Height: | Size: 362 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/06_truncate_set_id_close_up.png
Executable file
|
After Width: | Height: | Size: 200 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/07_hex_01_fault_refine.png
Executable file
|
After Width: | Height: | Size: 385 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/07_hex_01_fault_refine_close_up.png
Executable file
|
After Width: | Height: | Size: 333 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/08_hex_01_insert_wells.png
Executable file
|
After Width: | Height: | Size: 239 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/08_hex_01_insert_wells_close_up.png
Executable file
|
After Width: | Height: | Size: 159 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/08_hex_01_insert_wells_dfield_wells.png
Executable file
|
After Width: | Height: | Size: 730 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/08_hex_01_insert_wells_outline.png
Executable file
|
After Width: | Height: | Size: 259 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/19_hex_01_to_tet.png
Executable file
|
After Width: | Height: | Size: 364 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/21_tet_01_exo_blocks.png
Executable file
|
After Width: | Height: | Size: 170 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/21_tet_01_exo_blocks_ex.png
Executable file
|
After Width: | Height: | Size: 153 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/21_tet_01_exo_bndry_faces.png
Executable file
|
After Width: | Height: | Size: 187 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/21_tet_01_fehm_node_zone_top.png
Executable file
|
After Width: | Height: | Size: 86 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/21_tet_01_fehm_tet_a.png
Executable file
|
After Width: | Height: | Size: 120 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/21_tet_01_fehm_vor_a.png
Executable file
|
After Width: | Height: | Size: 69 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/21_tet_01_fehm_voronoi.png
Executable file
|
After Width: | Height: | Size: 126 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/21_tet_wide.png
Executable file
|
After Width: | Height: | Size: 166 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/ch1.png
Executable file
|
After Width: | Height: | Size: 783 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/ch2_transparent_cbar.png
Executable file
|
After Width: | Height: | Size: 134 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/ch4.png
Executable file
|
After Width: | Height: | Size: 293 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/ch5.png
Executable file
|
After Width: | Height: | Size: 43 KiB |
35
docs/pages/tutorial/stratigraphy/images/gallery.md
Executable 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** |
|
||||
| | |  |
|
||||
| **03\_hex\_01\_2surfs\_b** | **03\_hex\_01\_set\_imt\_itetclr** | **03\_hex\_01\_set\_imt\_itetclr\_threshold\_remove\_material3** |
|
||||
| | |  |
|
||||
| **05\_hex\_01\_fault\_imt\_itetclr** | **06\_boundary\_truncate** | **07\_boundary\_truncate\_fence** |
|
||||
| | |  |
|
||||
| **08\_truncate\_set\_id** | **09\_truncate\_set\_id\_close\_up** | **10\_hex\_01\_truncate\_close\_up** |
|
||||
| | |  |
|
||||
| **11\_hex\_01\_truncate** | **12\_hex\_01\_truncate\_w\_grid** | **13\_hex\_01\_fault\_refine** |
|
||||
| | |  |
|
||||
| **14\_hex\_01\_fault\_refine\_close\_up** | **15\_hex\_01\_insert\_wells** | **16\_hex\_01\_insert\_wells\_close\_up** |
|
||||
| | |  |
|
||||
| **17\_hex\_01\_insert\_wells\_outline** | **18\_hex\_01\_insert\_wells\_dfield\_wells** | **19\_hex\_01\_to\_tet** |
|
||||
| | |  |
|
||||
| **21\_tet\_01\_exo\_blocks** | **21\_tet\_01\_exo\_blocks\_ex** | **21\_tet\_01\_exo\_bndry\_faces** |
|
||||
| | |  |
|
||||
| **21\_tet\_01\_fehm\_node\_zone\_rad16** | **21\_tet\_01\_fehm\_node\_zone\_top** | **21\_tet\_01\_fehm\_nodes** |
|
||||
| | |  |
|
||||
| **21\_tet\_01\_fehm\_tet\_a** | **21\_tet\_01\_fehm\_vor\_a** | **21\_tet\_01\_fehm\_vor\_tet\_a** |
|
||||
| | |  |
|
||||
| **21\_tet\_01\_fehm\_voronoi** | **21\_tet\_01\_fehm\_voronoi\_a** |
|
||||
| |  |
|
||||
|
||||
|
||||
End Gallery
|
||||
BIN
docs/pages/tutorial/stratigraphy/images/gallery/01_hex_01.png
Executable file
|
After Width: | Height: | Size: 69 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/02_hex_01_top_region.png
Executable file
|
After Width: | Height: | Size: 54 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/03_hex_01_2surfs.png
Executable file
|
After Width: | Height: | Size: 34 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/03_hex_01_2surfs_b.png
Executable file
|
After Width: | Height: | Size: 53 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/03_hex_01_set_imt_itetclr.png
Executable file
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 29 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/05_hex_01_fault_imt_itetclr.png
Executable file
|
After Width: | Height: | Size: 92 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/06_boundary_truncate.png
Executable file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/07_boundary_truncate_fence.png
Executable file
|
After Width: | Height: | Size: 20 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/08_truncate_set_id.png
Executable file
|
After Width: | Height: | Size: 70 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/09_truncate_set_id_close_up.png
Executable file
|
After Width: | Height: | Size: 59 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/10_hex_01_truncate_close_up.png
Executable file
|
After Width: | Height: | Size: 21 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/11_hex_01_truncate.png
Executable file
|
After Width: | Height: | Size: 39 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/12_hex_01_truncate_w_grid.png
Executable file
|
After Width: | Height: | Size: 58 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/13_hex_01_fault_refine.png
Executable file
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 80 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/15_hex_01_insert_wells.png
Executable file
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 102 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/19_hex_01_to_tet.png
Executable file
|
After Width: | Height: | Size: 55 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/21_tet_01_exo_blocks.png
Executable file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/21_tet_01_exo_blocks_ex.png
Executable file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/21_tet_01_exo_bndry_faces.png
Executable file
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/21_tet_01_fehm_node_zone_top.png
Executable file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/21_tet_01_fehm_nodes.png
Executable file
|
After Width: | Height: | Size: 11 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/21_tet_01_fehm_tet_a.png
Executable file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/21_tet_01_fehm_vor_a.png
Executable file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/21_tet_01_fehm_vor_tet_a.png
Executable file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/21_tet_01_fehm_voronoi.png
Executable file
|
After Width: | Height: | Size: 9.5 KiB |
BIN
docs/pages/tutorial/stratigraphy/images/gallery/21_tet_01_fehm_voronoi_a.png
Executable file
|
After Width: | Height: | Size: 5.1 KiB |
49
docs/pages/tutorial/stratigraphy/index.md
Executable file
@@ -0,0 +1,49 @@
|
||||
<ul class="uk-breadcrumb">
|
||||
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials & 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>
|
||||
105
docs/pages/tutorial/stratigraphy/step_01.md
Executable file
@@ -0,0 +1,105 @@
|
||||
<!-- Begin breadcrumb -->
|
||||
<ul class="uk-breadcrumb">
|
||||
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials & 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>
|
||||
179
docs/pages/tutorial/stratigraphy/step_02.md
Executable file
@@ -0,0 +1,179 @@
|
||||
<!-- Begin breadcrumb -->
|
||||
<ul class="uk-breadcrumb">
|
||||
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials & 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>
|
||||
94
docs/pages/tutorial/stratigraphy/step_03.md
Executable file
@@ -0,0 +1,94 @@
|
||||
<!-- Begin breadcrumb -->
|
||||
<ul class="uk-breadcrumb">
|
||||
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials & 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>
|
||||
162
docs/pages/tutorial/stratigraphy/step_04.md
Executable file
@@ -0,0 +1,162 @@
|
||||
<!-- Begin breadcrumb -->
|
||||
<ul class="uk-breadcrumb">
|
||||
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials & 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>
|
||||
186
docs/pages/tutorial/stratigraphy/step_05.md
Executable file
@@ -0,0 +1,186 @@
|
||||
<!-- Begin breadcrumb -->
|
||||
<ul class="uk-breadcrumb">
|
||||
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials & 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>
|
||||
176
docs/pages/tutorial/stratigraphy/step_06.md
Executable file
@@ -0,0 +1,176 @@
|
||||
<!-- Begin breadcrumb -->
|
||||
<ul class="uk-breadcrumb">
|
||||
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials & 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>
|
||||
128
docs/pages/tutorial/stratigraphy/step_07.md
Executable file
@@ -0,0 +1,128 @@
|
||||
<!-- Begin breadcrumb -->
|
||||
<ul class="uk-breadcrumb">
|
||||
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials & 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>
|
||||
250
docs/pages/tutorial/stratigraphy/step_08.md
Executable file
@@ -0,0 +1,250 @@
|
||||
<!-- Begin breadcrumb -->
|
||||
<ul class="uk-breadcrumb">
|
||||
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials & 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>
|
||||
130
docs/pages/tutorial/stratigraphy/step_09.md
Executable file
@@ -0,0 +1,130 @@
|
||||
<!-- Begin breadcrumb -->
|
||||
<ul class="uk-breadcrumb">
|
||||
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials & 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>
|
||||
154
docs/pages/tutorial/stratigraphy/step_10_exo.md
Executable file
@@ -0,0 +1,154 @@
|
||||
<!-- Begin breadcrumb -->
|
||||
<ul class="uk-breadcrumb">
|
||||
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials & 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>
|
||||
158
docs/pages/tutorial/stratigraphy/step_10_fehm.md
Executable file
@@ -0,0 +1,158 @@
|
||||
<!-- Begin breadcrumb -->
|
||||
<ul class="uk-breadcrumb">
|
||||
<li><a href="{{ "/pages/tutorial/index.html" | relative_url }}">Tutorials & 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>
|
||||