Files
LaGriT/docs/pylagrit/original/static/stratigraphic.html
2025-12-17 11:00:57 +08:00

599 lines
78 KiB
HTML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Stratigraphic Hex Mesh Tutorial &#8212; PyLaGriT 0.0.0 documentation</title>
<link rel="stylesheet" href="static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="static/pygments.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="static/documentation_options.js"></script>
<script type="text/javascript" src="static/jquery.js"></script>
<script type="text/javascript" src="static/underscore.js"></script>
<script type="text/javascript" src="static/doctools.js"></script>
<script type="text/javascript" src="static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Class Documentation" href="autodoc.html" />
<link rel="prev" title="Getting Started" href="gettingstarted.html" />
<link rel="stylesheet" href="static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="stratigraphic-hex-mesh-tutorial">
<h1>Stratigraphic Hex Mesh Tutorial<a class="headerlink" href="#stratigraphic-hex-mesh-tutorial" title="Permalink to this headline"></a></h1>
<p>Written by Guoyan Jiang (<a class="reference external" href="mailto:gyjiang&#37;&#52;&#48;whu&#46;edu&#46;cn">gyjiang<span>&#64;</span>whu<span>&#46;</span>edu<span>&#46;</span>cn</a>) with technical support from Dylan Harp (<a class="reference external" href="mailto:dharp&#37;&#52;&#48;lanl&#46;gov">dharp<span>&#64;</span>lanl<span>&#46;</span>gov</a>) and Terry Miller (<a class="reference external" href="mailto:tamiller&#37;&#52;&#48;lanl&#46;gov">tamiller<span>&#64;</span>lanl<span>&#46;</span>gov</a>).
The associated LaGriT tutorial is <a class="reference external" href="https://lanl.github.io/LaGriT/pages/tutorial/stratigraphy/index.html">here</a>.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># -*- coding: utf-8</span>
<span class="c1"># This script is the PyLaGriT version of LaGriT tutorial example at</span>
<span class="c1"># https://lanl.github.io/LaGriT/pages/tutorial/stratigraphy/index.html.</span>
<span class="c1"># Written by Guoyan Jiang (gyjiang@whu.edu.cn) with technical support</span>
<span class="c1"># from Dylan Harp (dharp@lanl.gov) and Terry Miller (tamiller@lanl.gov). </span>
<span class="c1"># Import PyLaGriT class from pylagrit module</span>
<span class="kn">from</span> <span class="nn">pylagrit</span> <span class="k">import</span> <span class="n">PyLaGriT</span>
<span class="kn">import</span> <span class="nn">numpy</span>
<span class="c1"># Variables</span>
<span class="n">maxX</span> <span class="o">=</span> <span class="mi">4000</span> <span class="c1"># Max value in x direction</span>
<span class="n">maxY</span> <span class="o">=</span> <span class="mi">4000</span> <span class="c1"># Max value in y direction</span>
<span class="n">maxZ</span> <span class="o">=</span> <span class="mi">3000</span> <span class="c1"># Max value in z direction</span>
<span class="n">numX</span> <span class="o">=</span> <span class="mi">51</span> <span class="c1"># Number of points in x direction</span>
<span class="n">numY</span> <span class="o">=</span> <span class="mi">51</span> <span class="c1"># Number of points in y direction</span>
<span class="n">numZ</span> <span class="o">=</span> <span class="mi">26</span> <span class="c1"># Number of points in z direction</span>
<span class="c1"># Create PyLaGriT object</span>
<span class="c1"># This assumes that pylagritrc is being used so that lagrit_exe option does not need to be specified</span>
<span class="n">lg</span> <span class="o">=</span> <span class="n">PyLaGriT</span><span class="p">()</span>
<span class="c1">#********************************************</span>
<span class="c1"># 01 Built HEX Mesh</span>
<span class="c1">#********************************************</span>
<span class="c1"># Create mesh object </span>
<span class="n">mo</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">create_hex</span><span class="p">()</span>
<span class="n">mo</span><span class="o">.</span><span class="n">createpts_brick_xyz</span><span class="p">((</span><span class="n">numX</span><span class="p">,</span> <span class="n">numY</span><span class="p">,</span> <span class="n">numZ</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="n">maxX</span><span class="p">,</span> <span class="n">maxY</span><span class="p">,</span> <span class="n">maxZ</span><span class="p">))</span>
<span class="c1"># Save the mesh object</span>
<span class="n">mo</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;tmp_hex_01.inp&#39;</span><span class="p">)</span>
<span class="c1"># Set vertices (imt) and cells (itetlcr) to 1</span>
<span class="n">mo</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">mo</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="c1"># Set node type from connectivity of mesh</span>
<span class="n">mo</span><span class="o">.</span><span class="n">resetpts_itp</span><span class="p">()</span>
<span class="c1">#********************************************</span>
<span class="c1"># 02 Use psets to identify (for setting boundary conditions, </span>
<span class="c1"># initial conditions, etc.) a set of vertices on the top </span>
<span class="c1"># surface of the mesh</span>
<span class="c1">#********************************************</span>
<span class="c1"># Create a pset named p_top, which contains all nodes (stride = 1 0 0) </span>
<span class="c1"># where the nodes Z value (zic) is greater than or equal to (ge) the top of the mesh (maxZ) </span>
<span class="n">pset0</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_attribute</span><span class="p">(</span><span class="s1">&#39;zic&#39;</span><span class="p">,</span> <span class="n">maxZ</span><span class="p">,</span> <span class="s1">&#39;ge&#39;</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;p_top&#39;</span><span class="p">)</span>
<span class="c1"># Define three cylindrical objects</span>
<span class="n">pset1</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_geom</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">1100</span><span class="p">,</span><span class="mi">360</span><span class="p">,</span><span class="mi">10000</span><span class="p">),</span> <span class="p">(</span><span class="mi">1500</span><span class="p">,</span><span class="mi">1500</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;rtz&#39;</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;p_circle1&#39;</span><span class="p">)</span>
<span class="n">pset2</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_geom</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">1100</span><span class="p">,</span><span class="mi">360</span><span class="p">,</span><span class="mi">10000</span><span class="p">),</span> <span class="p">(</span><span class="mi">2500</span><span class="p">,</span><span class="mi">2500</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;rtz&#39;</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;p_circle2&#39;</span><span class="p">)</span>
<span class="n">pset3</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_geom</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">1100</span><span class="p">,</span><span class="mi">360</span><span class="p">,</span><span class="mi">10000</span><span class="p">),</span> <span class="p">(</span><span class="mi">2500</span><span class="p">,</span><span class="mi">1500</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;rtz&#39;</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;p_circle3&#39;</span><span class="p">)</span>
<span class="c1"># Intersect four psets, points belonging to the union of all given sets are preserved into the pset p_region</span>
<span class="n">pset4</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_inter</span><span class="p">([</span><span class="n">pset0</span><span class="p">,</span> <span class="n">pset1</span><span class="p">,</span> <span class="n">pset2</span><span class="p">,</span> <span class="n">pset3</span><span class="p">],</span> <span class="s1">&#39;p_region&#39;</span><span class="p">)</span>
<span class="c1"># Map psets to an attribute</span>
<span class="n">mo</span><span class="o">.</span><span class="n">addatt</span><span class="p">(</span><span class="s1">&#39;id_top_region&#39;</span><span class="p">,</span> <span class="n">vtype</span><span class="o">=</span><span class="s1">&#39;vint&#39;</span><span class="p">,</span> <span class="n">rank</span><span class="o">=</span><span class="s1">&#39;scalar&#39;</span><span class="p">)</span> <span class="c1"># Creat a node-based attribute id_top_region within the mesh object</span>
<span class="n">mo</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;id_top_region&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="c1">#Fill the entire attribute with 1</span>
<span class="n">pset1</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;id_top_region&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="c1">#Color all nodes in the pset p_circle1 with the value 2</span>
<span class="n">pset2</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;id_top_region&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="n">pset3</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;id_top_region&#39;</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
<span class="n">pset4</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;id_top_region&#39;</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
<span class="c1"># Release the psets from memory</span>
<span class="n">pset0</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">pset1</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">pset2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">pset3</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">pset4</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="c1">#********************************************</span>
<span class="c1"># 03 Build some surfaces to define stratigraphy.</span>
<span class="c1"># In a real model, the surfaces would come from some geologic framework model</span>
<span class="c1"># and would define geologic or hydro-geologic horizons and topography.</span>
<span class="c1">#********************************************</span>
<span class="n">mosurf1</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">create_qua</span><span class="p">()</span> <span class="c1"># Create the top surface</span>
<span class="n">p1</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">1000</span><span class="p">)</span>
<span class="n">p2</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">1500</span><span class="p">)</span>
<span class="n">p3</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mi">2500</span><span class="p">)</span>
<span class="n">p4</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mi">500</span><span class="p">)</span>
<span class="n">pts</span> <span class="o">=</span> <span class="p">[</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="n">p3</span><span class="p">,</span> <span class="n">p4</span><span class="p">]</span>
<span class="n">nnodes</span> <span class="o">=</span> <span class="p">(</span><span class="n">numX</span><span class="p">,</span> <span class="n">numY</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">mosurf1</span><span class="o">.</span><span class="n">quadxy</span><span class="p">(</span><span class="n">nnodes</span><span class="p">,</span> <span class="n">pts</span><span class="p">)</span>
<span class="c1">#mosurf1.paraview()</span>
<span class="n">mosurf1</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="n">mosurf1</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;tmp_surf1_quad.inp&#39;</span><span class="p">)</span>
<span class="n">mosurf2</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">create_qua</span><span class="p">()</span> <span class="c1"># Create the bottom surface</span>
<span class="n">p1</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">1800</span><span class="p">)</span>
<span class="n">p2</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">2100</span><span class="p">)</span>
<span class="n">p3</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mi">2800</span><span class="p">)</span>
<span class="n">p4</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mi">800</span><span class="p">)</span>
<span class="n">pts</span> <span class="o">=</span> <span class="p">[</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="n">p3</span><span class="p">,</span> <span class="n">p4</span><span class="p">]</span>
<span class="n">nnodes</span> <span class="o">=</span> <span class="p">(</span><span class="n">numX</span><span class="p">,</span> <span class="n">numY</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">mosurf2</span><span class="o">.</span><span class="n">quadxy</span><span class="p">(</span><span class="n">nnodes</span><span class="p">,</span> <span class="n">pts</span><span class="p">)</span>
<span class="c1">#mosurf2.paraview()</span>
<span class="n">mosurf2</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="n">mosurf2</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;tmp_surf2_quad.inp&#39;</span><span class="p">)</span>
<span class="c1">#********************************************</span>
<span class="c1"># 04 Use the surfaces to define regions and set</span>
<span class="c1"># vertex and cell ids</span>
<span class="c1">#********************************************</span>
<span class="c1"># Define Regions</span>
<span class="n">sf1</span> <span class="o">=</span> <span class="n">mosurf1</span><span class="o">.</span><span class="n">surface</span><span class="p">(</span><span class="s1">&#39;sf1&#39;</span><span class="p">)</span>
<span class="n">sf2</span> <span class="o">=</span> <span class="n">mosurf2</span><span class="o">.</span><span class="n">surface</span><span class="p">(</span><span class="s1">&#39;sf2&#39;</span><span class="p">)</span>
<span class="n">r1</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">region</span><span class="p">(</span><span class="s1">&#39;le &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf1</span><span class="p">))</span>
<span class="n">r2</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">region</span><span class="p">(</span><span class="s1">&#39;gt &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf1</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; and &#39;</span> <span class="o">+</span> <span class="s1">&#39;le &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf2</span><span class="p">))</span>
<span class="n">r3</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">region</span><span class="p">(</span><span class="s1">&#39;gt &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf2</span><span class="p">))</span>
<span class="n">mosurf1</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">mosurf2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="c1"># Create Eltsets and PSets from Regions</span>
<span class="n">pset1</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_region</span><span class="p">(</span><span class="n">r1</span><span class="p">)</span>
<span class="n">pset2</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_region</span><span class="p">(</span><span class="n">r2</span><span class="p">)</span>
<span class="n">pset3</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_region</span><span class="p">(</span><span class="n">r3</span><span class="p">)</span>
<span class="n">eltset1</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_region</span><span class="p">(</span><span class="n">r1</span><span class="p">)</span>
<span class="n">eltset2</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_region</span><span class="p">(</span><span class="n">r2</span><span class="p">)</span>
<span class="n">eltset3</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_region</span><span class="p">(</span><span class="n">r3</span><span class="p">)</span>
<span class="c1">#Set Attributes from Eltsets and PSets</span>
<span class="n">pset1</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">pset2</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">pset3</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="n">eltset1</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">eltset2</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">eltset3</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="c1">#********************************************</span>
<span class="c1"># 05 Build a fault surface and define stratigraphy </span>
<span class="c1"># on each side of the fault</span>
<span class="c1">#********************************************</span>
<span class="c1"># Create fault surface and surfaces to either side of fault</span>
<span class="n">mosurf1_fminus</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">create_qua</span><span class="p">()</span>
<span class="n">p1</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">1000</span><span class="p">)</span>
<span class="n">p2</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">1500</span><span class="p">)</span>
<span class="n">p3</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mi">2500</span><span class="p">)</span>
<span class="n">p4</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mi">500</span><span class="p">)</span>
<span class="n">pts</span> <span class="o">=</span> <span class="p">[</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="n">p3</span><span class="p">,</span> <span class="n">p4</span><span class="p">]</span>
<span class="n">nnodes</span> <span class="o">=</span> <span class="p">(</span><span class="n">numX</span><span class="p">,</span> <span class="n">numY</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">mosurf1_fminus</span> <span class="o">.</span><span class="n">quadxy</span><span class="p">(</span><span class="n">nnodes</span><span class="p">,</span> <span class="n">pts</span><span class="p">)</span>
<span class="c1">#mosurf1_fminus .paraview()</span>
<span class="n">mosurf1_fminus</span> <span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="n">mosurf1_fminus</span> <span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;tmp_s1_fm.inp&#39;</span><span class="p">)</span>
<span class="n">mosurf2_fminus</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">create_qua</span><span class="p">()</span>
<span class="n">p1</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">1800</span><span class="p">)</span>
<span class="n">p2</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">2100</span><span class="p">)</span>
<span class="n">p3</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mi">2800</span><span class="p">)</span>
<span class="n">p4</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mi">800</span><span class="p">)</span>
<span class="n">pts</span> <span class="o">=</span> <span class="p">[</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="n">p3</span><span class="p">,</span> <span class="n">p4</span><span class="p">]</span>
<span class="n">nnodes</span> <span class="o">=</span> <span class="p">(</span><span class="n">numX</span><span class="p">,</span> <span class="n">numY</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">mosurf2_fminus</span><span class="o">.</span><span class="n">quadxy</span><span class="p">(</span><span class="n">nnodes</span><span class="p">,</span> <span class="n">pts</span><span class="p">)</span>
<span class="c1">#mosurf2_fminus.paraview()</span>
<span class="n">mosurf2_fminus</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="n">mosurf2_fminus</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;tmp_s2_fm.inp&#39;</span><span class="p">)</span>
<span class="n">mosurf1_fplus</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">create_qua</span><span class="p">()</span>
<span class="n">p1</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">1400</span><span class="p">)</span>
<span class="n">p2</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">1900</span><span class="p">)</span>
<span class="n">p3</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mi">2900</span><span class="p">)</span>
<span class="n">p4</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mi">900</span><span class="p">)</span>
<span class="n">pts</span> <span class="o">=</span> <span class="p">[</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="n">p3</span><span class="p">,</span> <span class="n">p4</span><span class="p">]</span>
<span class="n">nnodes</span> <span class="o">=</span> <span class="p">(</span><span class="n">numX</span><span class="p">,</span> <span class="n">numY</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">mosurf1_fplus</span><span class="o">.</span><span class="n">quadxy</span><span class="p">(</span><span class="n">nnodes</span><span class="p">,</span> <span class="n">pts</span><span class="p">)</span>
<span class="c1">#mosurf1_fplus.paraview()</span>
<span class="n">mosurf1_fplus</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="n">mosurf1_fplus</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;mosurf1_fplus.inp&#39;</span><span class="p">)</span>
<span class="n">mosurf2_fplus</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">create_qua</span><span class="p">()</span>
<span class="n">p1</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">2200</span><span class="p">)</span>
<span class="n">p2</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">2500</span><span class="p">)</span>
<span class="n">p3</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mi">3200</span><span class="p">)</span>
<span class="n">p4</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mi">1200</span><span class="p">)</span>
<span class="n">pts</span> <span class="o">=</span> <span class="p">[</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="n">p3</span><span class="p">,</span> <span class="n">p4</span><span class="p">]</span>
<span class="n">nnodes</span> <span class="o">=</span> <span class="p">(</span><span class="n">numX</span><span class="p">,</span> <span class="n">numY</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">mosurf2_fplus</span><span class="o">.</span><span class="n">quadxy</span><span class="p">(</span><span class="n">nnodes</span><span class="p">,</span> <span class="n">pts</span><span class="p">)</span>
<span class="c1">#mosurf2_fplus.paraview()</span>
<span class="n">mosurf2_fplus</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="n">mosurf2_fplus</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;mosurf2_fplus.inp&#39;</span><span class="p">)</span>
<span class="n">mosurf_fault</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">create_qua</span><span class="p">()</span>
<span class="n">p1</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.e4</span><span class="p">)</span>
<span class="n">p2</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.e4</span><span class="p">)</span>
<span class="n">p3</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4020</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mf">1.e4</span><span class="p">)</span>
<span class="n">p4</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">4020</span><span class="p">,</span> <span class="mf">1.e4</span><span class="p">)</span>
<span class="n">pts</span> <span class="o">=</span> <span class="p">[</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="n">p3</span><span class="p">,</span> <span class="n">p4</span><span class="p">]</span>
<span class="n">nnodes</span> <span class="o">=</span> <span class="p">(</span><span class="n">numX</span><span class="p">,</span> <span class="n">numY</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">mosurf_fault</span><span class="o">.</span><span class="n">quadxy</span><span class="p">(</span><span class="n">nnodes</span><span class="p">,</span> <span class="n">pts</span><span class="p">)</span>
<span class="c1">#mosurf_fault.paraview()</span>
<span class="n">mosurf_fault</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="n">mosurf_fault</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;mosurf_fault.inp&#39;</span><span class="p">)</span>
<span class="c1"># Define geometry of hydrostratigraphic model</span>
<span class="n">sf1_fm</span> <span class="o">=</span> <span class="n">mosurf1_fminus</span><span class="o">.</span><span class="n">surface</span><span class="p">(</span><span class="s1">&#39;sf1_fm&#39;</span><span class="p">)</span>
<span class="n">sf2_fm</span> <span class="o">=</span> <span class="n">mosurf2_fminus</span><span class="o">.</span><span class="n">surface</span><span class="p">(</span><span class="s1">&#39;sf2_fm&#39;</span><span class="p">)</span>
<span class="n">sf1_fp</span> <span class="o">=</span> <span class="n">mosurf1_fplus</span><span class="o">.</span><span class="n">surface</span><span class="p">(</span><span class="s1">&#39;sf1_fp&#39;</span><span class="p">)</span>
<span class="n">sf2_fp</span> <span class="o">=</span> <span class="n">mosurf2_fplus</span><span class="o">.</span><span class="n">surface</span><span class="p">(</span><span class="s1">&#39;sf2_fp&#39;</span><span class="p">)</span>
<span class="n">sf_f</span> <span class="o">=</span> <span class="n">mosurf_fault</span><span class="o">.</span><span class="n">surface</span><span class="p">(</span><span class="s1">&#39;sf_f&#39;</span><span class="p">)</span>
<span class="n">r1_fm</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">region</span><span class="p">(</span><span class="s1">&#39;le &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf1_fm</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; and &#39;</span> <span class="o">+</span> <span class="s1">&#39;le &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf_f</span><span class="p">))</span>
<span class="n">r2_fm</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">region</span><span class="p">(</span><span class="s1">&#39;gt &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf1_fm</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; and &#39;</span> <span class="o">+</span> <span class="s1">&#39;le &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf2_fm</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; and &#39;</span> <span class="o">+</span> <span class="s1">&#39;le &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf_f</span><span class="p">))</span>
<span class="n">r3_fm</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">region</span><span class="p">(</span><span class="s1">&#39;gt &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf2_fm</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; and &#39;</span> <span class="o">+</span> <span class="s1">&#39;le &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf_f</span><span class="p">))</span>
<span class="n">r1_fp</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">region</span><span class="p">(</span><span class="s1">&#39;le &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf1_fp</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; and &#39;</span> <span class="o">+</span> <span class="s1">&#39;gt &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf_f</span><span class="p">))</span>
<span class="n">r2_fp</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">region</span><span class="p">(</span><span class="s1">&#39;gt &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf1_fp</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; and &#39;</span> <span class="o">+</span> <span class="s1">&#39;le &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf2_fp</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; and &#39;</span> <span class="o">+</span> <span class="s1">&#39;gt &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf_f</span><span class="p">))</span>
<span class="n">r3_fp</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">region</span><span class="p">(</span><span class="s1">&#39;gt &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf2_fp</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; and &#39;</span> <span class="o">+</span> <span class="s1">&#39;gt &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf_f</span><span class="p">))</span>
<span class="n">mosurf1_fminus</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">mosurf2_fminus</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">mosurf1_fplus</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">mosurf2_fplus</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">mosurf_fault</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="c1"># Set fault node and element materials</span>
<span class="n">pset1_fm</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_region</span><span class="p">(</span><span class="n">r1_fm</span><span class="p">)</span>
<span class="n">pset2_fm</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_region</span><span class="p">(</span><span class="n">r2_fm</span><span class="p">)</span>
<span class="n">pset3_fm</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_region</span><span class="p">(</span><span class="n">r3_fm</span><span class="p">)</span>
<span class="n">pset1_fp</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_region</span><span class="p">(</span><span class="n">r1_fp</span><span class="p">)</span>
<span class="n">pset2_fp</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_region</span><span class="p">(</span><span class="n">r2_fp</span><span class="p">)</span>
<span class="n">pset3_fp</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_region</span><span class="p">(</span><span class="n">r3_fp</span><span class="p">)</span>
<span class="n">eltset1_fm</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_region</span><span class="p">(</span><span class="n">r1_fm</span><span class="p">)</span>
<span class="n">eltset2_fm</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_region</span><span class="p">(</span><span class="n">r2_fm</span><span class="p">)</span>
<span class="n">eltset3_fm</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_region</span><span class="p">(</span><span class="n">r3_fm</span><span class="p">)</span>
<span class="n">eltset1_fp</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_region</span><span class="p">(</span><span class="n">r1_fp</span><span class="p">)</span>
<span class="n">eltset2_fp</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_region</span><span class="p">(</span><span class="n">r2_fp</span><span class="p">)</span>
<span class="n">eltset3_fp</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_region</span><span class="p">(</span><span class="n">r3_fp</span><span class="p">)</span>
<span class="c1">#Set Attributes from Eltsets and PSets</span>
<span class="n">mo</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
<span class="n">mo</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
<span class="n">pset1_fm</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">pset2_fm</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">pset3_fm</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="n">pset1_fp</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
<span class="n">pset2_fp</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
<span class="n">pset3_fp</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
<span class="n">eltset1_fm</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">eltset2_fm</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">eltset3_fm</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="n">eltset1_fp</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
<span class="n">eltset2_fp</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
<span class="n">eltset3_fp</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
<span class="c1">#********************************************</span>
<span class="c1"># 06 Define a polyline and truncate the exterior boundary of the mesh with the polyline</span>
<span class="c1">#********************************************</span>
<span class="c1"># Read boundary polygon file</span>
<span class="n">mobndry</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s1">&#39;basin_bnd_ply_rescale.inp&#39;</span><span class="p">)</span>
<span class="c1"># Extrude the polyline into a vertical surface</span>
<span class="n">mofence</span> <span class="o">=</span> <span class="n">mobndry</span><span class="o">.</span><span class="n">extrude</span><span class="p">(</span><span class="mi">3200</span><span class="p">,</span> <span class="s1">&#39;const&#39;</span><span class="p">,</span> <span class="s1">&#39;volume&#39;</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="n">mobndry</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="n">mofence</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="c1"># Translate the extrusion to make it cover the vertical extent of the hex mesh</span>
<span class="n">mofence</span><span class="o">.</span><span class="n">trans</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">3100</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span> <span class="p">,</span><span class="mi">0</span><span class="p">))</span>
<span class="n">mofence</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="c1">#mofence.paraview()</span>
<span class="c1">#mofence.dump(&#39;3D_vertical_surface.inp&#39;)</span>
<span class="c1">#mo.dump(&#39;cube.inp&#39;)</span>
<span class="c1"># Truncate mesh</span>
<span class="n">sf_bndry</span> <span class="o">=</span> <span class="n">mofence</span><span class="o">.</span><span class="n">surface</span><span class="p">(</span><span class="s1">&#39;sf_bndry&#39;</span><span class="p">)</span>
<span class="n">r_bndry</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">region</span><span class="p">(</span><span class="s1">&#39;ge &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sf_bndry</span><span class="p">))</span>
<span class="n">pset_bndry</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_region</span><span class="p">(</span><span class="n">r_bndry</span><span class="p">)</span>
<span class="n">mobndry</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">mofence</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="c1"># Method 1: Only remove a cell if ALL vertices are outside</span>
<span class="n">e_delete1</span> <span class="o">=</span> <span class="n">pset_bndry</span><span class="o">.</span><span class="n">eltset</span><span class="p">(</span><span class="s1">&#39;exclusive&#39;</span><span class="p">)</span>
<span class="c1"># Method 2: Remove a cell if the centroid (average of all vertices) is outside</span>
<span class="n">e_delete2</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_region</span><span class="p">(</span><span class="n">r_bndry</span><span class="p">)</span>
<span class="c1"># Method 3: Remove a cell if one or more vertices are outside</span>
<span class="n">e_delete3</span> <span class="o">=</span> <span class="n">pset_bndry</span><span class="o">.</span><span class="n">eltset</span><span class="p">(</span><span class="s1">&#39;inclusive&#39;</span><span class="p">)</span>
<span class="c1">#mo.addatt(&#39;id_in_out_bndry&#39;, vtype=&#39;vint&#39;, rank=&#39;scalar&#39;, length=&#39;nelements&#39;)</span>
<span class="n">mo</span><span class="o">.</span><span class="n">add_element_attribute</span><span class="p">(</span><span class="s1">&#39;id_in_out_bndry&#39;</span><span class="p">,</span> <span class="n">vtype</span><span class="o">=</span><span class="s1">&#39;vint&#39;</span><span class="p">)</span>
<span class="n">mo</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;id_in_out_bndry&#39;</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="c1">#Fill the entire attribute with 4</span>
<span class="n">e_delete3</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;id_in_out_bndry&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="n">e_delete2</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;id_in_out_bndry&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">e_delete1</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;id_in_out_bndry&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">eltset4</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_attribute</span><span class="p">(</span><span class="s1">&#39;id_in_out_bndry&#39;</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="s1">&#39;eq&#39;</span><span class="p">)</span>
<span class="n">eltset3</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_attribute</span><span class="p">(</span><span class="s1">&#39;id_in_out_bndry&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">&#39;eq&#39;</span><span class="p">)</span>
<span class="c1">#eltset2 = mo.eltset_attribute(&#39;id_in_out_bndry&#39;, 2, &#39;eq&#39;)</span>
<span class="c1">#eltset1 = mo.eltset_attribute(&#39;id_in_out_bndry&#39;, 1, &#39;eq&#39;)</span>
<span class="n">mo</span><span class="o">.</span><span class="n">rmpoint_eltset</span><span class="p">(</span><span class="n">eltset4</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
<span class="n">mo</span><span class="o">.</span><span class="n">rmpoint_eltset</span><span class="p">(</span><span class="n">eltset3</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="c1">#********************************************</span>
<span class="c1"># 07 Refine the mesh around the fault</span>
<span class="c1">#********************************************</span>
<span class="n">f_zone</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">intersect_elements</span><span class="p">(</span><span class="n">sf_f</span><span class="p">,</span> <span class="s1">&#39;f_zone&#39;</span><span class="p">)</span>
<span class="n">fz_i</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_attribute</span><span class="p">(</span><span class="s1">&#39;f_zone&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;gt&#39;</span><span class="p">)</span> <span class="c1">#Non-zero indicates intersection</span>
<span class="n">fz_i</span><span class="o">.</span><span class="n">refine</span><span class="p">()</span>
<span class="n">mo</span><span class="o">.</span><span class="n">delatt</span><span class="p">(</span><span class="s1">&#39;f_zone&#39;</span><span class="p">)</span>
<span class="n">mo</span><span class="o">.</span><span class="n">status</span> <span class="p">(</span><span class="n">brief</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="c1">#sf_f.delete()</span>
<span class="c1">#sf1_fm.delete()</span>
<span class="c1">#sf2_fm.delete()</span>
<span class="c1">#sf1_fp.delete()</span>
<span class="c1">#sf1_fp.delete()</span>
<span class="c1">#sf_bndry.delete()</span>
<span class="c1">#********************************************</span>
<span class="c1"># 08 Insert a couple of &#39;wells&#39; by refining the mesh and identifying a line of nodes</span>
<span class="c1"># that will be the well source/sink for boundary conditions.</span>
<span class="c1">#********************************************</span>
<span class="n">Well1X</span> <span class="o">=</span> <span class="mf">1234.56</span>
<span class="n">Well1Y</span> <span class="o">=</span> <span class="mf">1987.65</span>
<span class="n">Well2X</span> <span class="o">=</span> <span class="mf">2243.21</span>
<span class="n">Well2Y</span> <span class="o">=</span> <span class="mf">1212.34</span>
<span class="n">Radius</span> <span class="o">=</span> <span class="mi">25</span>
<span class="n">NRadius</span> <span class="o">=</span> <span class="mi">2</span>
<span class="c1">#Well 1</span>
<span class="n">mowell1</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">create_tet</span><span class="p">()</span>
<span class="n">mowell1</span><span class="o">.</span><span class="n">createpts_rtz</span><span class="p">((</span><span class="n">NRadius</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="n">numZ</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">3100</span><span class="p">),</span> <span class="p">(</span><span class="n">Radius</span><span class="p">,</span> <span class="mi">360</span><span class="p">,</span> <span class="mi">1500</span><span class="p">))</span> <span class="c1">#Create a cylindrical point cloud </span>
<span class="n">mowell1</span><span class="o">.</span><span class="n">filter</span><span class="p">()</span> <span class="c1"># Filter (delete) points that are too close ( default distance &lt;=1.e-16) or duplicate points</span>
<span class="n">mowell1</span><span class="o">.</span><span class="n">rmpoint_compress</span><span class="p">()</span> <span class="c1"># Remove all marked nodes and correct the itet array</span>
<span class="n">mowell1</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">mowell1</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span> <span class="c1"># Connect the point cloud</span>
<span class="n">mowell1</span><span class="o">.</span><span class="n">resetpts_itp</span><span class="p">()</span>
<span class="n">mowell1</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="n">mowell1</span><span class="o">.</span><span class="n">trans</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="n">Well1X</span><span class="p">,</span> <span class="n">Well1Y</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="n">mowell1</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="c1">#mowell1.paraview()</span>
<span class="n">mowell1</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;tmp_well1.inp&#39;</span><span class="p">)</span>
<span class="c1">#Well 2</span>
<span class="n">mowell2</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">create_tet</span><span class="p">()</span>
<span class="n">mowell2</span><span class="o">.</span><span class="n">createpts_rtz</span><span class="p">((</span><span class="n">NRadius</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="n">numZ</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">3100</span><span class="p">),</span> <span class="p">(</span><span class="n">Radius</span><span class="p">,</span> <span class="mi">360</span><span class="p">,</span> <span class="mi">2200</span><span class="p">))</span>
<span class="n">mowell2</span><span class="o">.</span><span class="n">filter</span><span class="p">()</span>
<span class="n">mowell2</span><span class="o">.</span><span class="n">rmpoint_compress</span><span class="p">()</span>
<span class="n">mowell2</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">mowell2</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
<span class="n">mowell2</span><span class="o">.</span><span class="n">resetpts_itp</span><span class="p">()</span>
<span class="n">mowell2</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="n">mowell2</span><span class="o">.</span><span class="n">trans</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="n">Well2X</span><span class="p">,</span> <span class="n">Well2Y</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="n">mowell2</span><span class="o">.</span><span class="n">minmax_xyz</span><span class="p">()</span>
<span class="c1">#mowell2.paraview()</span>
<span class="n">mowell2</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;tmp_well2.inp&#39;</span><span class="p">)</span>
<span class="c1"># Join the two distinct wells into a single mesh object </span>
<span class="n">mowells</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">merge</span><span class="p">([</span><span class="n">mowell1</span><span class="p">,</span> <span class="n">mowell2</span><span class="p">])</span>
<span class="n">mowells</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;tmp_wells.inp&#39;</span><span class="p">)</span>
<span class="c1">#mowells.paraview()</span>
<span class="c1"># Refine the mo around the wells</span>
<span class="c1"># First pass refinement</span>
<span class="n">w_zone</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">intersect_elements</span><span class="p">(</span><span class="n">mowells</span><span class="p">,</span> <span class="s1">&#39;w_zone&#39;</span><span class="p">)</span>
<span class="n">wz_i</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_attribute</span><span class="p">(</span><span class="s1">&#39;w_zone&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;gt&#39;</span><span class="p">)</span> <span class="c1">#Non-zero indicates intersection</span>
<span class="n">wz_i</span><span class="o">.</span><span class="n">refine</span><span class="p">()</span>
<span class="n">mo</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;w_zone&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="c1">#wz_i.delete()</span>
<span class="c1"># Second pass refinement</span>
<span class="n">w_zone</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">intersect_elements</span><span class="p">(</span><span class="n">mowells</span><span class="p">,</span> <span class="s1">&#39;w_zone&#39;</span><span class="p">)</span>
<span class="n">wz_i</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">eltset_attribute</span><span class="p">(</span><span class="s1">&#39;w_zone&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;gt&#39;</span><span class="p">)</span> <span class="c1">#Non-zero indicates intersection</span>
<span class="n">wz_i</span><span class="o">.</span><span class="n">refine</span><span class="p">()</span>
<span class="n">mo</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;w_zone&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="c1">#wz_i.delete()</span>
<span class="n">mohex</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">grid2grid_tree_to_fe</span><span class="p">()</span> <span class="c1">#Quadtree or octree grid to grid</span>
<span class="c1">#mo.status (brief=True)</span>
<span class="c1"># Identify the column of vertices closest to the well center.</span>
<span class="c1">#Well1</span>
<span class="n">mo_pts1</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>
<span class="n">mo_pts1</span><span class="o">.</span><span class="n">createpts_rtz</span><span class="p">((</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1000</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">3100</span><span class="p">),</span> <span class="p">(</span><span class="n">Radius</span><span class="p">,</span> <span class="mi">360</span><span class="p">,</span> <span class="mi">2200</span><span class="p">))</span>
<span class="n">mo_pts1</span><span class="o">.</span><span class="n">trans</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="n">Well1X</span><span class="p">,</span> <span class="n">Well1Y</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="c1">#Well2</span>
<span class="n">mo_pts2</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>
<span class="n">mo_pts2</span><span class="o">.</span><span class="n">createpts_rtz</span><span class="p">((</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1000</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">3100</span><span class="p">),</span> <span class="p">(</span><span class="n">Radius</span><span class="p">,</span> <span class="mi">360</span><span class="p">,</span> <span class="mi">2200</span><span class="p">))</span>
<span class="n">mo_pts2</span><span class="o">.</span><span class="n">trans</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="n">Well2X</span><span class="p">,</span> <span class="n">Well2Y</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="n">mo_pts</span> <span class="o">=</span> <span class="n">lg</span><span class="o">.</span><span class="n">merge</span><span class="p">([</span><span class="n">mo_pts1</span><span class="p">,</span> <span class="n">mo_pts2</span><span class="p">])</span>
<span class="n">mo_pts</span><span class="o">.</span><span class="n">filter</span><span class="p">()</span>
<span class="n">mo_pts</span><span class="o">.</span><span class="n">rmpoint_compress</span><span class="p">()</span>
<span class="c1"># Compute a distance field attribute</span>
<span class="n">mo</span><span class="o">.</span><span class="n">compute_distance</span><span class="p">(</span><span class="n">mo_pts</span><span class="p">,</span> <span class="n">option</span><span class="o">=</span><span class="s1">&#39;distance_field&#39;</span><span class="p">,</span> <span class="n">attname</span><span class="o">=</span><span class="s1">&#39;dfield_well&#39;</span><span class="p">)</span>
<span class="n">mo_pts1</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">mo_pts2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">mo_pts</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">mowell1</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">mowell2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">mowells</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="c1"># Describe all nodes within 32, 16, 8, 4, 2 and 1 meters of the wells.</span>
<span class="n">pwell</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_attribute</span><span class="p">(</span><span class="s1">&#39;dfield_well&#39;</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="s1">&#39;le&#39;</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;pwell1&#39;</span><span class="p">)</span>
<span class="n">pwell</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;zone_radius_01.0.zone&#39;</span><span class="p">)</span>
<span class="n">pwell</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_attribute</span><span class="p">(</span><span class="s1">&#39;dfield_well&#39;</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">,</span> <span class="s1">&#39;le&#39;</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;pwell2&#39;</span><span class="p">)</span>
<span class="n">pwell</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;zone_radius_02.0.zone&#39;</span><span class="p">)</span>
<span class="n">pwell</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_attribute</span><span class="p">(</span><span class="s1">&#39;dfield_well&#39;</span><span class="p">,</span> <span class="mf">4.0</span><span class="p">,</span> <span class="s1">&#39;le&#39;</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;pwell4&#39;</span><span class="p">)</span>
<span class="n">pwell</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;zone_radius_04.0.zone&#39;</span><span class="p">)</span>
<span class="n">pwell</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_attribute</span><span class="p">(</span><span class="s1">&#39;dfield_well&#39;</span><span class="p">,</span> <span class="mf">8.0</span><span class="p">,</span> <span class="s1">&#39;le&#39;</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;pwell8&#39;</span><span class="p">)</span>
<span class="n">pwell</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;zone_radius_08.0.zone&#39;</span><span class="p">)</span>
<span class="n">pwell</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_attribute</span><span class="p">(</span><span class="s1">&#39;dfield_well&#39;</span><span class="p">,</span> <span class="mf">16.0</span><span class="p">,</span> <span class="s1">&#39;le&#39;</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;pwell16&#39;</span><span class="p">)</span>
<span class="n">pwell</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;zone_radius_16.0.zone&#39;</span><span class="p">)</span>
<span class="n">pwell</span> <span class="o">=</span> <span class="n">mo</span><span class="o">.</span><span class="n">pset_attribute</span><span class="p">(</span><span class="s1">&#39;dfield_well&#39;</span><span class="p">,</span> <span class="mf">32.0</span><span class="p">,</span> <span class="s1">&#39;le&#39;</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="s1">&#39;pwell32&#39;</span><span class="p">)</span>
<span class="n">pwell</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;zone_radius_32.0.zone&#39;</span><span class="p">)</span>
<span class="n">mo</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;Hex_mesh.inp&#39;</span><span class="p">)</span>
<span class="c1">#********************************************</span>
<span class="c1"># 09 Convert hex mesh to tet mesh</span>
<span class="c1">#********************************************</span>
<span class="n">motet</span> <span class="o">=</span> <span class="n">mohex</span><span class="o">.</span><span class="n">copypts</span><span class="p">()</span>
<span class="n">motet</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">motet</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itp&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">motet</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">option1</span><span class="o">=</span><span class="s1">&#39;check_interface&#39;</span><span class="p">)</span>
<span class="n">motet</span><span class="o">.</span><span class="n">resetpts_itp</span><span class="p">()</span>
<span class="n">motet</span><span class="o">.</span><span class="n">interpolate_voronoi</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">,</span> <span class="n">mohex</span><span class="p">,</span> <span class="s1">&#39;imt&#39;</span><span class="p">)</span>
<span class="n">motet</span><span class="o">.</span><span class="n">interpolate_map</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="n">mohex</span><span class="p">,</span> <span class="s1">&#39;itetclr&#39;</span><span class="p">)</span>
<span class="c1">#Remove all nodes and elements with imt and itetclr values of 7</span>
<span class="n">motet</span><span class="o">.</span><span class="n">rmmat</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span>
<span class="c1">#pset7 = motet.pset_attribute(&#39;imt&#39;, 7, &#39;eq&#39;, (1,0,0), &#39;pset7&#39;)</span>
<span class="c1">#motet.rmpoint_pset(pset7)</span>
<span class="c1">#eltset7 = motet.eltset_attribute(&#39;itetclr&#39;, 7, &#39;eq&#39;)</span>
<span class="c1">#motet.rmpoint_eltset(eltset7, True, True)</span>
<span class="n">motet</span><span class="o">.</span><span class="n">rmpoint_compress</span><span class="p">()</span>
<span class="n">motet</span><span class="o">.</span><span class="n">resetpts_itp</span><span class="p">()</span>
<span class="c1"># Visualize connected mesh using ParaView</span>
<span class="c1"># This assumes that pylagritrc is being used so that exe option does not need to be specified</span>
<span class="c1">#motet.paraview()</span>
<span class="n">motet</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;Tet_mesh.inp&#39;</span><span class="p">)</span>
<span class="c1">#********************************************</span>
<span class="c1"># 10 Write tet mesh files for FEHM</span>
<span class="c1"># FEHM uses node based materials and properties</span>
<span class="c1">#********************************************</span>
<span class="c1">#motet.resetpts_parent()</span>
<span class="n">motet</span><span class="o">.</span><span class="n">filter</span><span class="p">()</span>
<span class="n">motet</span><span class="o">.</span><span class="n">rmpoint_compress</span><span class="p">()</span>
<span class="n">motet</span><span class="o">.</span><span class="n">resetpts_itp</span><span class="p">()</span>
<span class="n">motet</span><span class="o">.</span><span class="n">minmax</span><span class="p">(</span><span class="s1">&#39;imt&#39;</span><span class="p">)</span>
<span class="n">motet</span><span class="o">.</span><span class="n">setatt</span><span class="p">(</span><span class="s1">&#39;itetclr&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="c1">#motet. tri_mesh_output_prep()</span>
<span class="n">motet</span><span class="o">.</span><span class="n">dump_fehm</span><span class="p">(</span><span class="s1">&#39;Example3&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p>The final result:</p>
<img alt="images/stratigraphy.png" src="images/stratigraphy.png" />
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">PyLaGriT</a></h1>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="gettingstarted.html">Getting Started</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Stratigraphic Hex Mesh Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="autodoc.html">Class Documentation</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="gettingstarted.html" title="previous chapter">Getting Started</a></li>
<li>Next: <a href="autodoc.html" title="next chapter">Class Documentation</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2016, Dylan R. Harp.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 1.8.5</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="sources/stratigraphic.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>