599 lines
78 KiB
HTML
Executable File
599 lines
78 KiB
HTML
Executable File
|
||
<!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 — 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%40whu.edu.cn">gyjiang<span>@</span>whu<span>.</span>edu<span>.</span>cn</a>) with technical support from Dylan Harp (<a class="reference external" href="mailto:dharp%40lanl.gov">dharp<span>@</span>lanl<span>.</span>gov</a>) and Terry Miller (<a class="reference external" href="mailto:tamiller%40lanl.gov">tamiller<span>@</span>lanl<span>.</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">'tmp_hex_01.inp'</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">'imt'</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">'itetclr'</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 pset’s 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 node’s 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">'zic'</span><span class="p">,</span> <span class="n">maxZ</span><span class="p">,</span> <span class="s1">'ge'</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">'p_top'</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">'rtz'</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">'p_circle1'</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">'rtz'</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">'p_circle2'</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">'rtz'</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">'p_circle3'</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">'p_region'</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">'id_top_region'</span><span class="p">,</span> <span class="n">vtype</span><span class="o">=</span><span class="s1">'vint'</span><span class="p">,</span> <span class="n">rank</span><span class="o">=</span><span class="s1">'scalar'</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">'id_top_region'</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">'id_top_region'</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">'id_top_region'</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">'id_top_region'</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">'id_top_region'</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">'tmp_surf1_quad.inp'</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">'tmp_surf2_quad.inp'</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">'sf1'</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">'sf2'</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">'le '</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">'gt '</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">' and '</span> <span class="o">+</span> <span class="s1">'le '</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">'gt '</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">'imt'</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">'imt'</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">'imt'</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">'itetclr'</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">'itetclr'</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">'itetclr'</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">'tmp_s1_fm.inp'</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">'tmp_s2_fm.inp'</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">'mosurf1_fplus.inp'</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">'mosurf2_fplus.inp'</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">'mosurf_fault.inp'</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">'sf1_fm'</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">'sf2_fm'</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">'sf1_fp'</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">'sf2_fp'</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">'sf_f'</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">'le '</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">' and '</span> <span class="o">+</span> <span class="s1">'le '</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">'gt '</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">' and '</span> <span class="o">+</span> <span class="s1">'le '</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">' and '</span> <span class="o">+</span> <span class="s1">'le '</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">'gt '</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">' and '</span> <span class="o">+</span> <span class="s1">'le '</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">'le '</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">' and '</span> <span class="o">+</span> <span class="s1">'gt '</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">'gt '</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">' and '</span> <span class="o">+</span> <span class="s1">'le '</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">' and '</span> <span class="o">+</span> <span class="s1">'gt '</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">'gt '</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">' and '</span> <span class="o">+</span> <span class="s1">'gt '</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">'imt'</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">'itetclr'</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">'imt'</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">'imt'</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">'imt'</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">'imt'</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">'imt'</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">'imt'</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">'itetclr'</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">'itetclr'</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">'itetclr'</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">'itetclr'</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">'itetclr'</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">'itetclr'</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">'basin_bnd_ply_rescale.inp'</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">'const'</span><span class="p">,</span> <span class="s1">'volume'</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('3D_vertical_surface.inp')</span>
|
||
<span class="c1">#mo.dump('cube.inp')</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">'sf_bndry'</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">'ge '</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">'exclusive'</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">'inclusive'</span><span class="p">)</span>
|
||
|
||
<span class="c1">#mo.addatt('id_in_out_bndry', vtype='vint', rank='scalar', length='nelements')</span>
|
||
<span class="n">mo</span><span class="o">.</span><span class="n">add_element_attribute</span><span class="p">(</span><span class="s1">'id_in_out_bndry'</span><span class="p">,</span> <span class="n">vtype</span><span class="o">=</span><span class="s1">'vint'</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">'id_in_out_bndry'</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">'id_in_out_bndry'</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">'id_in_out_bndry'</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">'id_in_out_bndry'</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">'id_in_out_bndry'</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="s1">'eq'</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">'id_in_out_bndry'</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">'eq'</span><span class="p">)</span>
|
||
<span class="c1">#eltset2 = mo.eltset_attribute('id_in_out_bndry', 2, 'eq')</span>
|
||
<span class="c1">#eltset1 = mo.eltset_attribute('id_in_out_bndry', 1, 'eq')</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">'f_zone'</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">'f_zone'</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'gt'</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">'f_zone'</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 'wells' 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 <=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">'imt'</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">'tmp_well1.inp'</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">'imt'</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">'tmp_well2.inp'</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">'tmp_wells.inp'</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">'w_zone'</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">'w_zone'</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'gt'</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">'w_zone'</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">'w_zone'</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">'w_zone'</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'gt'</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">'w_zone'</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">'distance_field'</span><span class="p">,</span> <span class="n">attname</span><span class="o">=</span><span class="s1">'dfield_well'</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">'dfield_well'</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="s1">'le'</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">'pwell1'</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">'zone_radius_01.0.zone'</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">'dfield_well'</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">,</span> <span class="s1">'le'</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">'pwell2'</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">'zone_radius_02.0.zone'</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">'dfield_well'</span><span class="p">,</span> <span class="mf">4.0</span><span class="p">,</span> <span class="s1">'le'</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">'pwell4'</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">'zone_radius_04.0.zone'</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">'dfield_well'</span><span class="p">,</span> <span class="mf">8.0</span><span class="p">,</span> <span class="s1">'le'</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">'pwell8'</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">'zone_radius_08.0.zone'</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">'dfield_well'</span><span class="p">,</span> <span class="mf">16.0</span><span class="p">,</span> <span class="s1">'le'</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">'pwell16'</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">'zone_radius_16.0.zone'</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">'dfield_well'</span><span class="p">,</span> <span class="mf">32.0</span><span class="p">,</span> <span class="s1">'le'</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">'pwell32'</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">'zone_radius_32.0.zone'</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">'Hex_mesh.inp'</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">'imt'</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">'itp'</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">'check_interface'</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">'imt'</span><span class="p">,</span> <span class="n">mohex</span><span class="p">,</span> <span class="s1">'imt'</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">'itetclr'</span><span class="p">,</span> <span class="n">mohex</span><span class="p">,</span> <span class="s1">'itetclr'</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('imt', 7, 'eq', (1,0,0), 'pset7')</span>
|
||
<span class="c1">#motet.rmpoint_pset(pset7)</span>
|
||
<span class="c1">#eltset7 = motet.eltset_attribute('itetclr', 7, 'eq')</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">'Tet_mesh.inp'</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">'imt'</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">'itetclr'</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">'Example3'</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">
|
||
©2016, Dylan R. Harp.
|
||
|
||
|
|
||
Powered by <a href="http://sphinx-doc.org/">Sphinx 1.8.5</a>
|
||
& <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>
|