initial upload

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

1
documentation/lagrit_manual/.idea/.name generated Executable file
View File

@@ -0,0 +1 @@
lagrit_manual

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
</project>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

4
documentation/lagrit_manual/.idea/misc.xml generated Executable file
View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.6 (/usr/bin/python2.7)" project-jdk-type="Python SDK" />
</project>

8
documentation/lagrit_manual/.idea/modules.xml generated Executable file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/lagrit_manual.iml" filepath="$PROJECT_DIR$/.idea/lagrit_manual.iml" />
</modules>
</component>
</project>

View File

@@ -0,0 +1,5 @@
<component name="DependencyValidationManager">
<state>
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
</state>
</component>

6
documentation/lagrit_manual/.idea/vcs.xml generated Executable file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="" />
</component>
</project>

298
documentation/lagrit_manual/.idea/workspace.xml generated Executable file
View File

@@ -0,0 +1,298 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="c4e042f3-a4ff-43f7-8b20-be074caed9cc" name="Default" comment="" />
<ignored path="lagrit_manual.iws" />
<ignored path=".idea/workspace.xml" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
<component name="CreatePatchCommitExecutor">
<option name="PATCH_PATH" value="" />
</component>
<component name="DaemonCodeAnalyzer">
<disable_hints />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
<component name="FavoritesManager">
<favorites_list name="lagrit_manual" />
</component>
<component name="FileEditorManager">
<leaf>
<file leaf-file-name="read_commands.py" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/read_commands.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.78988326" vertical-offset="818" max-vertical-offset="1332">
<caret line="68" column="0" selection-start-line="68" selection-start-column="0" selection-end-line="68" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/read_commands.py" />
</list>
</option>
</component>
<component name="ProjectFrameBounds">
<option name="x" value="209" />
<option name="width" value="1400" />
<option name="height" value="912" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<autoscrollToSource />
<autoscrollFromSource />
<sortByType />
</navigator>
<panes>
<pane id="ProjectPane">
<subPane>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="lagrit_manual" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="lagrit_manual" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="lagrit_manual" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="FullScreen" value="false" />
</component>
<component name="PyConsoleOptionsProvider">
<option name="myPythonConsoleState">
<console-settings />
</option>
</component>
<component name="RunManager">
<configuration default="true" type="tests" factoryName="py.test">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="lagrit_manual" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<option name="testToRun" value="" />
<option name="keywords" value="" />
<option name="params" value="" />
<option name="USE_PARAM" value="false" />
<option name="USE_KEYWORD" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Nosetests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="lagrit_manual" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<option name="PARAMS" value="" />
<option name="USE_PARAM" value="false" />
<method />
</configuration>
<configuration default="true" type="PythonConfigurationType" factoryName="Python">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="lagrit_manual" />
<option name="SCRIPT_NAME" value="" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Unittests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="lagrit_manual" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<option name="PUREUNITTEST" value="true" />
<option name="PARAMS" value="" />
<option name="USE_PARAM" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Doctests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="lagrit_manual" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Attests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="lagrit_manual" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<method />
</configuration>
<list size="0" />
</component>
<component name="ShelveChangesManager" show_recycled="false" />
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="c4e042f3-a4ff-43f7-8b20-be074caed9cc" name="Default" comment="" />
<created>1419363299923</created>
<option name="number" value="Default" />
<updated>1419363299923</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="209" y="0" width="1400" height="912" extended-state="0" />
<editor active="false" />
<layout>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.31863979" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.25345957" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3299748" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
</layout>
</component>
<component name="Vcs.Log.UiProperties">
<option name="RECENTLY_FILTERED_USER_GROUPS">
<collection />
</option>
<option name="RECENTLY_FILTERED_BRANCH_GROUPS">
<collection />
</option>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="VcsManagerConfiguration">
<option name="myTodoPanelSettings">
<TodoPanelSettings />
</option>
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/read_commands.py">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.78988326" vertical-offset="818" max-vertical-offset="1332">
<caret line="68" column="0" selection-start-line="68" selection-start-column="0" selection-end-line="68" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</component>
</project>

View File

@@ -0,0 +1,96 @@
ADDMESH
ASSIGN
BOUNDARY
BOUNDARY_COMPONENTS
BUBBLE
CALC_RDIST
CMO
COLORMAP
COMPUTE
CONNECT
COORDSYS
COPYPTS
CREATEPTS
CREATE_GRAPH
DEFINE
DEREFINE
DOPING
DUMP
DUMP_RECOLOR
EDIT
ELMTEST
ELTSET
EXTRACT
EXTRUDE
FIELD
FILTER
FINISH
FSET
GENIEE
GEOMETRY
GRID2GRID
HELP
HEXTOTET
INFILE
INPUT
INTERSECT
INTERSECT_ELEMENTS
INTERPOLATE
KDTREE
LOG
LOOP
LOWER_D
MASSAGE
MASSAGE2
MATH
MEMORY
MERGE
METIS
MODE
MREGION
NEGATIVE_AIJ
OFFSETSURF
PERTURB
PSET
PSTATUS
QUADXY
QUADXYZ
QUALITY
RADAPT
RANKVOLUME
READ
RECON
REFINE
REFINE2D
REGION
REGNPTS
REORDER
RESETPTS
RM
RMMAT
RMPOINT
RMREGION
RMSPHERE
RMSURF
ROTATELN
ROTATEPT 
RZ
RZAMR
RZBRICK
RZRAN
RZS
RZV
SCALE
SETPTS
SETSIZE
SETTETS
SMOOTH
SORT
STACK
SURFACE
SURFPTS
TRANS
TRIANGULATE
UNG2AVS
UPSCALE
ZQ

View File

@@ -0,0 +1,127 @@
.. _addmesh:
&nbsp_place_holder;
> **_ADDMESH_**
>
>> This routine joins two meshes together at their common interface to produce
a third mesh.
>
> FORMAT:
>
>> **addmesh / add /**mesh3 / mesh1 / mesh2
/[refine_factor]/[**tet**|**edge**]
**addmesh **/** amr **/ mesh3 / mesh1 / mesh2 /
**addmesh / append **/ mesh3 / mesh1 / mesh2 /
**addmesh / delete **/ mesh3 / mesh1 / mesh2 /
**addmesh / glue **/ mesh3 / mesh1 / mesh2 /
**addmesh / intersect **/ pset_name / mesh1 / mesh2 /
**addmesh / match **/ mesh3 / mesh1 / mesh2 / i1 12 i3 i4 i5 i6/
**addmesh / match **/ mesh3 / mesh1 / mesh2 /rx1 ry1 rz1/rx2 ry2 rz2/rx3 ry3 rz3/rx4 ry4 rz4/rx5 ry5 rz5/rx6/ry6/rz6/
**addmesh / merge**/ mesh3 / mesh1 / mesh2 /
**addmesh / pyramid **/ mesh3 / mesh1 / mesh2 /
**addmesh / excavate **/ mesh3 / mesh1 / mesh2 / [bfs] / [connect] /
> **add** - Find the intersection of mesh1 and mesh2. Refine mesh1 where it
overlaps mesh2 using the following criteria. refine_factor specifies the
number of times that the background mesh will be refined. If this number is
negative, or if it does not appear, then the it will use the default. The
default method determines the number of refinement iterations based on the
volumes of the tets. It continues to refine until the elements on the
interface boundary of the background mesh object are within a given factor
(5.0) of the volume of the elements on the border of the incoming mesh object.
This factor is a parameter constant called size_difference in the code
continue_refinement.f. For example, if size_difference is set to 5.0, then the
background mesh will be refined until the maximum volume element on the
boundary with the incoming mesh object is no bigger than 5 times the volume of
the maximum volume element on the border of the incoming mesh. refine_type is
the type of refinement that is executed. If the string **tet** appears, then
tetrahedral refinement is performed. Otherwise, **edge** based refinement is
performed. After the above refine steps have been done, the intersection of
mesh1 and mesh2 is found, elements that overlap are deleted from mesh1 and
mesh2 is appended to mesh1 to create mesh3.
>
> **merge** - Append mesh2 to to mesh1 and create mesh3. Essentially this just
concatenates two mesh objects.
>
> **glue** - Synonym for **merge**.
>
> **append** - Append mesh2 to mesh1 and create mesh3. Similar to **merge**
except imt, icr, itetclr of mesh2 have the value max(imt(mesh1)) added to
mesh2.
>
> **delete** - Create mesh3 which is mesh1 with elements that intersect mesh2
deleted.
>
> **intersect** - Create a pset called pset_name that contains all nodes in
mesh1 which intersect elements of mesh2.
>
> **amr** - Use Adaptive mesh refinement to connect background mesh1 with
submesh mesh2 and create mesh3.
>
> **match** - Same as **merge** except the second mesh can be moved, rotated
and translated. The first mesh does not move scale or rotate. If the interface
needs to be scaled, translated and rotated that is accomplished by specifing 3
node numbers in each mesh or 3 node coordinates from each mesh that are to
become coincident. If nodes are given match i1-i4, i2-i5, i3-i6. If
coordinates are given match (x1,y1,z1)-(x4,y4,z4), etc.
>
> **pyramid** - join a hex mesh to a tet mesh. The common surface must have
matching nodes (i.e. there must be exactly two triangle faces on the tet grid
that fit into one quad face of the hex grid). Pyramid elements will be
constructed in the region where the two meshes join.
>
> **excavate** - mesh1 must be a 3D mesh (of any geometry) and mesh2 must be a
2D triangular mesh. This then excavates an area in mesh1 around mesh2, such
that the surface could then be inserted into the 3D mesh (such as to insert a
fault into a background terrain mesh). The background mesh, minus the
excavated/removed nodes, is put into mesh3. If the optional [bfs] argument is
given, the routine will use a breadth-first search algorithm to find nodes to
remove, as opposed to the default KD-tree algorithm. If the optional [connect]
argument is given, the program will, after excavation, execute an
addmesh/append, and then a connect, to produce a fully connected mesh with the
surface (mesh2) inserted into the background (mesh1).
> NOTE: Care must be taken when using these commands because nothing is done
to clean up the point type (itp) array after the **addmesh** operation. The
user must often execute a series of [**resetpts**/**itp**](RESETPT.html) and
**[filter](FILTER.html)** commands to get the final desired result.
>
> NOTE:&nbsp_place_holder; Some operations may only work with tet meshes.
&nbsp_place_holder;
>
> [Click here for demos](http://lagrit.lanl.gov/docs/demos/)
&nbsp_place_holder;

View File

@@ -0,0 +1,33 @@
.. _assign:
&nbsp_place_holder;
> **_ASSIGN_**
>
>> Assign a value to a global variable.&nbsp_place_holder; The set of global
variables includes; incycle, time, monitor, hextotet_remove_volume,
hextotet_check_imt, hextotet_radavg,
hextotet_remove_duplicates.&nbsp_place_holder; The default values of these
variables are; 0,&nbsp_place_holder; 0, no, yes, no, no. use **cmo/setatt **to
assign values to mesh object **attributes****.**
>
> FORMAT:
>
>> **assign**/category_name/column/variable_name/value.
>
> EXAMPLES:
>
>> **assign**/**time**/3.2
**assign/hextotet_remove_duplicates/**yes

View File

@@ -0,0 +1,100 @@
.. _boundary:
&nbsp_place_holder;
> **_BOUNDARY_**
>
>> The boundary routine operates on the current mesh object. For the nodes
lying on the specified surface(s), it sets the specified node based attribute
to the specified value. Optionally boundary will call the user supplied
subroutine set_user_bounds [(see IV. e.8)](../miscell.html)
>
> FORMAT:
>
>> **boundary/dirichlet**/attr_name/[value|identifier]/surface_list
where:
>
> **dirichlet**
> is currently unused but must be specified&nbsp_place_holder;
>
> attr_name
> is the name of the attribute to be set&nbsp_place_holder;
>
> value&nbsp_place_holder;
> is a constant, and is the value to which the attribute is set
>
> identifier&nbsp_place_holder;
> is a character string that will be passed to
>
> subroutine set_user_bounds&nbsp_place_holder;
>
>> > surface_list is one of:
>>>
>>>> > > > **-all-** (all boundary nodes)
surface_name/**inclusive** (all bndry nodes on surface)
surface_name/**exclusive** (all bndry nodes ONLY on surface)
surface_name/ (same as exclusive)
surface_name1/surface_name2/**inclusive**
(all bndry nodes on the union of the surfaces)
surface_name1/surface_name2/**exclusive** (default)
(all bndry nodes ONLY on the intersection of the surfaces)
surface_name1/surface_name2/ surface_name3/.... (same as exclusive)
>
>
EXAMPLES:
>
>> **boundary**/**dirichlet**/vd_v/7.0/**-all-**/
sets the attribute vd_v for all boundary nodes to be 7.0
**boundary**/**dirichlet**/vi_s/8.0/pbot/
**boundary**/**dirichlet**/vd_v/9.0/pbot/**inclusive**/
sets the attribute vd_v for the nodes that are on the surface pbot to be 9.0
**boundary**/**dirichlet**/vd_s/13.0/pfrt
sets the attribute vd_s for the nodes that are on the union of the surfaces
pfrt and prgt to 13.0
**boundary**/**dirichlet**/vi_t/12.0/prgt/
**boundary**/**dirichlet**/bconds/top_plane/s1,s2,s3/
will pass the set of nodes on the intersection of surfaces s1,s2 and s3 along
with the string top-plane to subroutine set_user_bounds.

View File

@@ -0,0 +1,107 @@
.. _boundary_components:
&nbsp_place_holder;
> **_BOUNDARY_COMPONENTS_**
>
>> Calculate the number of connected components of a mesh. This is useful for
looking for holes in a mesh or as a diagnostic when looking at a single
material (itetclr, imt) and determining if the material is contiguous or
broken into multiple pieces.
>>
>> When the **node** option is invoked, the
boundary_components&nbsp_place_holder; module adds the node attribute
**numbnd** and **id_numb** to the current mesh object to which is written the
node number of a representative node of each outside boundary component. In
this mode 'connected' means that a set of nodes of type 'outside' (itp = 10 or
12) can be traversed via element edges that have both vertices of type
'outside'. This method is not really fool proof in detecting holes in a mesh
since one can traverse from the exterior of a mesh to an interior hole in the
mesh via an edge that is not really a boundary edge. More coding could deal
with this situation. In addition, the number of connected boundary components
and a representative node number from each boundary component is assigned to
the **numbnd** array. The number of nodes in each boundary set is
printed.&nbsp_place_holder;Non-boundary nodes are assigned **numbnd** = 0. If
the itp array is not current, it must be updated first, with the command
**resetpts/itp.** By default resetpts/itp is called when the node option is
invoked so the reset/noreset is optional. The node array **id_numb** is
similar to **numbnd** in that nodes associate with the same boundary component
have the same integer value, however **id_numb** is assigned values starting
with 1 and going up to the number of boundary components in sequential order.
>>
>> When the **node / material_id_number** option is invoked, the distinction
of boundary nodes as defined by itp array value is ignored. Instead, all nodes
with imt = material_id_number are examined and the number of edge connected
components is determined for just that material. Nodes with imt ¹
material_id_number are assigned numbnd = 0.
>>
>> When the **element** option is invoked, the element attribute **numbnd_e**
is added to the current mesh object. The number of connected components of the
mesh is computed where 'connected' means sets of elements can be traversed via
the element faces. The attribute numbnd_e is filled with the element number of
a representitive element of a connected set. In addition, the number of
connected components and a representative element number from each connected
component and the number of elements in each connected component set is
printed.&nbsp_place_holder;When the material_id_number option is invoked, only
elements with itetclr = material_id_number are examined. Elements with itetclr
¹ material_id_number are assigned **numbnd_e** = 0.
>
> FORMAT:
>
>> **boundary_components**- (this syntax is the same as boundary_components /
node)
>
>> **boundary_components** / node / [_reset_|noreset]
>>
>> **boundary_components** / node / material_id_number / [_reset_|noreset]
>
>> **boundary_components** / element / [reset|_noreset_]
>
>> **boundary_components** / element / material_id_number / [reset|_noreset_]
>
> EXAMPLE:
>
>> **boundary_components**
>>
>> **boundary_components** / element / 3
>>
>> &nbsp_place_holder;
![Example: boundary_components /
node](../../images/boundary_component_node.png)
![Example: boundary_components /
element](../../images/boundary_component_element.png)
**boundary_components / node** - note that the interior nodes have numbnd=0 and the nodes of the upper hole have the same value as the outside boundary since the upper hole can be reached by traversing an edge that is connected to the exterior.
**boundary_components / element** - note that the two pieces are have different values for numbnd_e even though element 15 is touching element 6. This is because one cannot traverse from the blue mesh (numbnd_e = 15) to the red mesh (numbnd_e = 24) through faces of the mesh.

View File

@@ -0,0 +1,86 @@
.. _bubble:
**_BUBBLE_**
> This command takes a topologically 2d mesh (a planar or non-planar surface),
extrudes it into three dimensions along either the normal to the surface
(default) or along a user defined vector, and then takes the external surface
of the volume created and returns that to the user.
>
> This operation will result in a closed surface.
FORMAT:
> **bubble**/mesh1/mesh2/**const|min**/offset/[**norm**|x1,y1,z1]
mesh1 is the name of the resulting mesh.
mesh2 is the name of the initial mesh. This mesh must be either made up of
**tris, quads, or hybrids**.
**const** is a keyword that indicates that the distance from each of the points in the initial mesh along the extruding vector will be equal to offset.Therefore, if you wanted the closed surface mesh to have the same surface characteristics as the original mesh on both the initial and newly formed surface or edge, you would use **const**.
**min** is a keyword that indicates that the minimum distance along the extruding vector to a reference plane that is perpendicular to the extruding vector will be equal to offset. This means that if you want a closed surface mesh with at least one flat side, you would use **min**. This also means that if you use **min**, bubble computes the "bottom point" on the initial mesh, or the point closest to the reference plane, and then extrudes that point by min, all the other points will be extruded by a larger distance. This avoids the problem of having the initial surface intersect the reference plane that forms the other side of the closed surface mesh.
offsetis the length of extrusion. It can either be an integer or a real.
The final argument is optional. It must either be the keyword **norm**, or a
three valued vector (in cartesian space) specifying a direction. The default,
if no argument is provided, is **norm**. If **norm** is chosen, the element
weighted average normal to the surface or curve is computed, and the initial
mesh is extruded in that direction. Otherwise, if a vector value is specified,
the vector is normalized, and its direction used to extrude the initial mesh.
NOTES:
> This code works on meshes containing quads, triangles, or hybrid polygons.
>
> It is very possible to create an invalid mesh object with this command,
especially if the initial mesh is a multivalued surface, or if the extruding
vector is in a direction parallel to the plane that contains the initial
surface is in. You have been warned.
>
> There is an analog to this code that creates the volume enclosed by the
surface as opposed to the surface itself. It is called
**[extrude.](extrude.html)**
>
> This code is a wrapper for **extrude**. There are plans to integrate
**bubble**'s functionality with **extrude** and to eliminate **bubble** from
the commands recognized by LaGriT.
EXAMPLES:
> **bubble**/cmo_bigbox/cmo_quad/**const**/5.0/
>
> This would result in a surface surrounding an amalgamation of
parallelopipeds created from the initial quad sheet. First, since **const** is
used the quads will be extruded a constant amount from each point in the quad
sheet. Second, since the extruding vector and **norm** are omitted, the
extrusion will occur on the average normal to the plane. Therefore, this
command will result in a mesh of tris that form the surface of a group of
parallelopipeds extruded 5.0 units in an orthogonal direction.
>
> **bubble**/cmo_arbshape/cmo_tri/**min**/7.5/3,-2.5,-6
>
> This command would result in a mesh of tris that form a surface enclosing a
volume of prisms being created out of the initial tri sheet. First, since
**min** is used, the "bottom" of the surface would be a plane. Second, because
the vector 3, -2.5, -6 is specified, the extrusion will be in that direction
(again the magnitude is not important, the vector is normalized to a unit
vector), not in the direction of the average normal of the initial tri
surface.

View File

@@ -0,0 +1,82 @@
.. _calc_rdist:
> &nbsp_place_holder;
>
> **_CALC_RDIST_**
>
>> This command is a macro command that calculates the radial distance from a
specified point to a set of points. That set of points can be defined using
the standard LaGriT syntax of psets and range. If the specification for a set
of points is omitted, the whole grid is used. The command operates on the
current mesh object.
>>
>> This operation will (often) result in two attributes being added to the
current mesh object. The first, a real named rdist, contains the radial
distance from the point of interest. The second, an integer named ictrpt,
contains an index that specifies the center point that was used for this
calculation.
>
> FORMAT:
>
>> **calc_rdist**/x0,y0,z0/[radius_index]/[**pset,get,**pset_name|ifirst,ilast
,istride]
>>
>> x0,y0,z0 are the coordinates of the center point used in the calculation.
radius_index is an optional integer. It serves as an index for a specific
center point.&nbsp_place_holder; Its value is placed in the attribute
ictrpt throughout the range affected by the command. If it is not specified,
no changes are made to the attribute ictrpt. The non-value for this attribute
is 0 (i.e., if there is no radius index, the value of ictrpt will be 0).
>>
>> The last argument that **calc_rdist** takes specifies the range over which
the command will be executed. If it is omitted, the whole grid is assumed.
>
> NOTES:
>
>> This command is a macro command. It does not add any new functionality.
>
> EXAMPLES:
>
>> **calc_rdist/**0,0,0
>>
>>> This command would calculate the distance from the origin to all points in
the mesh, and place the values in rdist. It would not modify ictrpt in any
way.
>>
>> **calc_rdist**/1,0.25,1/10/pset,get,big_sphere
>>
>>> This command would calculate the distance from the point 1,0.25,1 to all
the points within the pset big_sphere. It would place those distances into
rdist within that pset, and would replace the value of ictrpt with 10 within
that pset as well.

View File

@@ -0,0 +1,236 @@
.. _cmo:
&nbsp_place_holder;
> **_CMO_**
>
>> The **cmo** command operates on the Mesh Object(MO). There can be many Mesh
Objects in the code for a given problem. Only one of these Mesh Objects may by
the Current Mesh Object. There is also one Default Mesh Object which is used
as the template for generating new Mesh Objects.
> FORMAT:
Add a user defined attribute to a Mesh Object
[**cmo**/**addatt**](cmo/cmo_addatt.html) /mo_name/att_name/type/rank/
length/interpolate/persistence/ioflag/value
[**cmo**/**addatt**](cmo/cmo_addatt.html) /mo_name /keyword /
keyword_parameters
Give the sink mesh the same set of attributes as the source mesh (with
unitialized values)
**[cmo/attribute_derive](cmo/cmo_att_derive.html)**/sink_mo/[src_mo]
Change two meshes so they both share the same set of attributes (taking the
union of their sets of attributes)
**[cmo/attribute_union](cmo/cmo_att_derive.html)**/mo_name_1/mo_name_2
Shorten all memory managed arrays associated with mo_name to their actual
lengths
**[cmo/compress](cmo/cmo_compress.html)**/mo_name/
Associate the surface constraint information of the mesh object cmo_src with
cmo_sink:
[**cmo/constraint**/](cmo/cmo_constraint.html)cmo_sink/cmo_src
Copy master_mo to mo_name:
**[cmo/copy](cmo/cmo_copy.html)**/mo_name/master_mo/
Copy a mesh object attribute:
**[cmo/copyatt](cmo/cmo_copyatt.html)**/cmosink/cmo_src/att_nam_sink/att_nam_src
Create a new mesh object:
**[cmo/create](cmo/cmo_create.html)/**mo_name/[npoints/nelements/mesh-type]
Delete an existing mesh object:
**[cmo/delatt](cmo/cmo_delatt.html)/**mo_name/att_name/
Delete an existing mesh object even it has 'permanent' persistance:
**[cmo/DELATT](cmo/cmo_delatt.html)/**mo_name/att_name/
Copy the structure of master_mo to mo_name, but copy no data:
**[cmo/derive](cmo/cmo_derive.html)**/mo_name/master_mo/
Associate the geometry named geometry_name with the mesh object mo_name:
**[cmo/geometry](cmo/cmo_geom.html)/**mo_name/geometry_name
Print the memory length of attribute att_name for Mesh Object, mo_name:
**[cmo/length](cmo/cmo_length.html)**/mo_name/att_name/
List all mesh objects:
**[cmo/list](cmo/cmo_list.html)**
Adjust the memory manages arrays associated with mo_name to the
lengths required by number_nodes and number_elements:
[**cmo/memory**/ ](cmo/cmo_memory.html)mo_name/number_nodes/number_elements /
Modify an attribute parameter value:
[**cmo**/**modatt**/](cmo/cmo_modatt.html)mo_name/att_name/field_name/new_fiel
d/
Change the name of a mesh object:
**[cmo/move](cmo/cmo_move.html)**/mo_name /master_mo /
Adjust the memory length of mo_name based on the values of nnodes and
nelements:
**[cmo/newlen](cmo/cmo_newlen.html)**/mo_name/
Print the value of an attribute:
**[cmo/printatt](cmo/cmo_printatt.html)**/mo_name/att_name|-**all-**|**-xyz-**|**nod **/ [**minmax**|**list**|**value**]** **/[ifirst,ilast,istride]
Read values for an attribute from a file:
**[cmo/readatt](cmo/cmo_readatt.html)**/mo_name/att_name/[...]/operation/file_name
Release a mesh object (same as delete):
**[cmo/release](cmo/cmo_release.html)**/mo_name/
Make mo_name the active mesh object:
**[cmo/select](cmo/cmo_select.html)**/mo_name/
Set the value of an attribute:
**[cmo/setatt](cmo/cmo_setatt.html)**/mo_name/att_name/ifirst,ilast,istride/value
Create an integer attribute that contains the node or element number:
**[cmo/set_id/](cmo/cmo_setid.html)**mo_name/**node** |**element** |**both**/[att_nam1]/[att_nam2]
Print the mesh object status (all attributes and values of scalars)
[**cmo/status**/](cmo/cmo_status.html)mo_name/[**brief**]
Verifie that memory allocation of Mesh Object mo_name is consistent:
**[cmo/verify](cmo/cmo_verify.html)**/mo_name/
&nbsp_place_holder;
CONVENTION: As a result of any command that generates a new mesh object, the
newly generated mesh object becomes active. As a result of any command the
changes a mesh
object (e.g. copyatt) the changed mesh object becomes
active.&nbsp_place_holder; Use cmo/select to explicitly
specify the active mesh object.
RESERVED NAMES: The following names are reserved and may not be used for Mesh
Objectnames:
**-cmo-&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; **the Current Mesh Object
**-default-&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; **the Default Mesh Object
**-all-&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; **all Mesh Objects or Attributes TYPES, DEFAULTS and POSSIBLE VALUES:
mo_name&nbsp_place_holder;
is type character
att_name
is type character
mesh_type
is type character
&nbsp_place_holder;(**tet,hex,pri,pyr,tri,qua,hyb,line,point**)
type
&nbsp_place_holder;is type character, default is **VDOUBLE**
&nbsp_place_holder;(**VDOUBLE, VINT, VCHAR, INT, REAL, CHARACTER)**
**VDOUBLE **real array
**VINT **integer array
**VCHAR **array of character*32
**INT** a single integer variable (length =1 rank =1 by definition)
**REAL** a single real variable (length =1 rank =1 by definition)
**CHARACTER **a single character*32 variable (length =1 rank =1 by definition)
rank
is type character, default is **scalar**
(**scalar,vector,tensor**)
**scalar **one entry per array element
**vector **3 entries per array element
**tensor **9 entries per array element
any previously defined **INT** attribute including user defined attributes may
be used as rank
length
is type character, default is **nnodes**
(**nnodes, nelements**)
any previously defined **INT** attribute including user defined attributes may
be used as length&nbsp_place_holder;
interpolate
is type character, default is **linear**
(**copy, sequence, linear, log, asinh, max,**
**min, user,and,or,incmax**)
ioflag
(**a, g, f, l, no **-- for avs,gmv,fehms,LaGriT)

View File

@@ -0,0 +1,39 @@
.. _colormap:
> **_COLORMAP_**
> > This command builds the colormap.&nbsp_place_holder; In reality it only
builds the material adjacency graph, from with the colormap can be quickly
generated when needed.&nbsp_place_holder; Three actions are possible:
>
> FORMAT:
>
>> **colormap**/**[add]|create|delete]**/[cmo_name]
>>
>> **add** -- The material adjacency characteristics of the specified mesh
object is added to the existing material adjacency graph, which is created if
it didn't exist.&nbsp_place_holder; This is the default action.
**create** -- The existing material adjacency graph is deleted and a new one created from the specified mesh object.
**delete** -- The material adjacency graph is deleted if it exists.&nbsp_place_holder; Any specified mesh object is ignored.
&nbsp_place_holder;
>
> EXAMPLES:
>
>> **colormap/create/**mesh1
**colormap**//mesh2
**colormap**/**delete**
> &nbsp_place_holder;

View File

@@ -0,0 +1,348 @@
.. _compute:
> **_COMPUTE_**
>
>> This command contains modules that compute various attributes and functions
based on one or more
mesh objects. This operation will (often) result in new attributes being added
to the mesh objects. The
action of the command will be controled by the keyword in the second argument
position.
>>
>> distance_field - keyword for distance field calculation. Determine the
minimum distance from any node in
mo_source to every node in mo_sink and place the result in the node based
floating point attribute,
distance_field_attribute in mo_sink. The computation is accelerated by using
the [kdtree](kdtree.html) search
algorithm.
signed_distance_field - keyword for signed distance field calculation.
Determine the minimum distance
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
from any node in mo_source to every node in mo_sink and place the result in
the node based floating
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
point attribute, distance_field_attribute in mo_sink. The computation is
accelerated by using the&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
[kdtree](kdtree.html) search algorithm. Using this option the mo_source MUST
be either a triangle or quad surface
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
mesh object. If the surfaces form a topologically closed volume then positive,
'above' distance is in the
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
direction of the surface normal vector. Negative is 'below' the surface. If
the surface is not a closed
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
volume, then the assumptions described in the [surface](SURFACE.html) command
are used to determine what is above
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
and what is below the surface.
>>
>> linear_transform - keyword for an extrapolation from an attribute value in
a surface onto every node of
a 3D mesh. Given a 3D mesh and a 2D surface, this command will extrapolate a
scalar value from that surface
onto every point of the mesh. This can be used to (for example):
>>
>> * Propogate head values from a surface onto all nodes of a mesh.
>> * Expand a mesh to fit a surface, by propogating the appropriate spatial
coordinate.
>> * Compute the depth relative to a topographic surface to each node of a
mesh.
>>
>> This is highly dependant on the spatial relation between the mesh and the
surface - values from the
surface are extrapolated "downward" into the mesh in the direction specified
in the command. The
direction specified in the command must be one of
[zpos|zneg|ypos|yneg|xpos|xneg]. For example,
specifing zpos will result in the upper (positive
z-axis) side of the mesh having attribute values conforming exactly to those
on the surface, while the
lower side of the mesh will have whatever attribute values it had previous,
with all nodes in between
having attribute values distributed linearly between the two extremes. If a
direction is not specified,
it will default to zpos. If an attribute is not specified, it will default to
the spatial attribute appropriate
to the chosen direction (i.e. if the direction is yneg, the attribute will
default to yic, the y-coordinate of
each node.) The attribute chosen must already exist in both the surface and
main meshes.
>>
>> Other places to look for modules that compute some standard mesh attributes
include, [quality](QUALITY.html), which will
compute aspect ratio and volume, [cmo/addatt](cmo/cmo_addatt.html), which will
compute normal vectors, dihedral angles, solid
angles, meadian points, Voronoi points and more. User functions can be
computed with the [math](MATH.html) module.
>
> **FORMAT**:
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
compute/distance_field/mo_sink/mo_source/distance_field_attribute
>
>> compute/signed_distance_field/mo_sink/mo_source/distance_field_attribute
compute/linear_transform/mo_main/mo_surface/[direction/att_name]
>
> **EXAMPLES**:
>
>> compute / distance_field / mo_sink / mo_src / dfield
compute / signed_distance_field / mo_sink / mo_src / dfield
>>
>> compute / linear_transform / mo_sink / mo_surf
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; (will expand top of
mesh to look like the surface)
>>
>> compute / linear_transform / mo_sink / mo_surf / zpos / water_head_value
>>
>> &nbsp_place_holder;
>
> ** Example: distance_field **
>
> ![Example: distance_field](../distance_field_01.png)
>
> cmo / create / cmo_src
> createpts/rtz/1,91,1/3.,0.,0./3.,270.,0./1,1,1/
> cmo / create / cmo_snk
> createpts / xyz / 30 30 1 / -5. -5. -5. / 5. 5. 5. / 1 1 1
> compute / distance_field / cmo_snk / cmo_src / dfield
> finish
>
>
>
> ****
>
> ** Example: signed_distance_field **
>
> ![signed distance field](../../images/distance_field_02.png)
>
> *
> * Create some of the necessary parts
> *
> cmo / create / mo_tet
> createpts/random/rtp/.1/1,0,0/1,180,360////.02
> connect
> resetpts / itp
> *
> * Extract the external surface
> *
> extract / surfmesh / 1 0 0 / mo_tri / mo_tet / external
> dump / gmv / tri_surf.gmv / mo_tri
> cmo / delete / mo_tet
> cmo / printatt / mo_tri / -xyz- / minmax
> cmo / create / mo_pts
> *
> * Create an xyz node distribution and connect the nodes.
> *
> createpts / xyz / 31 31 31 / -1 -1 -1 / 1 1 1 / 1 1 1
> connect
> resetpts / itp
> *
> * Compute the signed distance field
> *
> compute / signed_distance_field / mo_pts / mo_tri / dfield1
> addmesh / append / mo_all / mo_pts / mo_tri
> dump / gmv / signed_dfield1.gmv / mo_all
> *
> * Do the same thing but use a surface of quads that make
> * two nested spheres.
> *
> cmo / create / mo_hex / / / hex
> createpts/sphere/8/5/5000/1.0,0.5/0.,0.,0./1,0,0.0/
> filter / 1 0 0
> resetpts / itp
> extract / surfmesh / 1 0 0 / mo_quad / mo_hex / external
> dump / gmv / quad_surf.gmv / mo_quad
> *
> * Compute the signed distance field
> *
> compute / signed_distance_field / mo_pts / mo_quad / dfield2
> addmesh / append / mo_all2 / mo_pts / mo_quad
> dump / gmv / signed_dfield2.gmv / mo_all2
> cmo / status
> quality
> cmo / printatt / mo_pts / -all- / minmax
> finish
>
>
>
> **
Example: linear_transform **
>
> ![Example: lin_extp_before](../../images/lin_extp_before.jpg)
>
> infile [buildsurf.lgi](../buildsurf.lgi)
>
> * Expand the cubical mesh such that its top (positive z-axis) looks like
the sinusoidal
> * surface denoted by zhigh
> compute / linear_transform / cube / zhigh
>
> finish
>
>
>
> ![Example: lin_extp_after](../../images/lin_extp_after.jpg)
>
> &nbsp_place_holder;

View File

@@ -0,0 +1,125 @@
.. _connect :
&nbsp_place_holder;
&nbsp_place_holder;
> **_CONNECT_**
&nbsp_place_holder;
>
>> Connect the nodes into a Delaunay tetrahedral or triangle grid. The
Delaunay criterion requires that the circumsphere (circumcircle) defined by
each tetrahedron (triangle) contains no mesh nodes in its interior. At present
only the **delaunay** option is implemented; this option will be the default.
The delaunay algorithm used requires that a "big tet" be constructed that
contains all nodes in its interior. The user has the option of providing the
coordinates of this "big tet". The user also has the option of selecting a
subset of nodes to connect.&nbsp_place_holder;&nbsp_place_holder; Connect will
by default detect material interfaces and will look for edges that intersect
the interfaces.&nbsp_place_holder; Nodes will be added to the mesh at these
intersections to create a conforming mesh.&nbsp_place_holder; This activity
may be turned off by using the **noadd** option.
The **check_interface** option is more expensive but does a more exhaustive
job of making sure there are no edges of the mesh that cross a material
boundary.
**Connect** may refuse to add nodes that will result in near zero-volume tetahedra. The volume tests are based on the mesh object epsilons. To ensure that these epsilons are based on the geometry, issue a **[setsize ](http://lagrit.lanl.gov/new_html/SETSIZE.html)**command before **[setpts](http://lagrit.lanl.gov/new_html/SETPTS.html)**.&nbsp_place_holder; Expert users may adjust the epsilons with the&nbsp_place_holder; [cmo/setatt](http://lagrit.lanl.gov/new_html/cmo_setatt.html)&nbsp_place_holder; command.&nbsp_place_holder; **Connect** will generate a 2D triangular mesh if both [**ndimensions_geom** and **ndimenions_topo**](http://lagrit.lanl.gov/new_html/meshobject.html) are 2.&nbsp_place_holder; In this case all nodes must lie in a plane.
[Click here for more details on the connect
algorithm](http://lagrit.lanl.gov/new_html/connect_notes.html).
>>
>> The following instructions are for connecting points on a planar
surface.&nbsp_place_holder; The mesh must have **ndimensions_topo**=2 and
**ndimensions_geom**=2.
>>
>> **cmo**/**create/**trimesh///**tri**
**cmo**/**modatt**//**ndimensions_geom**/**default**/2
...
**connect**
>>
>> an alternate way to achieve this is:
**cmo**/**create**/trimesh///**triplane**
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; ...
**connect**
&nbsp_place_holder;
>
> FORMAT:
>
>> **connect**/[**delaunay**]/ifirst,ilast,istride/big_tet_coordinates
**connect**/**noadd****
connect**/**check_interface**
>
> EXAMPLES:
>
>> **connect**
Create the Delaunay tetrahedral connectivity of all nodes in the mesh. Add
nodes to break multi-material connections.
**
connect**/**delaunay**/
Create the Delaunay tetrahedral connectivity of all nodes in the mesh. Add
nodes to break multi-material connections.
**
connect/delaunay**/1,0,0/ 0.,0.,0./1000.,0.,0./500.,1000.,0./500.,500.,10./
**connect/**1,0,0/ 0.,0.,0./1000.,0.,0./500.,1000.,0./500.,500.,10./noadd
**connect/delaunay**/1,0,0/ 0.,0.,0./1000.,0.,0./500.,1000.,0./500.,500.,10./noadd
**connect/delaunay**/1,0,0/ 0.,0.,0./1000.,0.,0./500.,1000.,0./500.,500.,10./check_interface
Create the Delaunay tetrahedral connectivity of all nodes in the mesh and
specify explicitly the coordinates of the enclosing tetrahedron
**
**connect/pset get points
****Create the Delaunay tetrahedral connectivity of a subset of nodes.****
******connect/noadd**
Create the Delaunay tetrahedral connectivity of&nbsp_place_holder; all nodes
in the mesh and disregard material interfaces.
**
connect/**check_interface****
Create the Delaunay tetrahedral connectivity of&nbsp_place_holder; all nodes
in the mesh with added checking of edges that have both nodes tagged as
itp='intrface' to be sure that the edge does not cross a material interface.
This option is more expensive but may fix situations where multi-material
edges do not get refined because they connect an 'intrface' node to an
'intrface' node.
>
> [Click here for 2D
demos](../../new_html/demos/2d_connect/test/html/main_2d_connect.html)
[Click here for 3D
demos](../../new_html/demos/connect/test/html/main_connect.html)
&nbsp_place_holder;

View File

@@ -0,0 +1,35 @@
.. _coordsys :
&nbsp_place_holder;
&nbsp_place_holder;
> **_COORDSYS_**
>
>> This routine defines a local coordinate system to be in effect until
another coordinate system is defined or the normal coordinate system is reset.
The new coordinate system is defined by specifying an origin, a point on the
new x-z plane and a point on the new z-axis. These points are specified in the
normal coordinate system. The options available in iopt are:
>>
>>> **define** define a new local coordinate system
**normal** return to the normal coordinate system
**save** save the current coordinate system for recall
**restore** recall the last saved coordinate system
> FORMAT:
>
>> **coordsys**/iopt/x0,y0,z0/xx,xy,xz/zx,zy,zz
where x0,y0,z0 is the location of the new origin, xx,xy,xz is a point on the
new x-z plane and zx,zy,zz is a point on the new z-axis. These points are
defined with the normal coordinate system, and used only with the **define**
option.

View File

@@ -0,0 +1,76 @@
.. _copypts :
&nbsp_place_holder;
> **_COPYPTS_**
&nbsp_place_holder;
>
>> Copy a point distribution. There are two distinct forms of this command.
The first format is designed to copy points from one mesh object into another.
In this form if the names of the source and sink mesh objects are omitted, the
current mesh object will be used. The copy may be restricted to a subset of
points by including the source point information. Points in the sink mesh
object will be overwritten if sink_stride is not zero. Attribute fields may be
specified for both the source and sink mesh object. For example the
x-coordinate field in the source mesh object (xic) may be placed in the
y-coordinate field of the sink mesh object. Attribute values will be copied
from the source mesh object to the sink mesh object. The user is warned that
these values might not make sense in their new context.
>>
>> The second form of this command is included for historic reasons: it
duplicates points within a mesh object including all the attributes of the
points. Also note that if no sink points or sink stride are specified, then
the copied points are placed at the end of the data arrays (see third FORMAT)
otherwise the copied points are written over the existing points starting at
the 1st sink point. Note also that the first form of the command gives the
arguments sink first then source whereas the second form gives the source then
the sink.
>
> FORMAT:
&nbsp_place_holder;
>
>> **copypts**/sink_cmo/source_cmo/1st_sink_point/sink_stride/1st_source_point
/last_source_point/
source_stride/sink_attribute_name/source_attribute_name
**copypts**/1st_source_point/last_source_point/source_stride/1st_sink_point/sink_stride
**copypts** /1st_point/last_point/stride
>
> EXAMPLES:
>
>> **copypts/**3dmesh/2dmesh /
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; Copy all points in
2dmesh to the end of the 3dmesh point list.
**copypts/**3dmesh/2dmesh/0,0/**pset,get,**mypoints/
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; Copy the point set
named mypoints from 2dmesh to the end of 3dmesh point list.
**copypts/3dmesh/2dmesh/100,4/pset,get,mypoints/boron/arsenic/**
**&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;** Copy the arsenic field from the point set named mypoints from 2dmesh replacing the boron field at every fourth point beginning at point 100 in 3dmesh**.**
**copypts/pset,get,mypoints/0,0/**
**&nbsp_place_holder;&nbsp_place_holder;**&nbsp_place_holder; Duplicate the point set named mypoints from the current mesh object and place the duplicated points at the end of the point list.
**copypts//**/0,0**/pset,get,mypoints/**
Duplicate the point set named mypoints from the current mesh object and place
the duplicated points at the end of the point list. Same effect as the example
directly above. The current mesh object is used since the fields are blank on
the command line
&nbsp_place_holder;

View File

@@ -0,0 +1,75 @@
.. _create_graph :
CREATE_GRAPH
> Create a node or dual (element) adjacency graph. If node option is selected,
the graph of node adjacency is created, if dual option is selected, the graph
of element adjacency (dual graph) is created.
For details of METIS algorithms and descriptions of the third command line
argument see:
[http://glaros.dtc.umn.edu/gkhome/views/metis](http://glaros.dtc.umn.edu/gkhom
e/views/metis)
See [METIS ](metis.html)documentation for description of graph format.
The default name of the attributes that are created are different depending on
which option (metis or lagrit) is used.
>
> `create_graph / metis / [node | dual] / [nxadj] / [nadjncy]
create_graph/ lagrit / dual / jtetoff / jtet
`
>
> See the [dump](DUMP2.html) command for options to output the adjacency graph
to a file.`
`
LIMITATIONS
> The metis option will not work on a hybrid mesh. Supported element types are
tri, tet, quad, hex.
>
> The /lagrit/ option will only produce the dual adjacency graph. The only
option for the name of the graph arrays are jtetoff and jtet. The present
implementation is just a wrapper on the [geniee](GENIEE.html) command.
>
> See instructions in documentation of the [metis](metis.html) command.
METIS Interface to LaGriT
> METIS can be freely distributed provided that:
* A reference to the following paper is included: _ "A Fast and Highly Quality Multilevel Scheme for Partitioning Irregular Graphs". George Karypis and Vipin Kumar. SIAM Journal on Scientific Computing, Vol. 20, No. 1, pp. 359--392, 1999._
* The original documentation ([PDF file of the manual](http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/manual.pdf)) and copyright notice is include
* METIS 4.0 Copyright 2001-06, Regents of the University of Minnesota
FORMAT:
> `create_graph / metis / [node | dual] / [nxadj] / [nadjncy]`
EXAMPLES:
> `create_graph / metis / dual / -def- / -def-
create_graph / metis / node / -def- / -def-
create_graph / metis / dual / ie1 / ieadj1
create_graph / metis / node / in1 / inadj1
create_graph / lagrit / dual / jtetoff / jtet`

View File

@@ -0,0 +1,39 @@
.. _createpts :
> &nbsp_place_holder;
>
> **_CREATEPTS_**
>
>> This command adds points to the mesh. For some special cases, it will also
produce element connectivity.
Createpts is a wrapper for all the 'rz' type commands found elsewhere in the
documentation.
** [ createpts/](createpts/CRTPTSRZ.html)xyz|rtz|rtp|line**
** [ createpts/brick](createpts/CRTPTBRICK.html)**
**[createpts/interp](createpts/createpts_interp.html)**
** [ createpts/sphere](createpts/cresphere.html)**
** [ createpts/random](createpts/CRTPTRZRAN.html)**
** [ createpts/vector](createpts/CRTPTRZV_LG.html)**
**_ [ createpts/voronoi](createpts/createpts_voronoi.html)_**
**_ [ createpts/median](createpts/createpts_median.html)_**
** [ createpts/amr](createpts/CREATEPTSAMR.html)**
>
>
&nbsp_place_holder;
>
> [Click here for demos](../demos/createpts/test/html/main_createpts.html)

View File

@@ -0,0 +1,60 @@
.. _define:
> &nbsp_place_holder;
>
> **_DEFINE_**
>
>> Allows a number to be associated with a character string, such that the
character string can be used in input decks in place of the&nbsp_place_holder;
number. The keyword _remove _in the third argument will remove a defined
variable from the stack of defined variables.
>
> &nbsp_place_holder;FORMAT:
>
>> `**define /** name / value_real
``**define /** name / value_integer`
`**define /** name / value_character`
`**define /** name / remove`
>
> EXAMPLE:
>
>> `**define **/ nx / 3
**define **/ ny / 4
**define** / nz / 5
**define **/ bottom / 0.1
**define **/ top / 4.0
**define** / left / 9.8
**define** / type / reflect
**surface**/s1/reflect/box/0.0,left,bottom/1.0,right,top
**rz**/xyz/nx/nz/0.0,left,bottom/1.0,right,top/1,1,1
``**define **/ top / 5.0 `
`**surface**/s1/reflect/box/0.0,left,bottom/1.0,right,top
**rz**/xyz/nx/nz/0.0,left,bottom/1.0,right,top/1,1,1`
`**define** / nx / remove
**define** / ny / remove
**define** / nz / remove`

View File

@@ -0,0 +1,54 @@
.. _derefine :
> &nbsp_place_holder;
>
> **_DEREFINE_**
> > This routine derefines a mesh by deleting points using the merge routine
based on one of the following refine_types. **edge** will refine if element
edge length is less then value. **volume** will merge if element volume is
less than value. The merge routine will first attempt the smallest element
edge then the next smallest, etc. **aspect** will derefine where aspect ratio
is less than value. **pinchedge** will allow merging of adjacent points across
a thin layer to eliminate the layer where it is too thin. **pinchedge** should
be used only with pointtype1 and pointtype2 both equal to 2.
Two criteria are currently enabled; **minsize** and **merge**. **minsize**
allows merges if the calculation implied by refine_type is less than value.
**merge** will merge the following first_point and second_point. The field
option is not enabled and should be left default. The user specifies which
merges are acceptable by designating the allowable pointtypes. Nodes with
pointtype1 are merged to nodes of pointtype2. If pointtype1 and pointtype2 are
both equal to 2, the code only merges if the nodes are both on the same
material interface (use **pinchedge** if deleted nodes should be on different
interfaces of the same material). **derefine** will not merge if an
unacceptable element is created. **derefine** will work on material interfaces
if all the children are set with the **settets** command. Various combinations
of **derefine** may be used to improve the mesh. **recon** may be used to
return to a delaunay mesh after using the **derefine** command.
>
> FORMAT:
>
>> **derefine/minsize**/field/pointtype1
pointtype2/refine_type/first_point/last_point/stride/value
**derefine**/**merge**/first_point/second_point
>
> EXAMPLE:
>
>> **derefine/minsize**//0 0/**aspect**/ 1 0 0/1.e-3
**derefine/minsize**//0 2/**volume**/**pset,get**,apset/5.
**derefine/minsize**//10&nbsp_place_holder; 10**/edge**/1 0 0/5.
**derefine/minsize**//2 2/**pinchedge**/1 0 0/1
**derefine/merge**/21/22

View File

@@ -0,0 +1,167 @@
.. _doping :
&nbsp_place_holder;
> **_DOPING_**
> > Interpolates between mesh object attributes or assigns values to a mesh
object attribute.
Options **constant **and **gaussian** assign values to a mesh object
attribute.&nbsp_place_holder; Options **table**, **integer1**, and **integer2
**interpolate from a reference mesh object.
The **constant **option assigns a constant value to all specified nodes.
The **gaussian **option creates a very special gaussian distribution around a
line or point.&nbsp_place_holder; The bounding box (x1,y1,z1) to (x2,y2,z2)
specifies where the peak concentration will be, Note: y2 is ignored; if z1=z2
then the distribution will be around a point.&nbsp_place_holder; All
coordinates are assumed to be given as Cartesian, **xyz** is
required.&nbsp_place_holder; The value assigned to the attribute is determined
by the Gaussian distribution:
>>
>>> value = concentration * exp(-(L/std_dev)**2)
>>
>> where L is the effective distance and can be represented as:
>>
>>> L = sqrt( dy**2 + (1/lateral_diffusion)*(dx**2 + dz**2) )
>>
>> and where
>>
>>> dy = y-y1 (y2 ignored)
dx = x-x1 if x < x1 < x2
= 0 if x1 < x < x2
= x-x2 if x1 < x2 < x
dz similar to dx.
>>
>> The **table** option interpolates an attribute from a reference mesh object
and reference attribute onto the current mesh object using** linear**, **log**
or **asinh** interpolation (the default is linear).&nbsp_place_holder; In the
case of 2D tabular interpolation, additional arguments specify the planar
correspondence for the interpolation: geom_out and geom_ref refer to the
output and reference orientation of a 2D axial distribution and may take the
values, **xy, yz, xz**,&nbsp_place_holder; .
>>
>> In all cases, field_out specifies the name of the attribute, ifirst, ilast,
istride specify a point set restriction, and **set add or subtract** indicate
if the calculated or input-value is added to, subtracted from or used to set
the existing node attribute value.
>>
>> If the values to be doped (interpolated) are integers (options **integer1
**and **integer2**), doping works in two ways.&nbsp_place_holder; For integer
doping, only the **set** option is implemented.
If the second field is **integer1**, the new nodal attributes are based on
element material types. Set field_out and attr_ref to **imt1** in this case.
The **integer1** option is implemented only for setting node material
(**imt1**). The **imt1** values of the active mesh object nodes will be set by
determining which element in the reference mesh object the node falls in. This
element's material (**itetclr**) value is then assigned to the node **imt1**.
>>
>> The **integer2** option sets node based attributes in the active mesh
object by determining which voronoi cell in the reference mesh object the node
falls in. Then the value for the node corresponding to this voronoi cell is
copied to the active node.
If the second field is **integer2**, the new nodal attributes are based on the
table attribute types using the Voronoi cells around the table nodes.
For integer doping, function can be** min** or **max** to choose what happens
if a cmo_out node falls on a boundary between two elements or Voronoi cells.
For 3d, Voronoi cell based doping, function can also be **minp** or **maxp**
which makes any cmo_out nodes that fall outside the cmo_table geometry set to
the maximum number of materials plus one. Mapset can be set to **create**,
**use**, or left blank. If **create** is used then an idop attribute is formed
that maps the cmo_table nodes to the cmo_out nodes. If **use** is used, doping
will read and use this previously formed and saved mapping. Note that doping
of integers should be done without child/parent relationships. If parents
exist, the doping results are unpredictable at interface boundaries because
the value of parent nodes are unpredictable there.
>>
>> FORMAT:
>>
>>> **doping**/**constant**/field_out/**set|add|sub/
**ifirst,ilast,istride/value
**doping/gaussian/**field_out/**set|add|sub**/ ifirst,ilast,istride/
**xyz**/x1,y1,z1/x2,y2,z2/lateral_diffusion/ concentration/standard_deviation/
**doping/table/**field_out/**set|add|sub**/cmo_ref/attr_ref/[**linear|log**|**asinh**]
**doping/table/**field_out/**set|add|sub**/cmo_ref/attr_ref/[**linear|log**|**asinh**]/ [geom_out/geom_ref]
**doping/integer1**/**imt1**/**set**/ifirst,ilast,istride/cmo_ref /**imt1**/**min**|**max**
**doping/integer2/**field_out2**/set**/ifirst,ilast,istride/cmo_ref/attr_ref/
**min**|**max**|**minp**|**maxp**/[**create**|**use**]
>>
>> EXAMPLE:
>>
>>> **doping**/**constant**/density/**set**/**pset,get**,mypset/9.73
For the current mesh object, the value of the attribute density will be set to
9.73
for all nodes in the point set mypset.
**doping/gaussian**/density/**add**/**pset**,mypset/**xyz**/
0.0,0.5,0.1/0.5,0.5,0.4/0.5/5.0e+18/0.225
For the current mesh object, for nodes in mypset, the value of the
attribute density will be augmented by
the value of the distribution as defined above.
**doping**/**table**/my_field/**set**/1,0,0/cmo_ref/attr_ref/**log**
For the current mesh object, the value of the attribute my_field will be set
by
interpolating from the reference mesh object and attribute.
**doping**/**table**/Saturation /**set**/1,0,0/cmo_course/saturation_course/**linear**/**zx**/**yx**/
In this case the yx plane from the reference cmo is interpolated onto the zx
plane of the
current mesh object
**doping/integer1**/imt1/**set**/1,0,0/cmo_old/imt1/**min**
See which element of cmo_old each node of the current mesh object falls in,
and set the imt1 attribute value to the itetclr of the element in
cmo_old.&nbsp_place_holder; If the node falls in more than one element use the
smallest itetclr.
**doping/integer2/**rad2**/set**/1,0,0/cmo_old/rad1/**min/create**
Create the voronoi cells around the nodes in cmo_old.&nbsp_place_holder; See
which voronoi cell the nodes in the current mesh object fall in and set the
value of the attribute rad2 from the value of the attribute rad1 in the
reference mesh object.&nbsp_place_holder; If there is a conflict use the
smallest value.&nbsp_place_holder; Create a new attribute called idop as
explained above.

View File

@@ -0,0 +1,442 @@
.. _dump :
> **_DUMP_**
This command produces an output file from a Mesh Object. Some of the standard
graphics packages are supported including AVS, GMV and TECPLOT. See below for
full list of file types that can be written. The list is in alphabetic order
and describes each valid file_type with syntax and usage.
GENERAL SYNTAX:
**dump**/file_type/file_name/[cmo_name]/ The dump command is followed by a word indicating file type. Valid file type kewords are: ** gmv, avs, avs2, chad, coord, datex, elem_adj_node, elem_adj_elem, fehm, geofest, geom, gmv, gocad, lagrit, recolor, stl, stor, tecplot, zone, zone_imt, **and** zone_outside** .
The file_type is followed by a string to be used as whole or part of file name
as described below.
SHORT SYNTAX:
**dump**/ file_name.[**inp | avs | gmv | lg | lagrit | ts | exo** ] / [cmo_name]
For common file types, a short form syntax can be used which skips the file
type designation. The file_type is asssumed from the file_name suffix. The
following are recognized; AVS (.inp or .avs), Exodus (.exo), GMV (.gmv),
LaGriT (.lagrit or .lg), and .ts (gocad).
FILE TYPES:
**dump** /** avs** /file_name/[cmo_name] /[iopt_points,iopt_elements,iopt_node_attributes,iopt_element_attributes]
Output in AVS UCD (Unstructured Cell Data) format. One can turn on or off the
output of node coordinates (iopt_points), element connectivity
(iopt_elements), node attributes (iopt_node_attributes) and element attributes
(iopt_element_attributes). 1 (default) is on, 2 is on but the first column
will not include the node number or element number, 0 turns off output of that
part of the file. For instance, dump/avs/file.inp/cmo_name/1,1,0,0 will
write the node coordinates and element connectivity, but will not write node
attributes or element attributes.
**Use the =2 option with caution** since the output will really not be AVS format files. This is fine as long as you do not expect read/avs or the AVS graphics program to read the file.
For file format specification see [http://help.avs.com/Express/doc/help/refere
nce/dvmac/UCD_Form.htm](http://help.avs.com/Express/doc/help/reference/dvmac/U
CD_Form.htm)
**dump / avs2 / **file_name/[cmo_name]/[iopt_points,iopt_elements,iopt_node_attributes,iopt_element_attributes]
This option will output integers as integers instead of floating point. The
other avs option converts integers to reals on output. The /avs/ option above
outputs all attributes as real numbers. This option is slower but the files
are smaller if there are integers in the node or element attributes.
**dump**** **/** chad **** **/file_name/[cmo_name]/
Will output a file nodes, faces, and connectivity for tet, hex, pyr, or pri in
CHAD format. Writes attributes imt and itp.
**dump**** **/** coord**** **/file_name/[cmo_name]/ (See also **dump/fehm** )
Will output a single file with node list x,y,z values and element connectivity
list in FEHM format. Files are written in FEHM format and are described [by
clicking here for details.](dump/DUMP3.html)
The ** coord ** file is one of a set of files written when the **fehm** file
type is called.
**dump**** **/** datex | simul**** **/file_name/[cmo_name]/
Will output a file with Geometry, Element, Region, Location, and Dataset in
DATEX format.
**dump / elem_adj_elem **/ file_name/mo_name [_delatt_ | keepatt | attonly]
Option: **delatt** - Write adjacency information to an ascii file. Write list
of all elements adjacent to each element.
File format: elem_number ean_num e1 e2 ... en
Option: **keepatt** - write file and add node attribute **ean_num** (number of
elements adjacent to each node)
Option: **attonly** - do not write file, add node attribute ean_num, a dummy
argument is still required in the file_name field
**dump / elem_adj_node **/file_name/mo_name
Write adjacency information to an ascii file. Write list of all elements
adjacent to each node.
File format:
node_number number_of_adjacent_elem e1 e2 ... en &nbsp_place_holder;
** dump / exo** / file_name/ mo_name
** dump / exo** / file_name/ mo_name / psets / eltsets / facesets
** dump / exo** / file_name/ mo_name / psets / eltsets / facesets file1 file2 ... filen
** dump / exodusii ** / file_name/ mo_name
** dump / exodusII ** / file_name/ mo_name
Write a mesh object to a file in the Exodus II format.
**dump / fehm** / file_name_root / cmo_name / [**_delatt_ | keepatt**]&nbsp_place_holder;&nbsp_place_holder; [**keepatt_voronoi | keepatt_median**] &nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; &nbsp_place_holder;&nbsp_place_holder;/ [ **_ascii_ |
binary** ] / [**_scalar_ | vector | both | area_scalar | area_vector |
area_both**]
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; &nbsp_place_holder;&nbsp_place_holder;/ [**_all_ | graph |
coefs | none**] / [**hybrid | _nohybrid_ **]
Write out a series of files for the FEHM flow and transport code. The tokens
after the cmo name are all optional. The default options will
delete the outside node attributes and will not add attributes for the outside
voronoi or median areas.
The stor file will be written in ASCII format with scalar coefficient values
with compression of area coefficient list and indices.
[Click here for more details on the files and
options.](dump/DUMP3.html)&nbsp_place_holder;
The file_name is used to form the names of the following 7 files:
file_name.fehm - coordinates and geometry ( see dump/coord/... command)
file_name_material.zone - node imt (material) zone lists ( see
dump/zone_imt/... command)
file_name_outside.zone - node external boundary zone lists (see
dump/zone_outside/... command)
file_name_outside_vor.area - node external boundary area lists (see
dump/zone_outside/... command)
file_name_interface.zone - zone lists for nodes along material interfaces
file_name_multi_mat.zone - lists of node pairs connected across material
interfaces
file_name.stor - FEHM format file giving the voronoi (control volume)
associated with each node and the sparce matrix structure
**dump / geofest**/file_name
Write a file to be read by the [GeoFEST, Geophysical Finite Element Simulation
Tool](http://www.openchannelfoundation.org/projects/GeoFEST/)
.&nbsp_place_holder; The output file is ascii.
**dump / geom**/file_name
will write an ascii file containing the geometry information for the current
run. This information includes the region and mregion definitions and surface,
names, types and definitions.
**dump/gmv**/file-name/[mesh-object]/[**_ascii _**| **binary**]
Write a file to be read by the graphics program
[GMV](http://laws.lanl.gov/XCM/gmv/GMVHome.html).&nbsp_place_holder; The
defaults are binary and current mesh object.
&nbsp_place_holder;NOTE:&nbsp_place_holder; For LaGriT versions dated after
October 1999, use &nbsp_place_holder;&nbsp_place_holder;
**cmo**/**setatt**//**ipolydat**/**no**&nbsp_place_holder;&nbsp_place_holder;
to reduce file size. This command will keep the polygon data from being
written to GMV files.
**dump / gocad **/file_name
Write a gocad TSURF file. See [ GOCAD TSURF](http://www.connectflow.com/geovis
age/User/Formats/GocadTsurf.html).&nbsp_place_holder;
**dump / lagrit **/file_name/[cmo_name]/ [**ascii **| **binary**]
Write a LaGriT restart file that contains geometry and mesh object
information.&nbsp_place_holder; cmo_name can be '**-all-**' in which case all
mesh objects are written to the file or it can specify a list of mesh objects
to be written. A subsequent **read/lagrit** command will restart the code at
the state at which the dump command was issued. The default file type is
binary.
&nbsp_place_holder; **dump / recolor**/file_name
This command writes the existing **colormap** to the specified
file.&nbsp_place_holder; (See **[colormap](COLORMAP.html)** command)
**dump / stl **/file_name
Output in STL, stereo lithography format. This is only supported for triangle
mesh objects.
**dump / stor** / file_name_root / cmo_name / [ **_ascii_ | binary** ] /
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; &nbsp_place_holder;&nbsp_place_holder;/ [**_scalar_ | vector
| both | area_scalar | area_vector | area_both**]
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; &nbsp_place_holder;&nbsp_place_holder;/ [**_all_ | graph |
coefs | none**] / [**hybrid | _nohybrid_ **]
Same syntax as **dump/fehm** except the only output is the FEHM sparse matrix
coefficient STOR file file_name.stor.
File can be written in ascii or binary (fortran unformatted platform
dependent). The area coefficient values can be written as scalar or vector.
The compression default is all which will compress both the list of area
coefficients and the indices. The coefs compression, or none compression both
use and older algorithm and will result in larger files and may take longer to
run.
The ** stor ** file is one of a set of files written when the **fehm** file
type is called.
[Click here for further explanation of options.](dump/DUMP3.html)
[Click here for the STOR file format.](../STOR_Form.html)
**dump / tecplot **/file_name
Write a file to be read by the Tecplot graphics package.&nbsp_place_holder;
The output file is ascii. Only node attributes are output, element attributes
are ignored and not output. Tecplot does not support prism or pyramid element
types so they are written as eight node, degenerate hex elements. The ioflag
parameter is used to control if the node attributes are output or not is the
AVS ioflag. The expected suffix for the file name is '.plt'. If a name is
given without the .plt suffix, a suffix, .plt is added. Output is ascii. This
output format does not support output of a mesh with nodes but zero elements.
If there are zero elements, a header is written but node coordinate
information is not output.
**dump** / **zone** /file_name/[cmo_name] / [**_delatt_ | keepatt**]&nbsp_place_holder;&nbsp_place_holder; [**_keepatt_voronoi_ | keepatt_median**]
Write out a set of fehm format zone files for the mesh object nodes. These
include zones for mesh materials and the external faces of the mesh as
described below. The **keepatt** option will keep node attributes that tag
nodes on external mesh boundaries (see zone_outside). The **delatt** option
will delete the outside attributes if they exist (the are removed by default).
The area attributes for outside nodes can be created with the
**keepatt_voronoi** or **keepatt_median** options (see zone_outside).
Files are written in FEHM format and are described in the dump/fehm command
[by clicking here for details.](dump/DUMP3.html)
The file_name is used to create names for the following 5 files:
file_name_material.zone - node imt (material) zone lists ( see
dump/zone_imt/... command)
file_name_outside.zone - node external boundary zone lists (see
dump/zone_outside/... command)
file_name_outside_vor.area or file_name_outside_med.area - node external
boundary area lists (see dump/zone_outside/... command)
file_name_interface.zone - zone lists for nodes along material interfaces, 0
length file if mesh is single material
file_name_multi_mat.zone - lists of node pairs connected across material
interfaces, 0 length file if mesh is single material
**dump** / **zone_imt** /file_name/[cmo_name] / [ imt_value ]&nbsp_place_holder;&nbsp_place_holder;
Will output only one file with name file_name_material.zone. It is written in
FEHM zone format and are described [by clicking here for
details.](dump/DUMP3.html)
file_name_**material**.**zone** is node list for each integer material (imt)
value. If the optional fifth argument is specified as an integer, then a node
list file is written only listing the nodes with the value specified by
imt_value.
([For options to output PSET's as ZONE/ZONN files see: pset/zone](PSET.html))
The ** zone_imt ** file is one of a set of files written when the **fehm**
file type is called.
**dump** / **zone_outside** | **zone_outside_minmax** /file_name/[cmo_name] /
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
[**_delatt_ | keepatt**]&nbsp_place_holder; [**_keepatt_voronoi_ |
keepatt_median**]
Write fehm zone format files that list the outside node list and the
associated outside area list.
There are two files written:
1. file_name_outside.zone is a node list for each of 6 possible external
boundaries.
If keepatt is specified, then 6 node based attributes are added to the mesh
object with the names top, bottom, left_w, right_e, back_n, and front_s. A
node can occur in multiple zones. For instance, a node located on a top corner
of the mesh can be found in zones for top, front_s, and left_w.
1 = top = top = positive z direction (0,0,1)
2 = bottom = bottom = negative z direction (0,0,-1)
3 = left_w = left or west = negative x direction (-1,0,0)
4 = front_s = front or south = negative y direction (0,-1,0)
5 = right_e = right or east = positive x direction (1,0,0)
6 = back_n = back or north = positive y direction (0,1,0)
2. file_name_outside_vor.area is a list of Voronoi area vectors
(Ax_i,Ay_i,Az_i) associated with each external node. It is written to match
the node lists as written in the outside.zone file. Along with each outside
zone tag (such as top), there is a sum of each vector for that zone. For
applications such as infiltration, the z component (each 3rd value) would be
used from the top zone list.
00001 top Sum VORONOI vectors: 0.5000000E+00 0.5000000E+00 0.5000000E+00
nnum
3
-2.500000000000E-01 -2.500000000000E-01 2.500000000000E-01 2.500000000000E-01 0.000000000000E+00 1.250000000000E-01
0.000000000000E+00 2.500000000000E-01 1.250000000000E-01
If the keyword keepatt_voronoi is specified, three node attributes (xn_varea,
yn_varea, zn_varea) representing the voronoi area are added.
If the keyword keepatt_median is specified, three node attributes (xn_marea,
yn_marea, zn_marea) representing the median area are added and the file name
will be file_name_outside_med.area. Note that the old version file name
file_name_outside.area has area vectors computed with the median strategy.
The option **zone_outside_minmax** is used to find the min and max external
node along each row and column of the regular grid. [Click here for image
](../../images/zone_outside.png) showing difference between the default and
the minmax options for outside nodes.
These **zone_outside** files are part of a set of files written when the
**zone** or **fehm** file type is called. The fehm zone format and
descriptions are&nbsp_place_holder; [in the **dump/fehm** command
details.](dump/DUMP3.html)
EXAMPLES:
**dump **/ gmv /file_name.gmv/cmo_name/
**dump **/ gmv /file_name.gmv/cmo_name/ascii
**dump **/ file_name.gmv / cmo_name
**dump **/ tecplot /file_name.plt/cmo_name
**dump **/ lagrit /file_name.lg/-all-/binary
**dump**/file_name.inp/cmo_name
**dump** / avs /file_name.inp/cmo_name
**dump **/ avs /file_name.inp/cmo_name/1 0 0 0 (output only node coordinates)
**dump **/ avs /file_name.inp/cmo_name/1 1 0 0 (output node coordinates and element connectivity)
**dump **/ avs /file_name.inp/cmo_name/0 0 0 1 (output element attributes)
**dump** / avs /file_name.inp/cmo_name/0 0 2 2 (output node and element attributes without node numbers as first column of output)
**dump** / avs2 /file_name.inp/cmo_name/1 1 1 0 (output node coordinates, element connectivity and node attributes)
**dump** / fehm /file_root/cmo_name/ (write ascii compressed STOR file and full set of fehm input files)
**dump** / stor /file_root/cmo_name/ (write ascii compressed STOR file)
**dump** / stor /file_root/cmo_name/ binary (write unformatted compressed STOR file - platform dependent)
**dump **/ stor /file_name/cmo_name/ascii/area_scalar
**dump** / zone_outside /file_root/cmo_name/keepatt (write outside node zones and voronoi areas, keep outside attributes)
**dump** / zone_outside /file_root/cmo_name/keepatt_voronoi (write outside node zones and keep Voronoi area attributes)
**dump** / zone_outside_minmax /file_root/cmo_name (write outside nodes at minmax extent of each column)
**dump** / zone /file_root/cmo_name/ delatt keepatt_voronoi (write all FEHM zone and area files, delete the outside attributes and keep the voronoi area attributes)
**dump**/ exo / file_name / cmo_name
Write generic exodus output without any sets.
**dump**/ exo / file_name / cmo_name / psets
Write exodus output with point sets only.
**dump**/ exo / file_name / cmo_name / / eltsets
Write exodus output with element sets only.
**dump**/ exo / file_name / cmo_name / / / facesets
Write exodus output with face sets only. The facesets are internally
calculated and defined. Note that the algorithm is computationally expensive
and can take a long time to finish.
**dump**/ exo / file_name / cmo_name / / / facesets file1,file2,...,filen
Write exodus output with face sets only. The face sets are imported from
file1, file2, ..., filen.
**dump**/ exo / file_name / cmo_name / psets / eltsets / facesets file1,file2,...,filen
Write exodus output with all psets, element sets, and face sets. The face sets
are imported from file1, file2, ..., filen.
[Click here for demos](../main_dump.html)

View File

@@ -0,0 +1,25 @@
.. _dump_recolor :
**_DUMP_RECOLOR_** This command is similar to the regular [dump](DUMP2.html) command except that the mesh object is recolored before being dumped.&nbsp_place_holder; There are two options specific to this version.&nbsp_place_holder; If** restore** is specified&nbsp_place_holder; (the default), the original itetclr and imt1 values are restored, leaving the mesh object unaltered.&nbsp_place_holder; If **norestore **is specified the mesh object is left recolored (and the original values of itetclr and imt1 lost).&nbsp_place_holder; If **create** is specified (the default) then a new colormap is created and used to recolor.&nbsp_place_holder; Otherwise if **existing **is specified, the existing colormap is used to recolor the mesh object.&nbsp_place_holder; Three dump types are available:&nbsp_place_holder; "**gmv**", "**LaGriT**" and "**avs**". iomode can be **ascii **or** binary**;**_ binary_** is the default. FORMAT:
> **dump_recolor/**type/file/mo/[**restore| norestore**]/[**create|existing**]
/imode
EXAMPLE:
> **dump_recolor/gmv**/mesh.gmv////**ascii**
Writes an ascii gmv dump to the fine mesh.gmv.&nbsp_place_holder; The mesh
object that is dumped is the current mesh object recolored according to its
own material adjacency.
>
> **dump_recolor/gmv**/mesh.gmv//**norestore/existing**
Recolors the current mesh object using the existing colormap and then writes a
binary gmv dump to the fine mesh.gmv.
&nbsp_place_holder;

View File

@@ -0,0 +1,47 @@
.. _edit:
****&nbsp_place_holder;
> **_EDIT_**
>
>> Prints an edit of various quantities based on the value of the option
argument, the point limits, and/or a material specification. iopt specifies
what to print as follows:
>>
>>> no value for iopt --edit of sums, averages, and extrema of position
coordinates (x,y,z), and of mesh object attribute fields
**two**--gives same information as the default, but only for the two points specified.
**parts**--gives a list of materials types, their names, count and sequence.
**points**--lists up to 4 cell-center array values for a set of points. Possible array values are: xic,yic,zic,or mesh object attribute name
> FORMAT:
>
>> **edit** / iopt / ifirst,ilast,istride / material_#_or_name/
**edit**/ **angular**/ifirst,ilast,istride /material_#_or_name/xcen,**edit**/ **radial** /ifirst,ilast,istride /material_#_or_name/xcen,**edit****/ points /**ifirst,ilast,istride /material_#_or_name/array1,array3,array4/
&nbsp_place_holder;
>
> EXAMPLES:
&nbsp_place_holder;
>
>> **edit**/ **parts**/
**edit**/
>>
>> **edit**/**points**/**pset**,**get**,some+points/
&nbsp_place_holder;

View File

@@ -0,0 +1,38 @@
.. _elmtest :
&nbsp_place_holder;
> **_ELMTEST_**
>
>> This command test a mesh for valid jtet connectivity.&nbsp_place_holder; If
the mesh is a network it allows for jtet loops; in this case the jtet
relationship is not reflexive but, for example if the loop has length 3.
>>
>> Normally degenerate faces may not have neighbors with a different number of
nodes; however, if&nbsp_place_holder; a scalar mesh attribute
'jtet_reduce_nnd' is defined and has the value 1, faces will match if the node
numbers are the same even if a node number appears more that once.
>
> FORMAT:
>
>> **elmtest** /[/nwrite] where nwrite is the number of warning messages to
print.&nbsp_place_holder; The default for nwrite is 20.
>
> EXAMPLES:
>
>> **elmtest**
**elmtest**//100

View File

@@ -0,0 +1,75 @@
.. _eltset :
&nbsp_place_holder;
> **_ELTSET_**
>
>> This command creates eltsets or element sets with membership criteria:
>>
>> 1. **eq**:equal to, gt:greater than, **lt**:less than, **ge**: greater
than or equal, **le**: less than or equal to, **ne**: no equal to value of an
element attribute
>> 2. **inclusive** pset membership - all elements any of whose nodes is in
pset
>> 3. **exclusive** pset membership - all elements all of whose nodes are in
pset
>> 4. **face** pset membership - elements if all nodes of a face are in pset
>> 5. **union, inter, not**, boolian comparison with other eltsets
>> 6. **region** or **mregion** membership
>> 7. quality criteria (**volume** or **aspect** ratio)
>> 8. **list** - list element set members to screen, or list the names of
element sets if no 'eltset_name' is specified.
>> 9. **write** - write element set members to a file
>> 10. **delete** - remove element set from mesh object
>> The **mregion **and **region** form of this command calculate the center of
mass of the element and determine which mregion or region the center lies in.
It is possible if the interface surfaces are curved that the center will not
lie in the same mregion or region as the vertices. Using itetclr will give the
better result.
>
> FORMAT:
>
>> **eltset**/eset_name/element_attribute_name/**eq**|**ne**|**lt**|**gt**|**l
e**|**ge**/value/
**eltset/**eset_nam**e****/union|inter|not|delete/**eset_list/
**eltset/**eset_name**/****inclusive|exclusive|face/pset/get/**pset_name/
**eltset/**eset_name**/region|mregion/**region_name**|**mregion_name**/**
**eltset**/eset_name /**volume/ eq|ne|lt|gt|le|ge** /value
**eltset**/eset_name /**aspect/ eq|ne|lt|gt|le|ge** /value
**eltset**/eset_name /**list**
**eltset**/eset_name /**write**/file_name[.cellset]/[**ascii**|**binary**]
**eltset**/-all- /**write**/file_name[.cellset]/[**ascii**|**binary**]
>
> EXAMPLES:
>
>> **eltset/**element_set1/**itetclr**/**eq**/4
**eltset/**element_set2/**face**/**pset**/**get**/mypset
**eltset/**element_set3/**inclusive**/**pset**/**get**/mypset
**eltset**/element_set4/**region**/upper
**eltset**/element_set5/**volume**/**lt**/3.0
**eltset**/element_set5/**delete**
**eltset** / /**list **(list the names of element sets which have been defined)

View File

@@ -0,0 +1,158 @@
.. _extract:
&nbsp_place_holder;
> **_EXTRACT_**
>
>> This command produces a 2D mesh object from a 3D mesh object. A material
interface, a plane , an isosurface or a network may be extracted. A plane may
be defined by three points in the plane, by a vector normal to the plane, by
three points on the axes of the space, or by the coefficients of the plane
equation ax+by+cz=d. An isosurface is defined by the value of the surface and
the mesh object attribute to test for this value. An interface is defined by
the material(s) bounding the interface. region1, [region2]are the material
numbers or the material region (mregion) names whose interface is to be
extracted. Use **-all-** to extract from all interfaces. The
**[pset](../conventions.html)** syntax can be used to limit the action of the
extract with the interface and network options only. The other options ignore
pset.&nbsp_place_holder; The output 2D mesh object is cmoout; the input 3D
mesh object is cmoin.
>>
>> A network is defined as the material interface network from the mesh
object. Unlike the other extract forms, this extracts the "parent" interface
and not the "child" interface, and ignores boundaries. The output cmo also
contains a new attribute "map" which maps nodes in the output cmo to (parent)
nodes in the input cmo. This is supposed to work for 2D meshes (tri, quad, or
hybrid) in 2D or 3D and 3D meshes (tet, pyr, pri, hex or hybrid).
>>
>> The surfmesh option is described by following the link:
**[extract/surfmesh.](dump/EXTRACT_SURFMESH.html)**
>>
>> The output MO will be oriented such that the outward normal of the plane
that defines the surface will point in the same direction as the normals for
the triangles in the output MO. If the command extracts on an isosurface, the
output MO will be oriented such that the normals for the triangles point in
the direction of increasing field. If the command extracts on an interface,
the output MO triangles will be oriented the same as the triangles extracted
from region1 of the input MO. In the case of a plane extracted along all or a
portion of a material interface, only those points that lie inside the
material (i.e.: away from the direction of the normal) will be picked up. If
the extraction is on a boundary, the normal to the extraction plane must point
out of the material in order for points to be picked up.
>
> FORMAT:
&nbsp_place_holder; **extract**/**plane**/**threepts**/x1,y1,z1/x2,y2,z2/x3,y3
,z3/ifirst,ilast,istride/cmoout/cmoin
**extract**/**plane**/**ptnorm**/x1,y1,z1/xn,yn,zn/ ifirst,ilast,istride/cmoout/cmoin
**extract**/**plane**/**axes**/xv,yv,zv/ifirst,ilast,istride/cmoout/
**extract**/**plane**/**abcd**/a,b,c,d/ ifirst,ilast,istride/cmoout/cmoin
**extract**/**isosurf**/attribute/value/ ifirst,ilast,istride/cmoout/cmoin
**extract**/**intrface**/region1/ifirst,ilast,istride/cmoout/`cmoin`
**extract**/**intrfac2**/region1/region2/ifirst,ilast,istride/cmoout/`cmoin`
**extract/network**/ifirst,ilast,istride/cmoout/cmoin
**extract/surfmesh**/1,0,0/cmoout/[cmoin] EXAMPLE: cmo/create/3dmesh/
* add an attribute to contain a field for refinement and extraction
cmo/addatt/3dmesh/boron
cmo/modatt/3dmesh/boron/ioflag/gx/
cmo/modatt/3dmesh/boron/interp/linear/
*&nbsp_place_holder; simple unit cube divided into 2 region by a horizontal plane
surface/cube/reflect/box/.0,.0,.0/1.,1.,1./
surface/mid/intrface/plane/0.,0.,.5/1.,0.,.5/1.,1.,.5/
region/r1/ le cube and le mid /
mregion/m1/ le cube and lt mid /
region/r2/ le cube and gt mid /
mregion/m2/ le cube and gt mid /
* start out with just a few nodes
createpts/xyz/3,3,3/0.,0.,0./1.,1.,1./1,1,1/
setpts
search
settets
* put some values on the field
doping/gaussian/boron/set/1,0,0/xyz/0.0,0.0,0.0/1.,0.,0./0.5/ &
&nbsp_place_holder;3.23e+20/0.063/
* use refine to add more detail - note only linear interpolation
* between the few original nodes - one would never really do this without
* recalculating the field on the finer mesh
refine/maxsize///edge/1,0,0/0.01,0.0,0.0/
recon
refine/constant/boron/linear/edge/1,0,0/1.3+20/
recon
* extract a plane
extract/plane/threepts/0.,0.,0./1.,0.,0./1.,0.,1./1,0,0/2dmesh/3dmesh
pset/p1/geom/xyz/0.,0.,0./.5,.5,.5/
* extract a plane - note pset is ignored!
extract/plane/threepts/0.,0.,0./1.,0.,0./1.,0.,1./pset,get,p1/2dm1/3dmesh
dump/gmv/gmv.3dm/3dmesh/
dump/gmv/gmv.2dm/2dmesh/
dump/gmv/gmv.2d1m/2dm1/
cmo/select/3dmesh
* refine some more
refine/constant/boron/linear/edge/1,0,0/1.3+20/
recon
* now get an isosurface
extract/isosurf/boron/1.0e+20/1,0,0/2dm2/3dmesh
dump/gmv/gmv.2dm2/2dm2
* get the boundary of one region
extract/intrface/m1/1,0,0/2dm3/3dmesh
dump/gmv/gmv.2dm3/2dm3
* get the interface between two regions
extract/intrfac2/m1/m2/1,0,0/2dm4/3dmesh
dump/gmv/gmv.2dm4/2dm4
* try the network option
extract/network/1,0,0/2dm5/3dmesh
dump/gmv/gmv.2dm5/2dm5
* get the surface mesh - note interface plane is included
extract/surfmesh/1,0,0/2dm6/3dmesh
dump/gmv/gmv.2dm6/2dm6
finish

View File

@@ -0,0 +1,178 @@
.. _extrude:
> &nbsp_place_holder;
>
> **_EXTRUDE_**
> > This command takes a topologically 1d or 2d mesh (a line, a set of line
segments, or a planar or non-planar surface) and extrudes it into three
dimensions along either the normal to the curve or surface (default), along a
user defined vector, or to a set of points that the user has specified.
> > If the extrusion was along the normal of the surface or along a user
defined vector, the command can optionally find the external surface of the
volume created and return that to the user.
>
> FORMAT:
>
>> **extrude**/mesh1/mesh2/**const|min**/offset/**volume|bubble**/[**norm**|x1
,y1,z1]
> > OR
> > **extrude**/mesh1/mesh2/**interp**/layers/**range1/range2**
> > where** range1 **and** range2 **are defined as
**[pset,get,**`pset_name`**|**`ifirst,ilast,istride`**]**
>
> mesh1 is the name of the resulting mesh.
>
> mesh2 is the name of the initial mesh. This mesh must be made up of **lines,
tris, quads, or hybrids**.
>
> **const** is a keyword that indicates that the distance from each of the
points in the initial mesh along the extruding vector will be equal to
offset.Therefore, if you wanted the extruded mesh to have the same surface or
edge characteristics as the original mesh on both the initial and newly formed
surface or edge, you would use **const**.
>
> **min** is a keyword and indicates that the minimum distance along the
extruding vector to a reference plane that is perpendicular to the extruding
vector will be equal to offset. This means that if you want an extruded mesh
with at least one flat side, you would use **min**. This also means that if
you use **min**, extrude computes the "bottom point" on the initial mesh, or
the point closest to the reference plane, and then extrudes that point by min,
all the other points will therefore be extruded by a larger distance. This
avoids the problem of having the initial mesh intersect the reference plane
that forms the "bottom" of the created mesh.
>
> **interp** is a keyword and indicates a different kind of extrusion. Instead
of giving the initial mesh a direction in which to be extruded, this keyword
specifies that the initial mesh is made up of two sets of points to be
connected. These point sets are defined by **range1** and **range2**. The
ranges can be defined using the standard LaGriT techniques of **pset**,
**get**, <pset name> or ifirst, ilast, istride.
>
> layers is the number of layers of elements that will be placed between the
original two surfaces. This is a good point distribution technique. The final
number of layers of points will be equal to layers+1. It must be an integer.
>
> offset is the length of extrusion. It can either be an integer or a real.
>
> **volume** is a keyword and indicates that the volume that was extruded is
to be returned to the user (i.e., the operation will result in either a
topologically 2d (quad) mesh if the initial mesh was topologically 1d, or a
topologically 3d (prism or hex) mesh if the initial mesh was topologically
2d). **bubble** is a keyword and indicates that the external surface of the
volume created will be returned. If bubble is used, hextotet will be called on
the final surface, as well as extract.
>
> The final argument is optional. It must either be the keyword **norm**, or a
three valued vector (in cartesian space) specifying a direction. The default,
if no argument is provided, is **norm**. If **norm** is chosen, the element
area weighted normal to the surface or curve is computed, and the initial mesh
is extruded in that direction. Otherwise, if a vector value is specified, the
vector is normalized, and its direction used to extrude the initial mesh.
>
> NOTES:
>
>> This code works on meshes containing lines, quads, triangles, or hybrid
polygons. If there are lines in the initial mesh, they become quads; tris
become prisms; and quads become hexes. If bubble is used, however, lines are
not permitted because they do not result in a mesh that extract and hextotet
agree with. The code will error out in this situation.
> > It is very possible to create an invalid mesh object with this command,
especially if the initial mesh is a multivalued surface, or if the extruding
vector is in a direction parallel to the plane the initial surface is in. You
have been warned.
> > If the **interp** keyword is used, the code expects the number of points
in **range1** and **range2** to be equal, and to correspond such that the
first point in **range1** will connect to the first point in **range2 **in the
final mesh object, etc. Other setups will result in a twisted, perhaps invalid
mesh object.
>
> EXAMPLES:
>
>> **extrude**/cmo_hex/cmo_quad/**const**/5.0/**volume**
> > This would result in hexes being created out of the initial quad sheet.
First, since **const** and **volume** are used, the quad sheet will be
extruded a constant amount from each point. Second, since the extruding vector
and **norm** are omitted, the extrusion will occur on the average normal to
the plane. Therefore, this command will result in a mesh of hexahedrons
extruded 5.0 units in an orthogonal direction. (Or, more succinctly, a mesh of
parallelopipeds of height 5.)
> > **extrude**/cmo_prism/cmo_tri/**min**/10/**volume**/1,2,-1
> > This command would result in prisms being created out of the initial tri
sheet. First, since **min** is used, the "bottom" of the extruded volume would
be a plane. Second, because the vector 1, 2, -1 is specified, the extrusion
will be in that direction (again the magnitude is not important, the vector is
normalized to a unit vector), not in the direction of the average normal.
> > **extrude**/cmo_bigbox/cmo_quad/**const**/5.0/**bubble/**
> > This would result in a surface surrounding an amalgamation of
parallelopipeds created from the initial quad sheet. First, since **const** is
used the quads will be extruded a constant amount from each point in the quad
sheet. Second, since the extruding vector and **norm** are omitted, the
extrusion will occur on the average normal to the plane. Therefore, this
command will result in a mesh of tris that form the surface of a group of
parallelopipeds extruded 5.0 units in an orthogonal direction.
> > **extrude**/cmo_arbshape/cmo_tri/**min**/7.5/**bubble**/3,-2.5,-6
> > This command would result in a mesh of tris that form a surface enclosing
a volume of prisms being created out of the initial tri sheet. First, since
**min** is used, the "bottom" of the surface would be a plane. Second, because
the vector 3, -2.5, -6 is specified, the extrusion will be in that direction
(again the magnitude is not important, the vector is normalized to a unit
vector), not in the direction of the average normal of the initial tri
surface.
> > **extrude**/cmo_prism/cmo_tris/**interp**/14/**pset, get, **bottom**/pset,
get, **top
> > This command would result in a mesh of prisms being created out of the two
sets of tri sheets in cmo_tris as well as 14-1 layers of additional tris that
would be interpolated. First, since interp is used, the pset defined by bottom
would end up connected to the pset defined by top. Second, there would be 14
layers of elements that would be placed between the psets top and bottom, so
that the resulting grid would have 15 layers of points that would be connected
to one another to form prisms.

View File

@@ -0,0 +1,97 @@
.. _field :
&nbsp_place_holder;
> **_FIELD_**
>
>> The FIELD Command option manipulates one or more specified fields in the
Current Mesh Object
>>
>> *For all points in the specified point set, we compose the field value with
the specified composition function. The composition functions allowed are
currently **asinh** and **log**. So, for example, if 'i' is in the point set
and **asinh** is the composition function, we have the assignment:
>>
>>> field(i) = asinh(field(i)).
>>
>> *The **field**/**mfedraw **command causes a binary dump of the specified
fields to two files in the **mfedraw** input format. **mfedraw** is a graphics
package for visualizing moving piecewise linear functions of two variables,
such as those originally encountered in Moving Finite Elements. The files are
named 'root1.bin' and 'root2.bin', where 'root' is the root file name
argument. Because the graphics data are a function of two variables, you must
supply two orthonormal vectors (x1,y1,z1) and (x2,y2,z2) which specify the
graphics coordinate axes. More precisely, given 3D coordinates (x,y,z), the 2D
graphic coordinates will then be (x*x1+y*y1+z*z1 , x*x2+y*y2+z*z2). So, for
example, the choice:
>>
>>> /x1,y1,z1/x2,y2,z2/ = /1.,0.,0./0.,1.,0./
>>
>> causes the 'z' coordinate to be discarded while the 'x' and 'y' coordinates
are unchanged.
>>
>> *The **field**/**scale** option scales the field values of the specified
points. scale option can take on the values **normalize**, **multiply**, and
**divide**. If **normalize **is specified, we multiply all the field values by
**factor**/(fieldmax-fieldmin), where 'fieldmax' and 'fieldmin' are the
maximum and minimum values taken over the point set. This has the effect of
normalizing the field so that the new difference between the maximum and
minimum values is equal to **factor**. If **multiply** is specified, we
multiply all the field values in the point set by **factor**. If **divide **is
specified, we divide all the field values in the point set by **factor.**
>>
>> *The **field**/**volavg** option, for all the members of the point set and
for all specified fields, replaces the point field values with values that
represent the average of the field(s) over the control volumes associated with
the points. The averaging option specifies what kind of control volume is to
be used; the choices are **voronoi** and** median**. iterations is an integer
that specifies a repeat count for how many times this procedure is to be
performed on the field(s). The affect of this process is to broaden and smooth
the features of the field(s), similar to the effect of a diffusion process.
The **voronoi **choice, unlike the **median**. choice, produces a diffusive
effect independent of mesh connectivity. However, again unlike the **median**.
choice, it _requires_ that the mesh be Delaunay, or incorrect results will
occur.
>
> FORMAT:
>
>> **field**/**compose**/composition function/ifirst,ilast,istride/field list/
**field**/**mfedraw**/root file name/x1,y1,z1/x2,y2,z2/field list/
**field/scale /**scale option/factor/ifirst,ilast,istride/ field list /
**field**/**volavg**/averaging option/iterations/ifirst,ilast,istride/filed list/
>
> EXAMPLES:
>
>> **field**/**compose**/**asinh**/1,0,0/**field**/**scale**/**normalize**/4.*
*field**/**volavg**/**voronoi**/4/1,
>
> &nbsp_place_holder;
&nbsp_place_holder;

View File

@@ -0,0 +1,606 @@
.. _filter:
&nbsp_place_holder;
> **_FILTER_**
>
>> **FORMAT**:
>>
>>> **filter**/ifirst,ilast,istride/[tolerance/min|max/attribute]
**filter**/element/[search_range]/[**nodelete** | delete]
>>
>>> **Filter **is used in either node or element mode.&nbsp_place_holder; In
'node' mode it is used to mark for deletion nodes that lie within a distance,
epsilon, of one another.&nbsp_place_holder; In 'element' mode it either marks
or deletes elements which have the exact same set of nodes. The test is on
node numbers, not the geometric position of nodes so for this to work one
should filter the nodes first.
**
Node Mode:**
Used to filter (mark for deletion) points that are geometricly close, (mesh
object epsilon value), or if the tolerance parameter is given, closer than the
tolerance specified by the user. This command changes the node type of the
deleted points to type 'dudded' (itp=21) but does not remove them from the
point list. Note that at least one point must be specified in the point range
(ifirst,ilast,istride) in order for this command to work properly. Dudded
points (itp=21) can be removed from the mesh object by calling
[rmpoint/compress](RMPOINT.html).
>>>
>>> When the min|max / attribute option is used, nodes for deletion are
detected based on the standard geometric criteria however, the choice about
which node is retained is determined based on comparison of the attribute
values and the node with either the min or max value is retained.
>>>
>>>
**Element Mode:**
Search a mesh object for duplicate elements. A duplicate element is defined as
having the exact same set of nodes in the element connectivity list (itet).
The order of the nodes in the connectivity does not matter. The element with
the larger itetclr value (master) will be kept. The duplicate element will
have its material color (itetclr) changed to max(itetclr) + 1. Two new element
attributes (iclr1, iclr2) are added to the mesh object to keep track of the
correspondence of master(retained)/duplicate(removed) elements and their
original material id (itetclr).&nbsp_place_holder;
>
> For all elements the values of iclr1 are set their original itetclr values.
For any element that is neither master nor duplicate, the value of icr2 is set
to its itetclr value.
For an element that is a master, icrl2 is set to the original itetclr value of
its duplicate.
For an element that is a duplicate, icrl2 is set to the original itetclr value
of its master.
>
>> > For example, consider the 4 element mesh, where element 2 and 3 are
duplicates and:
>>>
>>> Element 1,2 itetclr = 1
Element 3,4 itetclr = 2
then after:
filter/element/10/nodelete&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hol
der;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holde
r;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;
Maximum material id max(itetclr)&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder; =&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 2&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
Duplicate Elements will be set to itetclr =&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 3&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
search_range&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hol
der;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holde
r;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; =&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder; 10&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
nelements searched&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; =&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hol
der; 4&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hol
der;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holde
r;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;
Number of duplicate element found&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder; =&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder; 1&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hol
der;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holde
r;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
cmo/printatt/cmohex1/itetclr/1 0 0&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;
Attribute: itetclr&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hol
der;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holde
r;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 1&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder; 1&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 2&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder; 3&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 3&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder; 2&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 4&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder; 2&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
cmo/printatt/cmohex1/iclr1/1 0 0&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
Attribute: iclr1&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hol
der;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holde
r;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 1&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder; 1&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 2&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder; 1&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 3&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder; 2&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 4&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder; 2&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
cmo/printatt/cmohex1/iclr2/1 0 0&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
Attribute: iclr2&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hol
der;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holde
r;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 1&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder; 1&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 2&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder; 2&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 3&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder; 1&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 4&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder; 2&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&
nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nb
sp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp
_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_p
lace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place
_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;
>>>
>>>
All elements are tested. The search for each element's duplicate does not
occur over the entire element list. The default for search_range is 10 and
results in looking at the 10 elements in the element list sequentially above
and 10 elements sequentially below the test element.&nbsp_place_holder; In the
example given below the elements are sorted so that elements that are
physically close to each other will be close to each other in the element
list.
The&nbsp_place_holder;search_range can be set by the user. Setting
search_range to a number larger than the number of elements will cause all
elements to be searched.
The algorithm will only detect one duplicate element per element. If there are
more than two elements with the same connectivity, they can be found by
calling **filter/element** multiple times.
The default behavior is to not delete the duplicate
elements.&nbsp_place_holder; However the duplicate elements will be deleted
from the mesh if the parameter delete is specified.
In general if you are merging together two meshes and then want to delete
duplicate elements the commands might be:
* Merge two mesh objects
** addmesh / ** merge / cmohex / cmohex1 / cmohex2
* Create an attribute with the median x,y,z coordinate of each element
createpts / median
* Sort and reorder the elements based on the median points. This will insure that elements that occupy the
* same location will have element numbers near one another.
sort / -def- / index / ascending / ikey / xmed ymed zmed
reorder/ -def- /ikey
* Filter and remove duplicate nodes.
filter / 1 0 0
rmpoint / compress
* Filter and remove duplicate elements.
filter / element / / delete
>
> &nbsp_place_holder;EXAMPLES:
>
>> **filter**
Filter all nodes and delete duplicates with epsilon tolerance is set
automaticly.
**filter** / 1 0 0 / 1.e-3
Filter all nodes and delete duplicates where epsilon tolerance is set by user
to 1.e-3.
**filter** / pset get point_set
Filter a subset of the nodes and delete duplicates with epsilon tolerance set
automaticly.
**filter** / 1 0 0 / / min / imt
Filter all nodes and delete duplicates with epsilon tolerance set automaticly.
When duplicate nodes are detected the imt attribute is examined and the node
with minimum imt value is retained.
**filter** / element
Filter all elements and set itetclr of duplicates to max(itetclr) + 1. Assign
values to iclr1 and iclr2 arrays.
**filter** / element / / nodelete
Filter elements and set itetclr of duplicates to max(itetclr) + 1. Assign
values to iclr1 and iclr2 arrays.
**filter** / element / / delete
Filter elements and delete duplicate elements. Assign values to iclr1 and
iclr2 arrays.
**filter** / element / 1e20 / delete
Filter all elements (assuming there are less than 1e20)&nbsp_place_holder;
with an exhaustive search and delete duplicate elements. Assign values to
iclr1 and iclr2 arrays.
&nbsp_place_holder;

View File

@@ -0,0 +1,20 @@
.. _finish :
****&nbsp_place_holder;
> **_FINISH_**
>
>> Terminate processing this command stream and return to the driver routine.
> FORMAT:
>
>> finish
&nbsp_place_holder;
&nbsp_place_holder;

View File

@@ -0,0 +1,45 @@
.. _fset:
&nbsp_place_holder;
FSET
> This command&nbsp_place_holder; is used to&nbsp_place_holder; define
a&nbsp_place_holder; set&nbsp_place_holder; of element faces. Defining face
sets can be useful for either defining boundary conditions, material
interfaces, or surface subsets for further mesh processing.
> FORMAT:
>
>> fset / name / pset, get, pointsetname /
The fset name must be an integer or character string. Currently, only 32 named
face sets may exist. However, any number of integer-numbered face sets (up to
the total number of faces in the problem) may be defined. Face sets may be
used in all of the usual ways that eltsets and psets may be used, e.g :
**cmo/setatt**/ 3dmesh/fluid_structure/**fset**,**get**,blue/
where fluid_structure is the name of a face set attribute.
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
**
**NOTE: All modules do not support use of fset.**
**
>
> EXAMPLE:
>
>> &nbsp_place_holder;fset / fname / pset, get psetname
&nbsp_place_holder;

View File

@@ -0,0 +1,153 @@
.. _geniee:
&nbsp_place_holder;
> **_GENIEE_**
>
>> OPTION1:
Generate element connectivity list (jtet) that gives neighbor information.
Element connectivity is maintained by LaGriT, but can also be generated by the
user with this command.
>>
>> The jtet attribute contains for each facet of an element the neighboring
element and its local face.&nbsp_place_holder; For 3D grids the jtet
relationship is reflexsive; each element-face pair has exactly one neighboring
element-face pair.&nbsp_place_holder; For 2D grids the jtet relationship can
include cycles; a triangle or quad edge may have many edge
neighbors.&nbsp_place_holder; In this case the jtet is constructed as a closed
cycle where the jtet of one element-edge pair will be a neighboring element-
edge pair whose jtet wil be another neighboring element-edge pair and so on
until all neighbors are included in the cycle exactly once.
>>
>> The jtet is constructed by looking at matching node numbers and will use
the parent nodes if they exist.&nbsp_place_holder; Faces with matching node
coordinates but different node numbers will not be matched.
For hybrid grids that contain degenerate elements there are two
options.&nbsp_place_holder; If the mesh object attribute jtet_reduce_nnd
exists and is set to 1, then faces with repeated node numbers will be matched
to faces with the same numbers but not repeated.&nbsp_place_holder; For
example if a degenerate hex has a face 1 1 2 3 and there is an element (prism,
tet, pyramid) with face 1 2 3 and if jtet_reduce_nnd is 1, then these faces
will be matched.&nbsp_place_holder; Otherwise they will be marked as external
boundary faces.
>>
>> OPTION2:
Attempt to make the topological orientation (itet array) of a triangle, quad,
or hybrid tri/quad mesh consistent so that shared edges are traversed in
opposite directions. This is only possible in a mesh with jtet_loop_max = 2.
For networks with jtet_loop_max > 2 there may not be a configuration that
meets the goal.
>>
>> This command could also be used to flip the normals of a mesh that is
already consistent. For example:
geniee / -def- / 2dnormal / -1
>>
>> _Note:_ For the case where a mesh is not completely edge connected, this
module will detect that all elements have not been tested and will warn the
user and suggest a command line syntax to test elements not visited.
_Note:_ Code not set up for a mesh with parent/child chains. When check is
made, it compares child points. When permutation of elements is done, only
itet and jtet arrays are updated.
>
> FORMAT:
>
>> OPTION 1:
**geniee**
OPTION 2:
**geniee** / **cmoname** / **2dnormal** / **reference_element_number** / [addatt]
**cmoname** - name of mesh object to operate on. Can be /&nbsp_place_holder; / or /-def-/
**2dnormal** - keyword to cause this module to execute
**reference_element_number** - default = 1
This is the element number that will be the reference element that all other
elements are compared to. If this parameter is a negative number, the
orientation of element number abs(reference_element_number) is reversed and
then used as the reference.
**reference_element_number** = 0 will check and report if orientation is consistent, but will not do any flipping.
**addatt** - if the keyword addatt is included, two new arrays are added to the mesh object.
**ipath** - The order in which elements are visited.
**ifflip** -&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0 if the element orientation was NOT changed
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 1 if the element
orientation was changed
>
> EXAMPLE:
>
>> geniee / cmo / 2dnormal
Check orientation of tri/quad elements and if their orientation is different
than element 1, then flip their orientation.
geniee / cmo/2dnormal/-1
Flip the orientation of element one and then make the rest of the mesh
consistent with element 1. If the mesh object is already consistent, then this
command will reverse the orientation of all the elements in a surface (tri,
quad) mesh.
geniee / -def- / 2dnormal / 17
Check orientation of tri/quad elements and if their orientation is different
than element 17, then flip their orientation.
geniee / cmo / 2dnormal / 0
Check orientation of tri/quad elements and if their orientation is different
than element 1, report the difference but do not change the mesh object
orientation.
geniee / cmo / 2dnormal / 0 / addatt
Check orientation of tri/quad elements and if their orientation is different
than element 1, report the difference but do not change the mesh object
orientation. Create two new attributes. ipath is the search path the algorithm
followed through the mesh. ifflip reports the orientation of each element as
compared to element 1.

View File

@@ -0,0 +1,40 @@
.. _geometry:
> **_GEOMETRY_**
>
>> **geometry/create **/geom_name
>>
>> Initialize a geometry called geom_name. Change the name of the current
geometry to geom_name. Save all values associated with the previous
geometry.&nbsp_place_holder; To associate this geometry with a mesh object use
the [cmo/geometry](cmo/cmo_geom.html) command.&nbsp_place_holder; See III.E
for a discussion of geometry.
>>
>> **geometry/release **/geom_name
>>
>> Release all data structures related to geometry, geom_name and remove
geom_name from the list of geometries.
>
> EXAMPLES:
>
>> **geometry/create/**new_geom/
**geometry/releas**e/old_geom/
&nbsp_place_holder;
> > &nbsp_place_holder;
&nbsp_place_holder;

View File

@@ -0,0 +1,72 @@
.. _grid2grid:
&nbsp_place_holder;
## GRID2GRID
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; The **grid2grid**
command converts a mesh with one element type to a mesh with another. The
conversion type is determined by the second argument.
FORMAT:
> **grid2grid **/ ioption / [cmo_sink] / [cmo_source]
ioption: is a character string that determines the element type of the source
and sink meshes. There is no 'default' option - this argument must be
specified.
> **quadtotri2**&nbsp_place_holder;&nbsp_place_holder; quad to 2 triangles, no
new points.
**prismtotet3**&nbsp_place_holder;&nbsp_place_holder; prism to 3 tets, no new points.
**quattotri4**&nbsp_place_holder;&nbsp_place_holder; quad to 4 triangles, with one new point.
**pyrtotet4**&nbsp_place_holder;&nbsp_place_holder; pyramid to 4 tets, with one new point.
**hextotet5**&nbsp_place_holder;&nbsp_place_holder; hex to 5 tets, no new points.
**hextotet6**&nbsp_place_holder;&nbsp_place_holder; hex to 6 tets, no new points.
**prismtotet14**&nbsp_place_holder;&nbsp_place_holder; prism to 14 tets, four new points (1 + 3 faces).
**prismtotet18**&nbsp_place_holder;&nbsp_place_holder; prism to 18 tets, six new points (1 + 5 faces).
**hextotet24**&nbsp_place_holder;&nbsp_place_holder; hex to 24 tets, seven new points (1 + 6 faces).
tree_to_fe &nbsp_place_holder; quadtree or octree grid to grid with no parent-
type elements.
[ cmo_snk / cmo_src ] : are the mesh_object names. cmo_src is the original
grid. cmo_snk
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; is the name for the
new tet or triangle grid. These may be the same grid, if so desired. If both
are left blank,
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; the current mesh
object will be used. If only one mesh name is given, it will be used at the
sink mesh, and the
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; current mesh object
will be used as the source.
****EXAMPLES:
> **grid2grid / hextotet****24&nbsp_place_holder; **/&nbsp_place_holder;
cmo_tet / cmo_hex Convert each hex element in cmo_hex to 24 tets and name the
new grid cmo_tet.
**grid2grid / quadtotri4 **/&nbsp_place_holder; new_mesh No source mesh is given, so the current mesh object (which is a quad mesh) will have every quad converted into 4 triangles, and saved as new_mesh.
**grid2grid / tree_to_fe**** **/ new_mesh /&nbsp_place_holder; octree_mesh**** Every element in octree_mesh will be scanned to see if it is a parent element. If it is, it will be removed, so only the leaf elements remain. The result will be stored in new_mesh.

View File

@@ -0,0 +1,28 @@
.. _help :
&nbsp_place_holder;
> **_HELP_**
>
>> **help**/code_variable will return the variable definition and the correct
value of the variable.
> FORMAT:
>
>> **help**/variable_name
>
> EXAMPLES:
>
>> **help**/**ipointi**
&nbsp_place_holder;

View File

@@ -0,0 +1,76 @@
.. _hextotet:
&nbsp_place_holder;
## HEXTOTET
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; IMPORTANT NOTE: This
command, while still recognized, is officially unsupported. Please see
[grid2grid](GRID2GRID.html) instead.
> The **hextotet** command creates a tetrahedral grid from 3D grids. In 2D the
elements are converted to triangles. The first parameter ioption determines
how the conversion is performed.
FORMAT:
> **hextotet**/ [ ioption ] / cmo_snk / cmo_src / [**rmvolume**]
ioption: is a numerical number indicating the number of tets or triangles to
break each element into. If this parameter is missing then default settings
are used. The defaults are underlined and will be detirmined by reading the
mesh_type of the mesh_object. If mesh_type is quad, **2** is used. If
mesh_type is prism, **3** is used. If mesh_type is hex, **6** is used.
Otherwise **24** is the default value for ioption.
The selections include:
> **_2_**&nbsp_place_holder;&nbsp_place_holder; quad to 2 triangles, no new
points.
**_3_**&nbsp_place_holder;&nbsp_place_holder; prism to 3 tets, no new points.
**4**&nbsp_place_holder;&nbsp_place_holder; quad to 4 triangles, with one new point.
**4**&nbsp_place_holder;&nbsp_place_holder; pyramid to 4 tets, with one new point.
**5**&nbsp_place_holder;&nbsp_place_holder; hex to 5 tets, no new points.
**_6_**&nbsp_place_holder;&nbsp_place_holder; hex to 6 tets, no new points.
**14**&nbsp_place_holder;&nbsp_place_holder; prism to 14 tets, four new points (1 + 3 faces).
**18**&nbsp_place_holder;&nbsp_place_holder; prism to 18 tets, six new points (1 + 5 faces).
**_24_**&nbsp_place_holder;&nbsp_place_holder; hex to 24 tets, seven new points (1 + 6 faces).
cmo_snk / cmo_src : are the mesh_object names. cmo_src is the original grid.
cmo_snk is the name for the new tet or triangle grid.
**rmvolume **: keyword is optional and will assign hextotet_remove_volume and hextotet_remove_duplicates to 'yes'. This will enable hextotet to use its own algorithm for removing elements with zero volume and duplicate points. It may be prone to epsilon errors for grids over large areas. By default, zero volumes and duplicate points are not removed from the new mesh object cmo_snk.
EXAMPLES:
> **hextotet** /** 24 **/ cmo_tet / cmo_hex Convert each hex element in
cmo_hex to 24 tets and name the new grid cmo_tet.
**hextotet** / / cmo_tri / cmo_quad No value is given for ioption, so the default settings are used. The mesh_type of cmo_quad is quad, so each element is converted to two triangles. The new mesh_object is named cmo_tri.
**hextotet** /** 3 **/ cmo_tet / cmo_pri / **rmvolume** Each prism element in cmo_pri is converted to three tet elements. Zero volume elements and duplicate points are removed. The new tet mesh object is called cmo_tet.
LINKS:
> [Click here for demos](../demos/hextotet/test/html/main_hextet.html)

View File

@@ -0,0 +1,20 @@
.. _infile :
&nbsp_place_holder;
> **_INPUT OR INFILE_**
>
>> These commands instruct LaGriT to begin processing commands from a file.
The **infile** commands may be nested. Each&nbsp_place_holder; set of commands
should be terminated with a **finish **command.
> **FORMAT:**
>
>> **infile/**file_name
**input/**file_name

View File

@@ -0,0 +1,20 @@
.. _input :
&nbsp_place_holder;
> **_INPUT OR INFILE_**
>
>> These commands instruct LaGriT to begin processing commands from a file.
The **infile** commands may be nested. Each&nbsp_place_holder; set of commands
should be terminated with a **finish **command.
> **FORMAT:**
>
>> **infile/**file_name
**input/**file_name

View File

@@ -0,0 +1,523 @@
.. _interpolate:
## INTERPOLATE
> The **interpolate** (or **intrp**) command is used to interpolate attribute
values from nodes or elements of a source mesh to node or element attributes
of a sink mesh. Normally the source grid is coarser or the same resolution as
the sink grid. **interpolate** replaces method options in the **doping**
command called **integer1, integer2**, and **table**.
>
> The **interpolate** methods depend on the location of sink nodes as they
relate to the source grid nodes or elements. The interpolations are from
either source nodes or elements on to sink points. The **interpolate** values
are written to the indicated sink attribute for each sink point. If the
indicated sink attribute is of element type, then the centroids for each
element are calculated and used for the interpolated sink points.
>
> The intrp_method parameter includes **map**, **voronoi**, and
**continuous**. The **map** method copies the value from the enclosing source
element. **continuous** interpolates on to a sink point using the enclosing
source element nodes. Method **voronoi** copies the value from the nearest
source node.
>
> The remaining **interpolate** parameters are all optional on the command
line. tie_option is used to break a tie when a sink point has more than one
valid candidate source node or element. flag_option is used to assign an error
value, or to assign a value for points not inside the source mesh.
intrp_function allows the interpolation function associated with the sink
attribute to be set. A kdtree node or element search is used to pair the
source mesh to the sink mesh points. Each sink point is paired with either an
element or point found with the search. This one-to-one correspondence can be
saved as a sink cmo attribute. These attributes are reused during multiple
calls to the **interpolate** command instead of repeating a long search. The
keyword that allows the attributes to be kept as part of the sink cmo is
**keepatt**.
>
> The valid element types depend on the **interpolate** method being used. For
instance, a valid **continuous** interpolation can not currently be applied
using a hex element. Use **hextotet** to convert hex elements of the source
grid to tets.
For valid combinations of **interpolate** methods and options, see the Tables
below.
> The format for the command line is as follows:
**interpolate **/ intrp_method / cmosink, attsink / 1,0,0 / cmosrc, attsrc /
[tie_option] [flag_option] [keep_option] [intrp_function]
Parameters appearing after the source cmo attribute name are optional.
intrp_method is the choice of interpolation methods. These methods evolved
from methods available in the **doping** command. The **map** method replaces
**doping/integer1** which copied source itetclr values to sink imt values. The
**voronoi** method replaces **doping/integer2** which copied nearest node
source imt to sink imt. **continuous** evolved from the **doping/table**
command. These commands are still similar to the old versions except that they
have been generalized to include user chosen attributes and more element
types. The choices for intrp_method are as follows:
>
>> **map** - For each sink point, search source cmo for an enclosing element.
Copy the found source element value to the sink attribute. The source
attribute is of type element. To copy from a source attribute of type node,
use **voronoi** method.
**voronoi** - For each sink point, search the source cmo for a nearest node. Copy found source node value to the sink attribute. The source attribute is of type node. To copy from a source attribute of type element, use **map** method. By selecting the nearest source points, Voronoi regions are generated around each sink point. The sink point (node or centroid) is given the value of the attribute associated with the Voronoi generating point whose Voronoi cell the sink point lands in.
**continuous** - For each sink point, search the source cmo for an enclosing element. Use the vertices of enclosing element to interpolate a value on to the sink point. The source attribute is of type node. The interpolation is the sum of vertice values multiplied by the relative volume of elements formed by the sink point location on or inside the found element. The element is divided into volumes as determined by the sink point location and its relationship to the vertices of the enclosing element. A triangle becomes three triangles each with a vertices on the sink point. A quad becomes four quads. A tet becomes four tets. WARNING: A hex becomes 8 hexs which depends on orthogonal hexs and so is not currently supported. Use hextotet to convert hex elements to tets. Each vertice value of the found element is multiplied by these relative volumes. The assigned sink point value is the sum of these values divided by the number of element vertices. The interpolation function belonging to the attribute is applied to the vertice values before being summed. These interpolate types include LINEAR, ASINH, and LOG. Other interpolate functions such as min, max, and copy pass the value unchanged. See the cinterpolate() routine for how these interpolation types are handled. The final value of the sink point has the inverse function operation applied.
**default** - If source attribute is element type then use **_map_**. If source attribute is node type then use **_continuous_**.
>
>
cmosink, attsink are the cmo name and attribute name to write interpolated
values into. The interpolation are applied to the points of the sink cmo. If
the sink attribute is element type, centroids are calculated for each element
and these are used for the interpolation methods. All integer attributes are
converted to double for the interpolation routines. The interpolated values
are then converted to integer if the sink attribute is integer.
>
> indexed_set is the set of sink nodes or elements to write interpolated
values to. 1,0,0 will select all sink nodes or elements.&nbsp_place_holder;
>
> cmosrc, attsrc are the cmo name and attribute name are the cmo and attribute
to interpolate from. Points from the sink grid will be located within source
elements or nearest source nodes depending on the method used.
&nbsp_place_holder;
&nbsp_place_holder;
>
> The following parameters are optional for the command
**interpolate**.&nbsp_place_holder;
>
> tie_option provides a method of choice when multiple candidates are found
for nearest node or enclosing element. Along with kdtree search,
nearestpoint() and retrieve_within_eps() routines return a list of candidate
objects for a sink point. These can be either a list of closest points, or a
list of elements the point is on or inside. tie_option chooses one candidate
from the possible candidates. The result is a one-to-one correspondence with
each sink point paired with a single source node or a single source element.
>
>> **_tiemax_** selects the maximum value from candidate nodes or elements.
This is the default selection.
**tiemin** selects the minimum value from candidate nodes or elements.
>
> flag_option is the value used to initialize the sink attribute. These flag
values indicate either that there was an error and a value could not be
written to the sink attribute. The kdtree element search will assign a flag
value if a sink point is located outside the source grid.
>
>> **_plus1_** will assign a flag value of maximum source value plus 1.
**nearest/**near_attribute will find the nearest source node and use the node's attribute value as the flag value. The keyword **nearest** must be followed with the name of the source node attribute to use for the flag values.
flag_option given as an integer or real value will use the user's numeric
value for the flag assignments.
>
> keep_option is used during multiple calls to **interpolate** with the same
two grids. It keeps attributes created during the search routines and uses
these attributes to look up associated node or element numbers. The
**interpolate** command uses kdtree to create sink attributes that pair sink
points to associated source node or element numbers. If **map** or
**continuous** methods are used, the element attribute named el_gtg will be
created. If **voronoi** or the flag_option **nearest** are used, the node
attribute named pt_gtg will be created.
>
>> **_delatt_** deletes any attributes created during the kdtree searches. By
default these attributes are removed.
**keepatt** keeps any attributes created during the kdtree searches. The attribute names are pt_gtg for nearest node numbers, and el_gtg for enclosing element numbers.
>
> intrp_function replaces the interpolation function associated with the sink
attribute. This interpolation function is applied to the final interpolated
field value. Valid interpolate functions are linear, asinh, log, copy,
sequence, min, incmin, max, incmax, and, or, user. Functions such as min and
max pass the interpolation value unchanged.
&nbsp_place_holder;
&nbsp_place_holder;
>
> The following tables identify what combinations of methods, options, and
element types are supported with the command **interpolate**.
>
> This table indicates the type of attributes that can be used with the
interpolation methods. If a sink attribute is of type element, centroids are
calculated for each sink element and used for the interpolation methods.
&nbsp_place_holder;
>
> **SOURCE&nbsp_place_holder;**
**node**
> **SOURCE&nbsp_place_holder;**
**element**
>
> **SINK**
> &nbsp_place_holder;
> &nbsp_place_holder;
>
> **map node**
> no
> yes
>
> **map element**
> no
> yes
>
> **continuous node**
> yes
> no
>
> **continuous element**
> yes
> no
>
> **voronoi node**
> yes
> no
>
> **voronoi element**
> yes
> no
>
>
> This table shows supported applications for each of the interpolation
methods.
(parenthesis) means the option should work, but is not untested
NOT means Not Supported
>
> **MAP**
copy element value to enclosed point
> **CONTINUOUS**
interpolate element nodes to enclosed point
> **VORONOI**
copy nearest node value
>
> **source**
**elements**
> tri, quad, hex, tet, (pyr), (pri), (line)
> tri, quad, NOT hex, tet, (pyr), (pri), (line)
> tri, quad, hex, tet, (pyr), (pri), (line), (pnt)
>
> **sink**
**elements**
> tri, quad, hex, tet, (pyr), (pri), (line), (pnt)
> tri, quad, hex, tet, (pyr), (pri), (line), (pnt)
> tri, quad, hex, tet, (pyr), (pri), (line), (pnt)
>
> **source**
**attribute**
> element
> node
> node
>
> **sink**
**attribute**
> node or element (centroid)
> node or element (centroid)
> node or element (centroid)
>
> **source**
**attribute type**
> integer or double
> integer or double
> integer or double
>
> **sink**
**attribute type**
> integer or double
> NOT integer, double
> integer or double
>
> **interpolation**
**function**
> linear, log, sinh
all others pass value unaltered
> linear, log, sinh
all others pass value unaltered
> linear, log, sinh
all others pass value unaltered
>
> **tiebreaker**
> tiemin or tiemax
> tiemin or tiemax
> tiemin or tiemax
>
> **error flag**
> plus1, nearest, or user value
> plus1, nearest, or user value
> plus1 or user value
>
> **added**
**attributes**
>
keepatt creates attribute el_gtg
>
keepatt creates attribute el_gtg
>
keepatt creates attribute pt_gtg
>
>
>
> FORMAT:
>
>> **interpolate **/ intrp_method / cmosink, attsink / 1,0,0 / cmosrc, attsrc
/ &
[tie_option] [flag_option] [keep_option] [intrp_function]
>>
>> **interpolate | intrp**&nbsp_place_holder;&nbsp_place_holder;
/&nbsp_place_holder; **map | voronoi | continuous | default
**&nbsp_place_holder;/&nbsp_place_holder; &
cmosink, attsink &nbsp_place_holder;/ &nbsp_place_holder; 1,0,0
&nbsp_place_holder; /&nbsp_place_holder; cmosrc, attsrc
&nbsp_place_holder;/&nbsp_place_holder; [ **tiemin | _tiemax_** ]
&nbsp_place_holder;&nbsp_place_holder;&
[ flag_value&nbsp_place_holder; |&nbsp_place_holder;
**_plus1_&nbsp_place_holder; | nearest,** near_attribute ]
&nbsp_place_holder;[ **keepatt | _delatt_** ] &nbsp_place_holder;[
intrp_function ]
>
> EXAMPLES:
>
>> **interpolate / map /** cmo_sink imt /1,0,0/ cmo_src itetclr
For each node in cmo_sink find an enclosing element from mesh cmo_src. Assign
the element's itetclr value to the corresponding imt attribute of cmo_sink.
>
>> **interpolate/ map /** cmo_sink Pval /1,0,0/ cmo_src Vval / tiemin, log
This command will assign source Vval values to sink Pval for elements
enclosing cmo_sink points. If the sink point is found within more than one
element, the min value of the candidate elements will be chosen. Since the
interpolation function "log" is named, it will be applied to the source Vval
value before being written to sink attribute Pval.
>
>> **interpolate/ voronoi **/ cmo_sink imt /1,0,0/ cmo_src imt
For each node in cmo_sink, find the closest node in cmo_src. Assign the imt
value from the closest cmo_src node to the imt attribute of cmo_sink.
>
>> **interpolate/ continuous** / cmo_sink xval /1,0,0/ cmo_src Pv
For each node in cmo_sink, find a cmo_src element the node is inside.
Interpolate the element node values in Pv on to the sink point and write to
the sink attribute xval.
>
>> **interpolate/ map** /cmo_sink imt /1,0,0/ cmo_src itetclr / **nearest,**
imt / **keepatt**
**interpolate/ map **/cmo_sink imtreal /1,0,0/ cmo_src itetreal / **nearest,** imtreal
The first call to interpolate will assign itetclr values from source elements
to imt in the sink cmo for points inside the source elements. Any sink point
not inside the source grid will be assigned the imt value of the nearest
source point. Since keepatt is set, both attributes pt_gtg and el_gtg will be
kept as sink cmo attributes and hold the node and element numbers for each
sink point.
The second call to interpolate will find the sink attributes pt_gtg and
el_gtg. The nearest point and enclosing element kdtree searches will be
skipped. This time the element value in attribute itetreal will be assigned to
the sink node attribute imtreal. For points outside the grid, values from
nearest node attribute imtreal will be used. Note that the **delatt** keyword
does not have to exist, the interpolate attributes are always deleted unless
the keyword **keepatt** is used.
>
>
>
> [![VORONOI from quad
grid](../../images/vor_rand.gif)](../../images/vor_rand.gif)
[Example 1: interpolate / voronoi](../description_voronoi.html)
Copy nearest source node value to sink point
> [![MAP from element to
element.](../../images/map03_view.gif)](../../images/map03_view.gif)
[Example 2: interpolate / map](../description_map.html)
Copy source element value to enclosed sink point
> [![CONTINUOUS from
triangles](../../images/con02_sink.gif)](../../images/con02_sink.gif)
[Example 3: interpolate / continuous](../description_cont.html)
Interpolate source element vertices to sink point
>
&nbsp_place_holder;

View File

@@ -0,0 +1,33 @@
.. _intersect:
&nbsp_place_holder;
&nbsp_place_holder;
> **_INTERSECT_**
>
>> Creates a new Mesh Object from the intersection of two existing Mesh
Objects. The existing Mesh Objects have to be topologically 2D and
geometrically 3D. The created Mesh Object will be topologically 1D and
geometrically 3D. Node quantities for the new Mesh Object will be created by
interpolation on the corresponding node quantities of the first input Mesh
Object, cmo_1_in.
>
>> This command will also apply the **line_graph** option of the **sort**
command on the new Mesh Object. This will sort the elements (which will be
line segments) into a reasonable order based on their connectivity, and will
also create element attributes ctype, cid, and loop_id. **intersect** will
create a temporary sort key and use that to reorder the elements, so there is
no need to use your own sort key. For more details on the sorting and on the
created element attributes, please see [sort](SORT.html).
> **FORMAT**:
>
>> **intersect**/cmo_out/cmo_1_in/cmo_2_in

View File

@@ -0,0 +1,217 @@
.. _intersect_elements:
**_INTERSECT_ELEMENTS_**
> This command takes two meshes and creates an element-based attribute in
mesh1 that contains the number of elements in mesh2 that intersected the
respective element in mesh1.
>
> We define intersection as two elements sharing any common point.
FORMAT:
> **intersect_elements** / mesh1 / mesh2 / [attrib_name]
NOTES:
> [attrib_name] specifies the name of the element based attribute in mesh1
that is created by this command. The default name for this attribute is
in_<mesh2>. For example, if the comand syntax was:
>
>> **intersect_elements**/cmo_strat/cmo_well/
>
> the element based attribute that stores the number of intersections would be
named in_cmo_well. It is worth noting that GMV does not take kindly to names
that are longer than eight characters and will truncate them without even
thinking twice, resulting in the name used in our example being changed to
in_cmo_w. Therefore, it is good practice to use your own attribute names less
than eight characters if possible.
>
> This code has been slightly modified to work with AMR grids produced in X3D.
This modification depends on an element based attribute that X3D creates
called **itetkid**. If this attribute is not present, **intersect_elements**
will **NOT** be able to recognize the AMR grid, and will intersect all
elements of the octree. With the itetkid attribute present, only leaves of the
octree which intersect will be flagged.
>
> **intersect_elements** is not designed to work with every element-element
combination, but it is pretty thorough. The following table shows what
element/element intersetion capabilities are available. An **X** in the box
means that the intersection is supported.
>
> &nbsp_place_holder;
> point
> line
> tri
> quad
> tet
> pyr
> hex
>
> point
> **X**
> **X**
> **X**
> **X**
> **X**
> **X**
> **X**
>
> line
> **X**
> **X**
> **X**
> **X**
> **X**
> &nbsp_place_holder;
> **X**
>
> tri
> **X**
> **X**
> **X**
> **X**
> **X**
> &nbsp_place_holder;
> **X**
>
> quad
> **X**
> **X**
> **X**
> **X**
> **X**
> &nbsp_place_holder;
> **X**
>
> tet
> **X**
> **X**
> **X**
> **X**
> **X**
> &nbsp_place_holder;
> **X**
>
> pyr
> **X**
> &nbsp_place_holder;
> &nbsp_place_holder;
> &nbsp_place_holder;
> &nbsp_place_holder;
> &nbsp_place_holder;
> &nbsp_place_holder;
>
> hex
> **X**
> **X**
> **X**
> **X**
> **X**
> &nbsp_place_holder;
> **X**
>
> For example, this means that if you have a mesh that has hexes and tets in
it, you could intersect it with a mesh that has anything but pyramids in it.
>
> Finally, **intersect_elements** is based on a k-D-R tree implementation to
improve performance in many circumstances. Unfortunately, there is no way to
improve performance if the elements being intersected have many candidate
elements in their bounding boxes. As such, there are situations where running
time may be improved by refining mesh2 such that its elements are of
comparable size with those of mesh1.
EXAMPLES:
> **intersect_elements**/cmo_grid/cmo_sphere/
>
> **intersect_elements**/cmo_grid/cmo_well/obswell

View File

@@ -0,0 +1,159 @@
.. _kdtree:
****&nbsp_place_holder;
> **_KDTREE&nbsp_place_holder;_**
>
>> **KDTRE**E uses the elements of the current mesh object to produce a k-D
tree that is stored in the attributes LINKT and SBOX that are appended to the
mesh object.&nbsp_place_holder; Leaf nodes in LINKT each contain exactly one
element index.&nbsp_place_holder;&nbsp_place_holder; Because of the
possibility of triangle overlap, **KDTREE** also produces an array SBOX which
gives 'safety boxes'.&nbsp_place_holder; For each node in the k-D tree, there
is a corresponding safety box which is just big enough to contain all the
triangles&nbsp_place_holder; "under" the node.&nbsp_place_holder; The
attributes LINKT and SBOX are used by the subroutine:&nbsp_place_holder;
RETRIEVE_WITHIN_EPS.&nbsp_place_holder; RETRIEVE_WITHIN_EPS finds all elements
with epsilon of the query point (xq,yq,zq). What is actually returned is a
small subset of leaves&nbsp_place_holder; (i.e., elements) that feasibly could
be within epsilon of the query point.&nbsp_place_holder; The user must then do
exact geometric tests on this small subset to actually determine which
elements are a distance epsilon from the query point.
&nbsp_place_holder;
>>
>> subroutine retrieve_within_eps(xq,yq,zq,linkt,sbox,
eps,nefound,iefound,ierr)
> > xq, yq, zq&nbsp_place_holder;
>> coordinates of query point
>>
>> linkt, sbox
>> mesh object KDTREE attributes created by the KDTREE command
>>
>> eps&nbsp_place_holder;
>> search epsilon
>>
>> nefound&nbsp_place_holder;
>> number of elements found
>>
>> iefound
>> array of elements found
>>
>> ierr
>> error flag&nbsp_place_holder;&nbsp_place_holder; (0 = no error)
>> &nbsp_place_holder;
The attributes LINKT and SBOX may also be used by the subroutine:
NEARESTPOINT.&nbsp_place_holder; NEARESTPOINT uses the k-D tree structure for
a triangular surface mesh object&nbsp_place_holder; (generated by KDTREE) to
accelerate finding the nearest point on the surface to the given query point
(xq,yq,zq).&nbsp_place_holder; What is actually returned is a small subset of
leaves (i.e., triangles) that feasibly could contain the nearest
point.&nbsp_place_holder; The user must then do exact geometric tests on this
small subset to determine points of intersection.
&nbsp_place_holder;
&nbsp_place_holder;subroutine nearestpoint(xq,yq,zq,xic,yic,zic,itet,xs,ys,zs,
linkt,sbox,eps,distpossleaf,mtfound,itfound,ierr)
&nbsp_place_holder;
>>
>> xq, yq, zq&nbsp_place_holder;
>> coordinates of query point
>>
>> xic,yic,zic
>> arrays of coordinates of nodes in the surface mesh object
>>
>> itet
>> array containing trianged-node relationship for surface mesh object.
>>
>> xs,ys,zs
>> coordinates of previous retrieved "nearestpoint".&nbsp_place_holder; If
there is no previous query, set these to a very large value
>>
>> linkt, sbox
>> mesh object.&nbsp_place_holder; KDTREE attributes created by the KDTREE
command
>>
>> distpossleaf
>> work array of length = number of triangles in the surface mesh.
>>
>> mtfound
>> number of triangles found
>>
>> itfound
>> array of triangle (element number) found
>>
>> ierr
>> error flag
>> &nbsp_place_holder;
&nbsp_place_holder;
>
> &nbsp_place_holder;
&nbsp_place_holder;
>
>> &nbsp_place_holder;
&nbsp_place_holder;
&nbsp_place_holder;
&nbsp_place_holder;

View File

@@ -0,0 +1,26 @@
.. _log :
&nbsp_place_holder;
> **_LOG_**
>
>> Turn the batch output file and tty output file **off** and **on**. The tty
prints to and reads from the user's screen. The batch file is the output file
called outx3dgen. Default is **on** for both files.
> FORMAT:
>
>> **log**/**bat**|**tty**/**on**|**off**/
>
> EXAMPLE:
>
>> **log**/**tty**/**off**

View File

@@ -0,0 +1,82 @@
.. _loop:
&nbsp_place_holder;
## loop
&nbsp_place_holder;
> The **loop** command repeatedly executes any LaGriT command with either a do
loop type or foreach type variable argument control.
**loop** supports loops up to 10 deep with a maximum of 250 tokens in the /foreach/ list.
&nbsp_place_holder;
FORMAT:
> **loop**/ **do** / variable / loop_start / loop_stop / loop_stride /
**loop_end** / LaGriT_command
> **loop**/ **foreach** / variable / list_var1 list_var2 ... list_varN /
**loop_end** / LaGriT_command
> **do** or **foreach** : are keywords that determine the type of loop
operation.
>
> variable : is a character string that can be used in the LaGriT_command. The
variable values are controled by the loop range or given in a variable list.
>
> loop range: loop_start / loop_stop / loop_stride : Integers that specify the
initial, limit, and increment of variable.
>
> variable_list: list_var1 list_var2 ... list_varN : Integers, reals or
characters that are substituted into variable prior to each execution of the
LaGriT_command.
>
> **loop_end**: Required keyword string to terminate a foreach list. It is
also REQUIRED after loop_stride.
>
> LaGriT_command: Any valid LaGriT command including another **loop** command.
&nbsp_place_holder;
&nbsp_place_holder;
EXAMPLES:
> **loop / foreach** / MO / cmo1 cmo2 cmo3 / **loop_end **/ **cmo** /
**delete** / MO &nbsp_place_holder;
Delete a list of mesh objects. **loop** / **foreach** / FILE / file1 file2
file3 / **loop_end** & **loop** / **foreach** / MO / cmo1 cmo2 cmo3 /
**loop_end** & **infile** LaGriT.input_control_file &nbsp_place_holder;
Execute a set of commands in a LaGriT control file that utilize the variables
FILE and MO.
>
>
**loop** / **do** / NX 2 3 1 / **loop_end** & **loop** / **do** / NY 4 5 1 / **loop_end** & **loop** / **do** / NZ 6 7 1 / **loop_end** & **loop** / **foreach** / X0 0 5.5 10.2345678 / **loop_end **& **createpts**/**xyz**/NX,NY,NZ/X0 0. 0. / 100. 100. 100. &nbsp_place_holder;
Execute a set of commands in a LaGriT control file that utilize the variables
NX,NY,NZ,X0. **loop** / **foreach** / MO cmo1 cmo2 cmo3 / **loop_end** &
**loop** / **foreach** / ATTRIBUTE / icr isn itp / **loop_end **&
**cmo**/**modatt**/MO/ATTRIBUTE/**ioflag**/l &nbsp_place_holder;
Modify IO flags of three attributes in three different mesh objects.
[](../demos/trans/test/html/main_trans.html)

View File

@@ -0,0 +1,318 @@
.. _lower_d:
&nbsp_place_holder;
> **_LOWER_D_**
>
>> This suite of commands creates and handles the lower dimension structures
associated with a mesh.&nbsp_place_holder; The existing mesh is labeled
'd0'.&nbsp_place_holder; The next lower dimension mesh 'd1' and so
on.&nbsp_place_holder; For an original 3D mesh, the d1 structures are the
surfaces (2D) separating material regions, the d2 structures are the lines
separating the d1 surfaces and the d3 structures are the nodes at the ends of
the d2 lines.
Several new attributes are created which belong the original mesh object:
&nbsp_place_holder;
>>
>> name
>> type
>> length
>>
>> d0_nnodes_topo
>>
>> &nbsp_place_holder;
>> VINT, nnodes
>>
>> &nbsp_place_holder;
>> 0 = interior
1 = surface node
2 = line node
3 = line end node
>>
>> d1_nnodes
>> INT, scalar
>> number of nodes in this structure
>>
>> d1_elements
>> INT, scalar
>> number of elements in this structure
>>
>> d1_nef_cmo
>> INT, scalar
>> number of facets/element in this structure
>>
>> d1_nee_cmo
>> INT, scalar
>> number of edges/element in this structure
>>
>> d1_nen_cmo
>> INT, scalar
>> number of nodes/element in this structure
>>
>> d1_jtet_cycle_max
>> INT, scalar
>> the longest jtet cycle in this structure
>>
>> d1_itettyp
>> VINT d1_elements
>> element type
>>
>> d1_itetclr
>> VINT d1_elements
>> element selection number
>>
>> d1_itet off
>> VINT d1_elements
>> offset to d1_itet
>>
>> d1_jtet off
>> VINT d1_elements
>> offset to d1_jtet
>>
>> d1_itet
>> VINT d1_elements xd1_neu_cmo
>> list of nodes for each element
>>
>> d1_jtet
>> VINT d1_elements xd1_nef_cmo
>> list of face neighbors
>>
>> d1_elm_d0
>> VINT d1_elements&nbsp_place_holder;
>> elements face # in original mesh that this element came from
>>
>> d2_nnodes
>> INT, scalar
>> number of nodes in this structure
>>
>> d2_elements
>> INT, scalar
>> number of elements in this structure
>>
>> d2_nef_cmo
>> INT, scalar
>> number of facets/element in this structure
>>
>> d2_nee_cmo
>> INT, scalar
>> number of edges/element in this structure
>>
>> d3_nen_cmo
>> INT, scalar
>> number of nodes/element in this structure
>>
>> d2_jtet_cycle_max
>> INT, scalar
>> the longest jtet cycle in this structure
>>
>> d2_itettyp
>> VINT d2_elements
>> element type
>>
>> d2_itetclr
>> VINT d2_elements
>> element material number
>>
>> d2_itet off
>> VINT d2_elements
>> offset to d2_itet
>>
>> d2_jtet off
>> VINT d2_elements
>> offset to d2_jtet
>>
>> d2_itet
>> VINT d2_elements xd2_neu_cmo
>> list of nodes for each element
>>
>> d2_jtet
>> VINT d2_elements xd2_nef_cmo
>> list of face neighbors&nbsp_place_holder;
>>
>> d2_elm_d1
>> VINT d2_elements
>> element & face that this element came from in next higher level structure
>>
>> d3_nnodes
>> INT, scalar
>> number of nodes in this structure
>>
>> lower_d_flag
>> INT, scalar
>> 0= no lower d structure exist
=1 lower_d structures exist and are valid
=2 lower_d structures not valid
>>
>> The above set of attributes are created if the original mesh is
3D.&nbsp_place_holder; If the original mesh is 2D then the d1 structures are
created, but the d2 structures are simply the d2_nnodes.&nbsp_place_holder; If
the original mesh is 1D, then only the d1_nnodes structure is created.
>>
>> At the time the lower_d structures are created color table attributes:
d0_clrtab, d0_nclrs, .. are also created.
>
> FORMAT:
>
>> **lower_d **/ **create**/ [cmo_name]
&nbsp_place_holder; create lower_d structures in mesh object
**lower_d** /** release**/ [cmo_name]
&nbsp_place_holder;release lower_d structures
**lower_d** / **extract**/ [cmo_name/cmo1/cmo2/cmo2]
&nbsp_place_holder;create lower_d structures into named mesh objects cmo1,
cmo2, cmo3.
**lower_d** /** filter**/ [cmo_name] /[iclr1 | itp | **imt **| **clr **] / value [ **and** | **or** | **new** ]
&nbsp_place_holder; these commands are advised for expert users only.
>
> EXAMPLES:
>
>> &nbsp_place_holder;

View File

@@ -0,0 +1,252 @@
.. _massage:
&nbsp_place_holder;
> **_MASSAGE_**
>
> **MASSAGE** creates, annihilates, and moves nodes and swaps connections in a
2D or 3D mesh in order to improve element aspect ratios and establish user-
desired edge lengths.
>
> Specifically, **MASSAGE** performs up to four iterations of a loop which
calls AGD3D (a routine for automated merging of nodes), RECON (a routine for
automated reconnection of edges), and SGD (a routine for element aspect ratio
improvement using smoothing). **MASSAGE** then calls CEL_CHAIN which performs
Rivara edge refinement and then another call to RECON.&nbsp_place_holder; In
the case of 2-D surface grids, this is then followed by a call to CER_CHAIN
which is another edge refinement routine and then a final call to RECON if
necessary.
>
> AGD3D will attempt to merge edges that are shorter than
merge_length.&nbsp_place_holder; CEL_CHAIN will attempt to bisect edges that
are longer than bisection_length.&nbsp_place_holder; For 2-D surface grids,
CER_CHAIN will attempt to bisect edges that deviate from an averaged surface
normal ("have a roughness of") greater than tolroughness. RECON will attempt
to create 'nice' elements by using face swapping.&nbsp_place_holder; (The
LaGriT command MODE/RECON can alter the meaning of 'nice'.&nbsp_place_holder;
The default is to reconnect to restore the delaunay
criterion.&nbsp_place_holder; Calling MODE/RECON/GEOM prior to the MASSAGE
call will create 'plumper' elements).&nbsp_place_holder; SGD will attempt to
improve element aspect ratios by moving nodes.
>
> The actions of MASSAGE are controlled by values of these four parameters:
>
> * bisection_length&nbsp_place_holder; - edge length that will trigger
bisection.
> * merge_length - edge length that will trigger merging.
> * toldamage - maximum grid deformation of interfaces and external
boundaries allowed in a single merge, smooth or reconnection event.
> * tolroughness - (for 2D surface grids only)&nbsp_place_holder; measure of
grid roughness (deviation from average surface normal) that triggers
refinement.
>
> **bisection_length** can either be a scalar value or a node field (a node
attribute). In the first case, the algorithm directly compares the edge length
to the **bisection_length** value. If the edge length is greater than the
**bisection_length**, the edge will be refined. In the second case, the
algorithm compares the edge length to the minimum value of the field at the
two nodes incident to this edge. If the edge lenght is greater than this
minimum value, the edge will be refined. Thus, one should put a minimum floor
value (probably equal to twice the desired minimum edge lenth) for the field.
Otherwise the code will refine indefinitely. For an example of an appropriate
field, see **MASSAGE2** at the end.
>
> toldamage is a parameter which controls how much the grid will be
deformed.&nbsp_place_holder; The 'damage' is a measure of how much interfaces
and external boundaries are deformed.&nbsp_place_holder; Roughly, it measures
the depths of 'dents' that are invariably introduced when nodes are moved,
annihilated, and faces are swapped. We guarantee that the damage of any single
node movement, node annihilation, or face swap is bounded by toldamage. So if
toldamage is set to an extremely small number, one can expect hardly any node
movements, annihilations, or face swaps will be allowed.&nbsp_place_holder;
Conversely, if toldamage is set too large, physical interfaces may be
significantly deformed by the action of **MASSAGE**.&nbsp_place_holder;
Experience has shown that setting toldamage equal to approximately .01 times
the diameter of the mesh frequently gives acceptable results.
&nbsp_place_holder;
>
> The guidelines for selecting bisection_length, merge_length, toldamage , and
tolroughness are as follows.&nbsp_place_holder; bisection_length should not be
smaller than merge_length, or the action of merging nodes together will be
largely pointless because the newer, longer edges created by merging will
simply be bisected again.&nbsp_place_holder; In fact, merging all edges of
length > merge_length together can easily create edges of length roughly
3*merge_length in the mesh.&nbsp_place_holder; Hence it is recommended that
bisection_length be at least three times as large as merge length.
>
> Merges of edges of length <= merge_length are meant to coarsen the mesh, but
are not meant to deform surfaces and material interfaces on this
scale.&nbsp_place_holder; The amount of material/surface deformation
(toldamage) is meant to be considerably less than merge_length.
>
> On the other hand, the maximum roughness tolerated in the graph
(tolroughness) should be considerably more than toldamage, or roughness
refinement will be triggered by actions such as flipping or merging.
>
> Hence, our guidelines for selecting the parameters are:
>
> bisection_length >= 3*merge_length>> toldamage
tolroughness >= 10*toldamage&nbsp_place_holder; (for 2-D surface grids).
>
> For example, for a grid with diameter of order three, we have used:
>
> bisection_length, merge_length, toldamage, tolroughness =.3, .1, .01, .1
>
> If one of {bisection_length, merge_length} is omitted, the omitted one will
be set so that bisection_length=3*merge_length.
If they are both omitted, they will both be taken to be infinity.
If toldamage is not specified, no node annihilation will take place.
If tolroughness is not specified, no refinement on roughness will occur and
thus the format is compatible with old decks where refinement on roughness did
not occur.
>
> The final, optional keywork argument(s) can be one or more of nosmooth,
norecon, lite, ignoremats, strictmergelength, checkaxy, semiexclusive, and
exclusive.&nbsp_place_holder;
* Specifying nosmooth will turn off the 'smooth' step by skipping the call to SGD.
* Specifying norecon will turn off all 'recon' steps.
* If lite is specified, only one iteration of the merging/reconnection/smoothing loop is executed, and a reconnection after edge refinement is omitted.&nbsp_place_holder; This is suitable for applications, such as Gradient Weighted Moving Finite Elements, where **MASSAGE** is called repeatedly.
* The optional argument ignoremats causes **MASSAGE** to process the multimaterial mesh in a single material mode; it ignores the material interfaces.&nbsp_place_holder;
* The optional argument strictmergelength forces strict interpretation of merge_length so that there is no merging along the edges of flat elements.&nbsp_place_holder; This is important if ignoremats is specified to avoid losing the interfaces.
* &nbsp_place_holder;If checkaxy is given, then we insure that for 2D meshes, the output mesh will have positive xy-projected triangle areas, provided that the input mesh had them in the first place.&nbsp_place_holder;
* If exclusive is given, then edge refinement operations will only be performed on edges whose endpoints are _both_ in the PSET that **MASSAGE** is working on.&nbsp_place_holder; (As usual, new nodes created by refinement are added to the PSET so that **MASSAGE** can refine edges recursively.)&nbsp_place_holder; The default behavior is 'inclusive', where only ONE edge endpoint has to belong to the PSET for the edge to be eligible for refinement.
* If semiexclusive is given, refinement will only be triggered by edges with both endpoints in the PSET, but some edges with less than two endpoints in the PSET might be refined as part of a 'Rivara chain' triggered by the refinement of an edge with both endpoints in the PSET.&nbsp_place_holder; This represents an intermediate case between 'inclusive' and exclusive
> Note:&nbsp_place_holder; Since CEL_CHAIN is called only once at the end of
**MASSAGE**, it may be necessary to call **MASSAGE** twice for optimal
results.&nbsp_place_holder; This is because annihilation of nodes is done with
an intent to improve element aspect ratios, but cannot be effective if there
are too few nodes initially.
>
> Note: The user may wish to issue a "**RMPOINT/COMPRESS**" after **MASSAGE
**operations that merge a significant number of nodes.
>
> FORMAT:
>
> **massage**/bisection_length/merge_length/toldamage/[tolroughness]/[ifirst,i
last,istride]/
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; [**nosmooth**]/[**no
recon**][**strictmergelength**]/[**ignoremats**]/[**lite]**/[**checkaxy**]/[**
semiexclusive**]/**[exclusive**]
>
>
EXAMPLES:
>
> **massage**/0.3/0.1/0.01/
&nbsp_place_holder;Mesh edges longer than 0.3 will be bisected; mesh edges
shorter than 0.1 might be collapsed if that causes damage (normal surface
motion) to material interfaces or external boundaries less than 0.01 ;
smoothing of nodes causing damage less than 0.01 is allowed ; face swapping
causing damage less than 0.01 is allowed.
>
> **massage**/H_SCALE/0.1/0.01/
&nbsp_place_holder;Same as above, except that the **bisection_length** is a
node field called H_SCALE in this case.
>
> **massage/**0.3/0.1/0.01/0.1/
Same as above but for 2-D surface meshes, roughness greater than 0.1 will
trigger refinement.
>
> **massage**/0.3/0.1/0.01/**pset,get,**pset1
Mesh edges (containing at least one endpoint in pset1) longer than 0.3 will be
bisected; mesh edges shorter than 0.1 might be collapsed if that causes damage
(normal surface motion) to material interfaces or external boundaries less
than 0.01 and if the annihilated node is in pset1;&nbsp_place_holder;
smoothing of nodes in pset1 causing damage less than 0.01 is allowed; face
swapping causing damage less than 0.01 is allowed (unfortunately, LaGriT at
this time does not restrict swapping to pset1).
>
> **massage**/0.3/0.1/0.01/**pset,get,**pset1**/nosmooth**
&nbsp_place_holder;As above, but without smoothing.
>
> **massage**/1.e+20/0.1/0.1/1,0,0/**nosmooth**
Because of the virtually infinite value of bisection_length,no edges will be
bisected.&nbsp_place_holder; Since merge_length=toldamage=0.1, merging of
edges&nbsp_place_holder; of length less than 0.1 will be considered, and will
not be rejected because of excessive damage.&nbsp_place_holder; Hence we
expect that all edges of length less than 0.1 will be merged away (except in
those cases where merging would invert tetrahedra or change material
topology).&nbsp_place_holder;&nbsp_place_holder; Because **nosmooth** is
specified, no smoothing will take place.&nbsp_place_holder; Face swapping
causing damage less than toldamage is allowed
>
> **massage**/1.e+20/1.e-9/1.e-9/1,0,0/**nosmooth**/**strictmergelength**/**ig
noremats**
This set of arguments will remove degenerate elements from a mesh by merging
nodes that have the same coordinate values ( within 1.e-9).
&nbsp_place_holder;

View File

@@ -0,0 +1,98 @@
.. _massage2:
&nbsp_place_holder;
> **_MASSAGE2_**
>
> **MASSAGE2** iteratively calls MASSAGE to refine adaptively according to a
gradient field. Thus, the **bisection_length** option must be a field.
>
> FORMAT:
>
> **massage2** / file_name / min_scale / bisection_length / merge_length /
toldamage / [tolroughness] / [ifirst,ilast,istride]/
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; [**nosmooth**]/[**no
recon**][**strictmergelength**]/[**ignoremats**]/[**lite]**/[**checkaxy**]/[**
semiexclusive**]/**[exclusive**]
>
>
**file_name** is a file which contains a set of LaGriT commands that calculates the gradient field based on the distance field. In other words, the gradient field is a function of the distance field. It is necessary to have this file when using this routine, as the field must be updated after each refinement iteration.
**_Creating user function file for MASSAGE2 routine_**
>
> This file contains a set of LaGriT commands which calculate the gradient
field for refinement based on the distance field.
>
> A file could be written like this:
>
> #user_function.mlgi
#An example of calculating the gradient field **F** as a linear function of
the distance field **D**
#Define some coefficients for the function
define / COEF_A /
define / COEF_B /
#Formula **F** = COEF_A * **D** + COEF_B
#First remove any distance field that exists and recompute the distance field
cmo / DELATT / mo_sink / dfield
compute / distance_field / mo_sink / mo_src / dfield
#Calculate **F**
math / multiply / mo_sink / ref_field / 1,0,0 / mo_sink / dfield / COEF_A
math / add / mo_sink / ref_field / 1,0,0 / mo_sink / ref_field / COEF_B
finish The user does not have to put a floor value for the gradient field in
this case (unlike in MASSAGE), as MASSAGE2 will calculate the floor value
automatically. However, the minimum length scale 'min_scale' must be
specified.
The user must also create a node-based attribute for the gradient field before
calling MASSAGE2. In the example above, attribute 'ref_field' must already
exist in the mesh object. The name of the field must also match the
'field_name' argument in the MASSAGE2 command.
**min_scale** is the minimum length scale of the mesh (the minimum desired edge length).
See [**MASSAGE**](MASSAGE.html) for other arguments.
>
> EXAMPLE:
>
> **massage2** / user_function.mlgi / 0.1 / ref_field / 1.e-5 / 1.e-5 /
strictmergelength

View File

@@ -0,0 +1,155 @@
.. _math:
## MATH
> The **math** routine operates on attributes of a mesh object(s). It performs
arithmetic operations or evaluates mathematical functions on the source mesh
object or objects, and places the results in the sink mesh object. The source
and sink mesh objects can be the same, and there can be either one or two
source objects, depending on the operation selected.
>
> All attributes must have the same type, rank, and length.
The last parameter, value, may or may not be used according to the operation
details listed below.
For the standard arithmetic operations, value can be either a constant or an
attribute. These arithmetic operations work for all types of attributes.
For the mathematical functions other than **floor** and
**ceiling**,&nbsp_place_holder; value is omitted, and the function is
performed on the src_attr and stored in the sink_attr. Mathematical functions
other than **floor** and **ceiling **are not implemented for attributes whose
values are integers.
FORMAT:
> **math** / operation / cmo_sink/attr_sink / range /cmo_src/attr_src / [
value ]
operation: The first parameter is one of the following keywords that indicates
the type of work to perform.
> **plus, add, minus, sub, subtract, times,&nbsp_place_holder; multiply, mult,
divide, min, max, modulo ** are arithmetic operators; the result is stored in
sink_attr:
sink_attr = (src_attr) operator (value), where value can be either a numerical
constant or a second mesh object attribute.
min, max are not to be confused with the minimum or maximum value of an
attribute; rather the the result is a comparison of pairs of source values.
>
> **sin, cos, tan, ln** (natural log), and **log10** are mathematical
functions. The value parameter is omitted, and the function is performed on
the src_attr and stored in the sink_attr. These functions are not implemented
for integer attributes.
>
> **floor** and **ceiling** are mathematical functions where value is used as
the lower or upper limit, the value(s) of src_attr are checked against value,
and the results are stored in the sink_attr. These functions work for all
types of attributes.
>
> **power** function uses both value parameters. The first value or src_attr
is raised to the power of the second value or attribute. You cannot use two
constants. At least one of the sources must be an attribute. The result is
stored in the sink_attr.
>
> **exp** and **exp10** functions raise the constant e or the constant 10 to
the power specified by src_attr and stores the result in the sink_attr.
>
> <>**integrate** function computes the product of 'field_value 'times
'element volume' at each element and either saves these products or sums the
products and saves the integrated result.
The syntax is: math/integrate/cmo_sink/attr_sink/range/attr_src_field<>
<>The 'field_value' for an element is either the value of attr_src (if the
attr_src is an element attribute and has length 'nelements') or is the average
of the values at the vertices of the element (if the attr_src is a node
attribute has length 'nnodes').
If sink_attr does not exist or if it exists and has length 'nelements' and
type 'VDOUBLE' the products (<> <>'field_value' times 'element_volume') are
stored in sink_attr.
If sink_attr exists and has length 'scalar' and type 'REAL', then the products
are summed up and the resulting sum if stored in sink_attr. (If the user
requires just the integrated sum this alternative avoids having to use the
pair of commands 'integrate, sum' and also avoids creating the 'nelement' long
sink attribute)
It is assumed that the sink and source attributes are in the same mesh object
and the second cmo name is ignored.
If range is used, it must refer to a set of elements.
>
> **sum** adds all node or element values in attr_src, within the selected
range and writes the result to attr_sink. The sink attribute must be of type
'REAL' or 'INT' (length='scalar') and will be created if it does not exist.
cmo_sink, attr_sink: are the sink cmo and sink attribute for the math results
to be written to. These parameters are required for all math operations.
range: is the selection set of elements or nodes for the math operation and
may be in one of these 3 forms:
> /ifirst,ilast,istride / numbers indicating attribute set&nbsp_place_holder;
(1,0,0 means all elements or nodes)
/**pset,get**, pset_name / for attributes with length =
'nnodes'&nbsp_place_holder; (all nodes in the named point set)
/**eltset,get**, eltset_name / for attributes with length = 'nelements' (all
elements in the named element set)
value: is required by some math operations and can be of type constant or can
be a cmo attribute. The following are possible forms:
> /cmo_src2/attr_src2/ where cmo_src2 may be the same name as the source cmo,
or the name of a second source cmo.
/attr_src2/ assumes attribute is a part of cmo_src
/constant/ is a numerical value
EXAMPLES:
**math**/**multiply**/sink_mo/sink_attribute/50,60,3/src_mo/src_attribute/1.0
**math/add/**mo/attribute/50,60,3/mo/attribute/100.0
**math/modulo/**mo/attribute/1,0,0/mo/attribute/10
**math/sub/**sink_mo/sink_attribute/50,60,3/src_mo1/src_attribute1/src_mo2/src_attribute2/
**math/min/**sink_mo/sink_attribute/1,0,0/src_mo1/src_attribute1/src_mo2/src_attribute2/
**math**/**ln**/sink_mo/sink_attribute/1,0,0/src_mo/src_attribute/
**math/floor/**sink_mo/sink_attribute/1,0,0/src_mo/src_attribute/2.0/
**math/power**/sink_mo/sink_attribute/1,0,0/src_mo/src_attribute/2.0/
**math/power**/sink_mo/sink_attribute/1,0,0/2.0/src_mo/src_attribute/
**math/power**/sink_mo/sink_attribute/1,0,0/base_mo/base_attribute/ power_mo/power_attr
**math/exp**/sink_mo/sink_attribute/1,0,0/src_mo/src_attribute/
**math/exp10**/sink_mo/sink_attribute/1,0,0/src_mo/src_attribute/
**math/integrate/** cmotri /Vf /1,0,0/ cmotri/ Fn
**math/sum/** cmotri / Vfsum /1,0,0/ cmotri / Vf
**math/sum/** cmotri / area_sum /1,0,0/ cmotri / darea
&nbsp_place_holder;

View File

@@ -0,0 +1,164 @@
.. _memory:
## memory
These commands report the current state of LaGriT's dynamic memory allocation.
LaGriT arrays are referenced by memory management by a two part name, block
name and partition name. It is allocated in integer or real blocks(real is
implemented as real*8). Each memory block is preceeded by a header and
terminated by a trailer. Different platforms will have different values for
integer and real word lengths. LaGriT developers read more on LaGriT memory
management at **[Memory Manager](../memmang.html)**
The following memory keywords are recognized:
> &nbsp_place_holder;
**memory / verify &nbsp_place_holder;**
verify the integerity of LaGriT memory manager storage by checking that the
known blocks have not been overwritten. If corruption is detected, an array
map will be printed. Nothing is printed if there memory is successfully
verified.
**memory / print &nbsp_place_holder;**
print an address map of the LaGriT managed arrays. For each array the
following is printed; index, length, type, memory address, associated name,
and partition. The partition is the grouping of arrays by usage. Common
partitions include the mesh object (by name), global memory, and temporary
memory for work arrays.
>
>
> MEMORY SIZES :
> Sizeof char (type 3) = 1 bytes Sizeof long = 4 bytes
> Sizeof real*8 (type 2) = 8 bytes Sizeof pointer = 4 bytes
> Sizeof integer (type 1) = 4 bytes Sizeof INT_PTRSIZE = 4 bytes
>
> INDEX LENGTH TYPE ADDRESS NAME
PARTITION
> 29 40000000 2 -1894248416 xic
cmo1
> 1 10 3 143632720 global_name
global_lg
> 31 40000000 2 1760710688 zic
cmo1
> 30 40000000 2 2080714784 yic
cmo1
>
> Total BYTES = 2.400E+09 Total MEGABYTES = 2.400E+03
>
>
>
>
**memory / maxmalloc &nbsp_place_holder;**
Report estimate of possible amount of memory available for allocation by
LaGriT. This test will make incremental calls to internal LaGriT memory
allocation (mmgetblk) until failure. The report will include the total
Megabytes where allocation succeeded, and amount at which allocation failed.
This command will also print a map of the memory manager storage.
>
>
> ....
>
> MMGETBLK ERROR: value exceeds sizeof: 4
> MAX ALLOC SIZE: 4294967296.0000000
> ATTEMPTED SIZE: 6553600048.0000000
> MMGETBLK: return early with error flag: -21
>
> Succeeded at 819.20000000000005 MEGABYTES
> Failed at 1638.4000000000001 MEGABYTES
>
>
>
>
>
The 64 bit version for memory routines will look slightly different:
>
>
> MEMORY SIZES :
> Sizeof char (type 3) = 1 bytes Sizeof long = 8 bytes
> Sizeof real*8 (type 2) = 8 bytes Sizeof pointer = 8 bytes
> Sizeof integer (type 1) = 4 bytes Sizeof INT_PTRSIZE = 8 bytes
>
> ....
>
> util_malloc_: Out of memory, malloc return: (nil)
> Requested value: 104857600000.000000 = 8 bit unsigned int
> MMGETBLK FAILED: Array array_01 with bytes: 104857600096
> MMGETBLK: return ending with error flag: -1
>
> Succeeded at 52428.800000000003 MEGABYTES
> Failed at 104857.60000000001 MEGABYTES
>
>
>
EXAMPLES:
**memory / verify **
**memory / print **
**memory / maxmalloc ** &nbsp_place_holder;

View File

@@ -0,0 +1,29 @@
.. _merge:
&nbsp_place_holder;
> **_MERGE_**
>
>> Merge pairs of points together. On return, the first_point of a pair is the
survivor unless first_point may not be removed ( a corner point for example),
then the command operates as if first_point and second_point have been
interchanged. If there is no confirmation of the merge, one or both of the
points may be inactive, or the merge may be illegal because the points are not
neighbors or because this merge is disallowed by the merge tables. Merging may
trigger other merges by the reconnection step that follows the merge.
The command [massage](MASSAGE.html) may be used to merge nodes together based
on the edge distance separating the nodes.
> FORMAT:
>
>> **merge**/first_point/second_point
**merge**/1st_of_pair1/2nd_of_pair1/1st_of_pair2/2nd_of_pair2/../ 1st_of_pairn/2nd_of_pairn/
EXAMPLE: **merge**/21,22/

View File

@@ -0,0 +1,29 @@
.. _metis:
&nbsp_place_holder;
> **_MERGE_**
>
>> Merge pairs of points together. On return, the first_point of a pair is the
survivor unless first_point may not be removed ( a corner point for example),
then the command operates as if first_point and second_point have been
interchanged. If there is no confirmation of the merge, one or both of the
points may be inactive, or the merge may be illegal because the points are not
neighbors or because this merge is disallowed by the merge tables. Merging may
trigger other merges by the reconnection step that follows the merge.
The command [massage](MASSAGE.html) may be used to merge nodes together based
on the edge distance separating the nodes.
> FORMAT:
>
>> **merge**/first_point/second_point
**merge**/1st_of_pair1/2nd_of_pair1/1st_of_pair2/2nd_of_pair2/../ 1st_of_pairn/2nd_of_pairn/
EXAMPLE: **merge**/21,22/

View File

@@ -0,0 +1,84 @@
.. _mode:
&nbsp_place_holder;
> **_MODE_**
>
>> The MODE Command&nbsp_place_holder; sets up several optimization options
Currently implemented are:
(1) discrete optimization:
**mode/discrete**/surface_cmo/tolldamage
>>
>>> if this mode is set, **refine,** **smooth**, **merge** will require any
operation that involves nodes on the specified surface to result in a mesh
whose surface nodes are also members of the surface_cmo.
A mesh object attribute associated with the 3d mesh named discrete_optimize
will be created and its value will be the name of the surface mesh object.
>>
>> (2) error_adaption
**mode**/**adaption_field**/field_name
>>
>>> if this mode is set, optimization operations will be based on reducing
error.&nbsp_place_holder; A mesh object attribute associated with the 3d mesh
named 'adaption_field' will be created and it's value will be the name of the
field.
>>
>> (3) reconnection
**mode/recon**/**geom**
**mode/recon**/**delaunay**
**mode/recon**/**adaption**
>>
>>> Setting this mode will determine the criterion used to
[reconnect](RECON.html) the mesh.&nbsp_place_holder; The default mode is
**delaunay** and setting mode to **delaunay** will cause recon to attempt to
create a [delaunay mesh](CONNECT1.html).&nbsp_place_holder; Setting mode to
**geom** will reconnect to increase inscribed radii of
elements.&nbsp_place_holder; Setting mode to adaption will reconnect to reduce
solution error.&nbsp_place_holder; Field_name must be set with the
**mode**/**adaption_field **command.
>
> FORMAT:
>
>> **mode/discrete**/surface_cmo/tolldamage
**mode**/**adaption_field**/field_name
**mode/recon**/**geom**|**delaunay**|**adaptio**n
&nbsp_place_holder;
>
> EXAMPLES:
>
>> **mode**/**adaption_field**/solution
**mode**/**recon**/**adaption******
>>
>> All optimization including **[massage](MASSAGE.html) **commands that follow
will be performed to reduce error in the user defined field solution.
>
>> &nbsp_place_holder;

View File

@@ -0,0 +1,37 @@
.. _mregion :
&nbsp_place_holder;
> **_MREGION_**
>
>> Define a material region from a set of surfaces by logically combining the
surface names and region names. A material region may be removed from the
geometry by specifying the release keyword.
>>
>> To define material rgion, the operator **lt, le, gt**, and **ge** are
applied to previously defined surfaces according to the following rules.
**lt **-- if the surface following is a volume then **lt** means inside not including the surface of the volume. If the surface is a plane or a sheet lt means the space on the side of the plane or sheet opposite to the normal not including the plane or sheet itself.
**le **-- if the surface following is a volume then **le **means inside including the surface of the volume. If the surface is a plane or a sheet le means the space on the side of the plane or sheet opposite to the normal including the plane or sheet itself.
**gt **-- if the surface following is a volume then **gt** means outside not including the surface of the volume. If the surface is a plane or a sheet **gt** means the space on the same side of the plane or sheet as the normal not including the plane or sheet itself.
**ge **-- if the surface following is a volume then **ge** means outside including the surface of the volume. If the surface is a plane or a sheet **ge **means the space on the same side of the plane or sheet as the normal including the plane or sheet itself. The operators **or, and**, and **not** applied to regions or modified surfaces mean union, intersection and complement respectively. Parentheses are operators and are used for nesting. Spaces are required as delimiters to separate operators and operands; parentheses are operators and must be surrounded by spaces. Internal interfaces should be excluded when defining material regions. (i.e. use **lt** and **gt** ). External boundaries should be included when defining material regions. If a material regions consists of more than one region and the regions touch (i.e. share a region interface), then the region interface is not a material interface -- all the points on the region interface are interior to the material region. In this case use **le **or** ge** to include these region interface points in the material region as interior points.
Defining a material region will cause the information associated with this
material region to be stored under the name of the[ geometry
](../geometries.html)of the current mesh object.&nbsp_place_holder; Releasing
the material region will remove this information.
&nbsp_place_holder; FORMAT:
&nbsp_place_holder;**mregion/**material_region_name/region definition
EXAMPLES: **mregion/ **material_region_name/**release**
**mregion**/mat1/** le **box1 **and **(** lt** sphere1 **and** ( **lt** plane1 **or gt** plane2 ) ) /
**mregion**/mat2/ regiona **or** regionb /

View File

@@ -0,0 +1,46 @@
.. _negative_aij :
&nbsp_place_holder;
> **_NEGATIVE_AIJ_**
>
>> This command tests all edges of all boundary faces for negative coupling
coefficients.
It adds three attributes to the mesh object: num_neg_coup_coeff, type=INT,
length=scalar -number of negative coupling coefficients
neg_coup_coeff, type=VDOUBLE, length=num_neg_coup_coeff - value of coupling
coefficient
ietet_aij, type=VINT, length=num_neg_coup_coeff,rank=vector -
for each negative coupling coefficient, i: ietet_aij(1,i) contains the
tetrahedron number which contributes the most negative portion to the coupling
coefficient, ietet_aij(2,i) contains the local face number that contains the
local edge (ietet_aij(3,i)) which has the negative coupling coefficient These
attributes can be used to generate a set of points to be added to the mesh in
an attempt to reduce the number of negative coupling coefficients by the
**refine** option. The points added are created by projecting the fourth node
of the tetrahedron onto the identified face and then projecting this
projection onto the identified edge. If the final projected point lies between
the end points of the identified edge, this edge is refined. The
identification and refinement steps may be iterated up to maxiter times.
Alternatively the attribute may be used to create an **eltset **of the
identified elements.
The **rivara** option uses a rivara refinement method to add nodes on exterior
boundary edges until all coupling coefficients are positive or until a maximum
number of iterations has been exceeded. FORMAT: **negative_aij**
**negative_aij**/**refine**
**negative_aij**/**refine**/maxiter
**negative_aij/eltset/**eltset_name
**negative_aij/rivara** EXAMPLES: **negative_aij**
**negative_aij/refine **only one iteration will be performed
**negative_aij/refine/5** a maximum of 5 iterations will be performed
**negative_aij**/**eltset**/bad_tets an element set called bad_tets will be made no refinement will be performed/ **negative_aij/rivara**
****&nbsp_place_holder; [Click here for demos](../demos/refine_rivara/test/html/main_rivara.html)

View File

@@ -0,0 +1,70 @@
.. _offsetsurf :
&nbsp_place_holder;
> **_OFFSETSURF_**
>
>> Offsets triangulated surfaces in the direction of the surface outward
normal, i.e., normal surface motion. For each node a 'synthetic' unit outward
normal **N** is computed based on the weighted average angle of the normals of
the triangles shared by that node. old_cmo is the surface to be used in
generating the offset surface. new_cmo is the name of the new surface.
> > To add the nodes in the new surface to the main mesh object use the
**copypts** command. To add the new surface to the main mesh object use a
**surface** command with new_cmo as the sheet name (e.g.
**surface**/s2d/bndy_typedist is given in user coordinates (i.e. whatever
units the old_cmo mesh object was defined in.) The new node coordinates,
R_new, are computed using the formula:
>>
>>> R_new = R_old + dist * N_node
>>
>> Various keywords control the behavior of the command:
>>
>>> The following keywords can appear in the 5th, 6th, 7th or 8th argument
position.**
keepatt****, keep_angle** - &nbsp_place_holder;Compute node angle weighted
normals and keep the vector components in three scalar attributes x_n_norm,
y_n_norm, z_n_norm
**keep_area** - Compute node area weighted normals and keep the vector components in three scalar attributes, x_n_norm, y_n_norm, z_n_norm**
xzero**&nbsp_place_holder; - Compute the full offset direction vector but set
x component to zero
**yzero**&nbsp_place_holder; - Compute the full offset direction vector but set x component to zero
**zzero**&nbsp_place_holder; - Compute the full offset direction vector but set x component to zero
The following keywords can appear in the 5th argument position.
**xy, xz, yx yz zx zy** - these keywords constrain the offset to be parallel to the specified plane. These arguments can be used with a line type mesh object to constrain the offset to a particular plane.
>
>> FORMAT:
&nbsp_place_holder; **offsetsurf**/new_cmo/old_cmo/dist/keyword
&nbsp_place_holder;
&nbsp_place_holder; EXAMPLES: **offsetsurf/**cmo_out/cmo_in/d
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder; offset a triangulated surface a distance d using angle
weighted normals
offsetsurf/cmo_out / cmo_in / d / keep_area &nbsp_place_holder; - offset using
area weithted normals **offsetsurf/**cmo_out/cmo_in/d/[xy,xz,yx,yz,zx,zy]
offset a line cmo a distance d in a direction parallel to the specified plane.
**offsetsurf/**cmo_out/cmo_in/d/x y z offset a line cmo a distance d in the
direction specified by the vector (x,y,z)

View File

@@ -0,0 +1,26 @@
.. _perturb :
&nbsp_place_holder;
> **_PERTURB_**
This command moves node coordinates in the following manner.
Three pairs random numbers between 0 and 1 are obtained. These pairs refer to
the x, y and z coordinates of the nodes respectively. The first random number
of each pair is multiplied by the factor given in thecommand. The second
random number is used to determine if the calculated offset is to be added or
subtracted from the coordinate. No checking is done to see if elements are
inverted by this perturbation.&nbsp_place_holder; It is assumed that the mesh
is not yet connected.
&nbsp_place_holder; FORMAT:
**perturb/pset,get,psetnam**e/xfactor,yfactor,zfactor
&nbsp_place_holder; EXAMPLES
**perturb/**1,0,0/0.5,0,0&nbsp_place_holder;&nbsp_place_holder; add offsets to
only the xcoordinates of all nodes
**perturb/pset,get,mypset**/0.001,0.001,0.001&nbsp_place_holder; add small offsets to all coordinates of the nodes in the **pset** named **mypset.**
&nbsp_place_holder; [](../new_html/demos/pset/test/html/main_pset.html)

View File

@@ -0,0 +1,142 @@
.. _pset:
&nbsp_place_holder;
> **_PSET (Point Set)_**
>
>> Associate a name with a point set based on various geometric and logical
operators. Manipulate point sets. Output point sets.
>>
>> **seq** forms a pset of the nodes defined by ifirst, ilast, istride;
the special syntax,: 1,0,0 refers to all nodes and 0,0,0 refers to the last
set of nodes created.
**union, inter** and **not** are logical operations on previously defined psets.&nbsp_place_holder; The definition of the unary operator **not **is extended such that **not**/p1/p2 means p1 and (not(p2)).
**list **lists nodes in a pset or names of all psets
**write **write pset node list to a file
pset / [name|_-all-_] / write/ file_name[.vertexset] / [_ascii_|binary]
**zone **write pset node list to a file (FEHM Flow and Transport code zone file format)
pset / [name|_-all-_] / zone / file_name[.zone] / [ascii]
**zonn **write pset node list to a file (FEHM Flow and Transport code zonn file format)
pset / [name|_-all-_] / zonn / file_name[.zonn] / [ascii]
In write|zone|zonn mode the file name suffix .vertexset|.zone|.zonn is added
if the string provided does not have the file name suffix. The -all- argument
specifies that all psets are output. The name argument is the name of a single
pset.
**delete **deletes a previously defined pset
**attribute&nbsp_place_holder; **forms a pset from all points in** **ifirst,ilast,istride which have the specified value for a node based attribute. This option was previously named **zq.**
If the optional comparator field is given; that operation is used to compare
the attribute value to the requested value.
**geom/xyz/** forms a pset from all points inside the box whose corners are xl,yl,zl and xu,yu,zu relative to the geometry center at xc,yc,zc.
**geom/rtz/** forms a pset of nodes within the cylinder or cylindrical shell given by radius r1 to r2, angle theta t1 to t2 and height z1 to z2.
**geom/rtp**/ forms a pset of nodes within the sphere, sperical shell or sperical section given by radius r1 to r2, and angles theta t1 to t2 and angles phi p1 to p2.&nbsp_place_holder; [See chapter II, A. Conventions](../conventions.html) for an explanation of angles theta and phi.
**region**/region name/ifirst,ilast,istride
**mregion**/mregion name/ifirst,ilast,istride will return all nodes that are in the specified region/mregion - the definition of the region/mregion is evaluated to determine membership.&nbsp_place_holder; Hence the result may vary from what would be returned if the 'imt1' value of the nodes had been queried using the **attribute** option
**surface** identifies nodes on the specified surface.&nbsp_place_holder; Keyword surface names have the following meaning:
>>
>>> -**all**- will identify nodes on any surface.
-**interface**- will identify nodes on any interface surface.
-**boundary**- will idendify nodes on exterior surfaces.
**eltset** form a pset of nodes in the element set listed.
**constraints** forms a pset of nodes having the specified number of constraints.&nbsp_place_holder; The node's **icr** value is used as an index to the **icontab **attribute which gives the number of constraints.&nbsp_place_holder; [See chapter III, A](../meshobject.html) for an explanation of the **icontab** entries. FORMAT: **pset**/pset name/ **seq**/ifirst,ilast,istride
**union|inter|not|delete/**pset1[/pset2/.../psetn]
**list **
**write **/ file_name[.vertexset] / [_ascii_|binary]
**zone **/ file_name[.zone] / [ascii]
**zonn **/ file_name[.zonn] / [ascii]
**delete**
**attribute**/attribute /ifirst,ilast,istride/value/[lt|le|gt|ge|eq|ne]
**attribute**/attribute /ifirst,ilast,istride/[lt|le|gt|ge|eq|ne]/value
**zq**/attribute /ifirst,ilast,istride/value/[lt|le|gt|ge|eq|ne]
**zq**/attribute /ifirst,ilast,istride/[lt|le|gt|ge|eq|ne]/value
**region**/region name/ifirst,ilast,istride
**mregion**/mregion name/ifirst,ilast,istride
**geom**/**xyz**/ifirst,ilast,istride/xl,yl,zl/xu,yu,zu/xcen,ycen,zcen
**geom**/**rtz**/ifirst,ilast,istride/r1,t1,z1/r2,t2,z2/xcen,ycen,zcen
**geom**/**rtp**/ifirst,ilast,istride/r1,t1,p1/r2/t2/p2/xcen,ycen,zcen
**surface**/surface_name/[ifirst,ilast,istride] **surface** will select nodes that are on the specified surface.&nbsp_place_holder; If **-interface- **is specified for the surface name, all interface&nbsp_place_holder; nodes&nbsp_place_holder; will be returned.&nbsp_place_holder; If** -boundary-** is specified for the surface name, all nodes on external bounding surfaces will be returned. If** -all-** is specified all nodes on any surface are returned.
**eltset**/element_set_name **eltset **will return all nodes that are vertices of the elements in the specified element set **constraints**/number_of_constraints/ifirst,ilast,istride &nbsp_place_holder; EXAMPLES: **pset**/apset/**seq**/1,0,0/
&nbsp_place_holder;associate the pset name apsetwith all points.
**pset**/apset/**seq**/0,0,0/
&nbsp_place_holder;associate the pset name apsetwith the last set of nodes
created.
**pset**/apset/**union**/pset1,pset2,pset
&nbsp_place_holder;associate the pset name apset with the set of nodes which
belong to at least one of pset1, pset2, pset3.
**pset**/apset/**inter**/pset1,pset2,pset3
&nbsp_place_holder;&nbsp_place_holder; associate the pset name apset with the
set of nodes which belong to pset1, and pset2, and pset3.
**pset**/apset/**not**/pset1,pset2,pset3
&nbsp_place_holder;&nbsp_place_holder; associate the pset name apset with the
set of nodes which belong to pset1, and do not belong to pset2, and do not
belong to pset3
**pset**/apset/**not**/pset1
&nbsp_place_holder;&nbsp_place_holder; associate the pset name apset with the
set of nodes which do not belong to pset1
**pset**//**list**/
&nbsp_place_holder;&nbsp_place_holder; list the names of all psets
**pset**/mypset/**list**
&nbsp_place_holder;&nbsp_place_holder; output the list the node numbers of the
members of mypset to the screen and the log file outx3dgen
**pset**/mypset/**write/file_name.vertexset/ascii**
&nbsp_place_holder;&nbsp_place_holder; Write list of nodes in pset mypset to
an ascii file named file_name.vertexset
**pset**/-all-/**write/root_name/ascii**
Write list of nodes in all psets. root_name is treated as a root name and each
pset is written to a separate file beginning with that root. For example, if
you have psets named pset1 and pset2, they will be written to files called
root_name_pset1.vertexset and root_name_pset2.vertexset.
**pset**/mypset/**zone/file_name.zone/ascii**
&nbsp_place_holder;&nbsp_place_holder; Write list of nodes in pset mypset to
an ascii file named file_name.zone The output is in FEHM zone file format.
**pset**/apset/**attribute**/**itp**/1,0,0/10/**ge**
&nbsp_place_holder;&nbsp_place_holder; associate the name apset with the
points whose type field(**itp1**) has value greater than or equal to 10 (these
would be boundary nodes).
**pset**/mypset/**geom**/**xyz**/1,0,0/1.,1.,-5./10.,20.,10./
&nbsp_place_holder;&nbsp_place_holder; associate the name mypset with all
nodes that fall with the box with corners at (1,1,-5) and (10,20,10)
**pset**/mypset/**geom/rtz/pset,get,**oldpset/0.,0.,0./10.,360.,10.&nbsp_place_holder;&nbsp_place_holder; associate the name mypset with the nodes that are members of the pset oldpset and which fall inside the cylinder of radius 10 and height 10 and whose axis is the z-axis.
**pset**/spset/**surface**/s1/1,0,0
&nbsp_place_holder; associate the name spset with the set of nodes that lie on
the surface s1.
**pset**/spseta/**surface**/s2/**pset,get,spset**
&nbsp_place_holder; associate the name spseta with the set of nodes that lie
on the surface s2 and which are members of the pset spset&nbsp_place_holder;
This command and the previous command would identify the nodes that are on the
intersection of surfaces s1 and s2 and give the name spseta to these nodes.
**pset**/mypset/**constraints**/3
&nbsp_place_holder;associate the name mypset with the set of nodes that have 3
constraints ( normally the set of nodes that lie on 3&nbsp_place_holder;
constrained surfaces -- surfaces of type **reflect** or **intrcons**) [Click
here for demos](../demos/pset/html/main_pset.html)

View File

@@ -0,0 +1,25 @@
.. _pstatus:
**__**&nbsp_place_holder;
> **_PSTATUS_**
>
>> Saves, removes, retrieves, or replaces a specified set of points, usually
the last set of points defined by a generator command or the set of points
defined by ifirst,ilast,istride. Note that point sets must be specified in
sequence in order for this command to work properly.
FORMAT: **pstatus** (Returns current point status counters)
**pstatus** /**save**/name/ifirst,ilast,
(Saves the point status numbers, ifirst,ilast,istride under name)
**pstatus** /**store**/name/ifirst,ilast
(Overwrites what was in name with ifirst,ilast,istride
**pstatus /delete/**name (Deletes values from name)
**pstatus** /**get**/name (Retrieves values from name) &nbsp_place_holder;
&nbsp_place_holder;

View File

@@ -0,0 +1,15 @@
.. _quadxy:
&nbsp_place_holder;
> **_QUADXY_**
>
>> Define an arbitrary, logical quad of points in 2D(xy) space.nx and ny
specify the number of points in the x and y directions. The four corners of
the quad are then listed in counter clockwise order ( the normal to the quad
points is defined using the right hand rule and the order of the points).
FORMAT: **quadxy**/nx ,ny /x1,y1,z1/x2,y2,z2/x3,y3,z3/x4,y4,z4/

View File

@@ -0,0 +1,6 @@
.. _quadxyz:
# Not Found
The requested URL /docs/commands/QUADXYZ1.html was not found on this server.

View File

@@ -0,0 +1,139 @@
.. _quality:
&nbsp_place_holder;
> **_QUALITY_**
>
>> quality provides a collection of mesh quality measures
&nbsp_place_holder;
&nbsp_place_holder;FORMAT: **quality /**[quality_type] / [quality_type
options]
Where quality-type can be **aspect**, **pcc**,** volume**, **angle**,
**quad**, or** taylor. **Quality-type options depend on the quality-type.
**quality **(no arguments)
writes to screen and outx3dgen logfile giving volume and aspect ratio
distribution information. Aspect ratios and element volumes are binned into 5
bins then totaled, min and max values are also reported.
**quality/aspect**/[**y**]
displays a count of the number of elements whose aspect ratio falls in each of
7 bins .&nbsp_place_holder; If **y **is specified create an attribute named
**aratio** that will contain the value of the aspect ratio of each element.
**quality/edge_ratio/[y]**
displays a count of the edge length minimum/edge length maximum in each of 7
bins. If y is specified create an attribute named **eratio** that will contain
the value of the min/max edge ratio of each element.
**quality/edge_min/[y]**
displays a count of the minimum edge length in each of 7 bins. If y is
specified create an attribute named **edgemin** that will contain the value of
the min edge length of each element.
**quality/edge_max/[y]**
displays a count of the maximum edge length in each of 7 bins. If y is
specified create an attribute named **edgemax** that will contain the value of
the max edge length of each element.
**quality**/**angle**/**gt**|**lt**/value]/
displays a count of the number of elements with a dihedral angle that is
greater than or less than the supplied value. See also [ cmo/addatt/mo/ang_*
](cmo/cmo_addatt.html) commands for dihedral angle and solid angle
calculations.
**quality**/**pcc**
creates an element based attribute called 'neg_coup_coeff' which is a
"negative coupling coefficient" indicator.&nbsp_place_holder; A value of 1
means the coupling coefficient is OK.&nbsp_place_holder; Anything less than 1
means it is negative.&nbsp_place_holder; This is&nbsp_place_holder;
**element** attribute and is useful when viewing a mesh with GMV to find the
negative coupling coefficients.
**quality**/**quad** generates some quality measures for quads and displays them after binning them into seven bins. Please see [`cmo / addatt // quad_quality`](cmo/cmo_addatt.html#quad) for details on the quality measures used.
**quality**/**taylor**/fieldname/value/
displays a count of the number of element-edge pairs with a taylor error
estimate value whose absolute value is greater than the supplied value.
**quality/volume**
quality/volume can appear with or without any of the following options:
**quality**/**volume **/** **number_of_bins
number_of_bins is an integer value controlling the number of bins in which to
distribute the volume values for display. if number_of_bins is 0, then binning
of distributed volumes is skipped, and only min and max volumes are reported.
number_of_bins must be the 2nd argument to **quality** if used.
**quality/volume**/**itetclr**
&nbsp_place_holder;output element volume distributions with 5 bins. loop
through** itetclr** values and report total volume for each material
**quality**/**volume**/number_of_bins/**itetclr**
**itetclr** is a keyword that will give volume information according to the values in the itetclr attribute. Number_of_bins applies to each tetclr value.&nbsp_place_holder; For each itetclr value, the volume of elements will be totaled.
**quality/volume**/**lt**|**gt**|**eq**|**ne**/xvalue
will report volumes based on compare operator and given xvalue, for instance
quality/volume/**lt** 0.0/ will report total number of elements with volumes
less than 0.0 It may be used in combination of other volume options. if used
with itetclr keyword, values will be reported by itetclr value
**quality/volume**/**eltset**,**get**,ename
eltset,get,ename will report volumes on elements in defined eltset can be used
in combination with previous options with operations done only on the chosen
eltset. itetclr will still report for each of the values in itetclr .
Any combination of quality_type options may occur with the **volume**
quality_type, for example:
**quality**/**volume**/number_of_bins/**itetclr**/**lt**| **gt** | **eq **| **ne** | xvalue/**eltset**,**get**,ename.
&nbsp_place_holder;
EXAMPLES:
**quality**/&nbsp_place_holder;
display volume and aspect ratio
**quality**/**aspect**/&nbsp_place_holder;
display aspect ratiodistribution in 7 bins
**quality**/**aspect**/**y**/&nbsp_place_holder;
display aspect ratio distribution and add attribute named aratio
**quality**/**angle**/**gt**/179/&nbsp_place_holder;
return count of elements with a dihedral angle > 179.
**quality**/**taylor**/boron/1.e-10/
run taylor error estimate and return count of element edge pairs with absolute
error greater than value
**quality**/**volume**
output element volume distribution with 5 bins
**quality**/**volume** / 2
output element volume distribution with 2 bins
**quality**/**volume**/**itetclr**
loop through** itetclr** values and report total volume for each material
**quality**/**volume**/**lt .03**
count and report element volumes lt .03
**quality**/**volume** /**itetclr**/**lt .03**
count and report element volumes lt .03 by **itetclr** value
**quality**/**volume**/**eltset**,**get**,e2
report on element volumes only for those in the set e2
**quality**/**volume**/**itetclr**/**eltset,get,e2**
report on element volumes only for those in the set e2, loop through each of
the **itetclr** values, report total volume by material for elements in set e2
[Detect and characterize tetrahedra as type : sliver, cap, needle,
wedge](../QUALITY_sliver_cap_needle_wedge.html)

View File

@@ -0,0 +1,216 @@
.. _radapt :
&nbsp_place_holder;
> **_RADAPT_**
>
>> The command radapt performs r-adaption on 2D or 3D mesh objects. For simple
smoothing see command smooth. radapt takes a 2D or 3D mesh object and moves
nodes (specifically the nodes selected by ifirst,ilast,istride), without
changing the connectivity of the grid, in order to adapt the mesh to best
capture the behavior of a specified field or to an _adaptionfunction_ (fadpt)
supplied by the user.
> > There are two adaptive smoothing algorithms available:
1. **esug** --- Elliptic Smoothing for Unstructured Grids. This can only be
used on triangular 2D mesh objects. If field is specified in the command line,
**esug** will attempt to adapt the grid to the specified field. If the keyword
**user** is specified in the command line, **esug** will attempt to adapt the
grid to an _adaption function_ defined by the user-supplied subroutine fadpt.
(Ahmed Khamayseh and Andrew Kuprat, "Anisotropic Smoothing and Solution
Adaption for Unstructured Grids", Int. J. Num. Meth. Eng., Vol. 39, pp.
3163-3174 (1996)).
2. **mega** --- Minimum Error Gradient Adaption. For adaptive smoothing
purposes, **mega** can only be used on 3D meshes, and only in conjunction with
a user-supplied subroutine fadpt or with a user specified attribute field. If
adaption is to an attribute field, then **radapt** may be instructed to use
the interpolation mode associated with the attribute to **refresh **the
attribute values. The default is **stale **in which case the attribute value
will not be updated to reflect the new node position. In either case, the user
is cautioned to carefully consider the validity of the data used for the
adaption. **mega** can be used to adapt hybrid meshes as well as tetrahedral
meshes. (Randolph E. Bank and R. Kent Smith, "Mesh Smoothing Using A
Posteriori Error Estimates", SIAM J. Num. Anal. Vol. 34, Issue 3, pp. 979-997
(1997))
In the field adaption form, the user has specified a valid field from the
current mesh object, and r-adaption is to be based upon this field. Typically,
if the field has large gradients or curvature in a particular region,
r-adaption using this field will cause nodes to be attracted to the region of
interest. (**esug **adapts especially to large gradients, **mega **adapts
especially to large second derivatives---"curvature".) If adaption is to an
attribute field, then **radapt** may be instructed to use the interpolation
mode associated with the attribute field to **refresh **the attribute values.
The default is **stale **in which case the attribute value will not be updated
to reflect the new node position adaption. In this case, the user should
reduce the number of adaption iterations to less than 4, since r-adaption with
stale data becomes meaningless. (See **maxiter**_**sm** variable description
below.) The user takes on the task of refreshing the field values by e.g. re-
solving a PDE for the new field values on the new mesh. If **refresh** is
specified, the r-adaption routine will automatically interpolate the new field
values every iteration, using a call to the **doping** command. In this case,
the number of adaption iterations need not be reduced from the default value
of 25. In either case, the user is cautioned to carefully consider the
validity of the data used for the adaption.
In the **user** form, the mesh will r-adapt to the function returned by the
subroutine fadpt which must be supplied by the user.
Specifying **position** signifies that the x-y-z values of the nodes in the
current mesh object will be altered. (Other argument values allow for
modification options that are not yet implemented.)
If **esug** is used (currently available in 2D only), the degree of node
adaption will depend on the scale of the specified field. In this case, the
results of adaption of the grid to the field can be altered by using one or
more **field** commands beforehand to modify the field. For example, by
increasing the scale of a field using **field**/**scale**, the **esug**
algorithm will produce grids with increased numbers of nodes in the regions
where the field experiences relatively large gradients. By volume averaging a
field using **field**/**volavg**, **esug** will cause a more gentle form of
adaption with a better grading of elements. By composing the values of the
field with **log** or **asinh** using **field** /**compose**, one can cause
**esug** to shift nodes to where the logarithm (or hyperbolic arcsine) of the
field has interesting features, rather than where the field itself has
interesting features._ Note: Since the_ **mega** _adaptive smoothing algorithm
is rigorously based on error minimization, it is in general of little or no
value to modify the adaption function for this algorithm. In particular,
rescaling has no effect on the output._
The code variable **maxiter**_**sm** (default=25) can be set using the
**assign** command before calling **radapt**. This controls the maximum number
of adaption iterations to be performed by **radapt**. If convergence is
detected , fewer iterations will be performed. If field data is allowed to
become **stale** during the course of r-adaption, **maxiter**_**sm** should be
reduced (e.g. less than 4).
>
> FORMAT:
>
>> **radapt **/**[position**]/** **[**esug**|**mega**]/[ifirst,ilast,istride]
/[field]/
[**refresh**|**stale**]
**radapt **/ [**position**]/** **[**esug**|**mega** ]/ [ifirst,ilast,istride] / [**user**]
>
> EXAMPLES:
>
>> Using **esug**, adapt all nodes in 2dmesh to the density field. Do not
update data.
>>
>>> **radapt / / esug / **1,0,0 / density
>>
>> Assuming a default 3D cmo, use **mega** to adapt the mesh to the adaption
function supplied by the user via subroutine fadpt. Afterwards dope the
density field with the fadpt function values.
>>
>>> **radapt **/ / / 1,0,0 / **user**
**doping **/** user **/ density / **set **/1,0,0/
>
> FORMAT FOR fadpt:
>
>> subroutine fadpt(xvec,yvec,zvec,imtvec,nvec,time,fvec)
xvec, yvec, zvec --- Vectors of x, y, and z coordinates of the points where
the function is to be evaluated.
imtvec --- Vector of **imt** values (material types) for the case where
function value depends on material type as well as position (ie. functions
with discontinuities).
nvec --- Vector length (= number of places where function is to be evaluated).
>>
>> time --- Time (scalar), for time-dependent functions.
>>
>> fvec --- Vector of adaption function values.
>
>
SAMPLE FUNCTIONS AND INPUT DECKS
>
>> To demonstrate adaptive smoothing using **mega**, examples are available
which use the files [fadpt_boron.f](../../new_html/fadpt_boron.f),[input.boron
.3dtet](../../new_html/input.boron.3dtet),[input.boron.3dhex](../../new_html/i
nput.boron.3dhex),[fadpt_gyro.f](../../new_html/fadpt_gyro.f), [input.gyro.3dt
et](../../new_html/input.gyro.3dtet),[input.gyro.3dhex](../../new_html/input.g
yro.3dhex).
> > 1. Boron density function fadpt_boron.f. Load the file fadpt_boron.f ahead
of the **LaGriT** libraries; this will cause the default fadpt subroutine to
be displaced by the one in this file. The result is that now 3D adaptive
smoothing will attempt to adapt 3D tetrahedral or hybrid meshes to the boron
density function devised by Kent Smith of Bell Labs. This function has a
maximum value of 1.1 x 1018, and drops rapidly to zero; the function attains
its largest values on a T-shaped region in space and provides very challenging
isosurfaces to capture. Two input decks use this function:
>>
>>> a. input.boron.3dtet. This deck generates and adapts a tetrahedral mesh to
the boron function.&nbsp_place_holder; A snapshot of the adapted grid may be
seen at [boron.png](../../images/boron.png).
b. input.boron.3dhex. This deck generates and adapts a hexahedral mesh to the
boron function.&nbsp_place_holder;&nbsp_place_holder; A snapshot of the
adapted grid may be seen at [boron.hex.png.](../../images/boron.hex.png)
>>
>> 2. "Gyroscope function" fadpt_gyro.f. This function has large second
derivatives near three rings of unit diameter which are aligned with each of
the three coordinate planes which pass through the origin. Adaption to this
function results in the pulling of the grid towards the rings when running the
following two input decks:
>>
>>> a. input.gyro.3dtet. This deck generates and adapts a tetrahedral mesh to
the "gyroscope" function.&nbsp_place_holder;&nbsp_place_holder; A snapshot of
the adapted grid may be seen at [gyro.png](../../images/gyro.png).
b. input.gyro.3dhex. This deck generates and adapts a hexahedral mesh to the
"gyr/scope" function.&nbsp_place_holder;&nbsp_place_holder; A snapshot of the
adapted grid may be seen at [gyro.hex.png](../../images/gyro.hex.png).
>>
>> RELEVANT LaGriT VARIABLE FOR radapt
The **maxiter_sm** variable is provided to control the maximum number of
iterations used by **radapt** on a single call. By default, this variable is
set to 25, but this can be changed by the user. For example,
**assign **/ / /** maxiter_sm **/** **50
changes the maximum number of iterations to 50. If **radapt **detects a
sufficient amount of convergence, it will terminate smoothing in less than
**maxiter_sm** iterations.

View File

@@ -0,0 +1,88 @@
.. _rankvolume:
> **_RANKVOLUME_**
&nbsp_place_holder;
&nbsp_place_holder;
>
>> RANKVOLUME prints out the lowest volume elements from a mesh, ranked in
increasing order.&nbsp_place_holder; The default is to print out the 100
lowest volume elements, but this number can be changed by specifying it as an
optional second argument to the command. Also printed are the number of
exterior boundary faces and number of interfaces faces for each of these
elements.
&nbsp_place_holder; FORMAT: **rankvolume**/[number_of_elements_to_rank]
EXAMPLE: &nbsp_place_holder;
rankvolume/10
elt. no.&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_h
older;&nbsp_place_holder;&nbsp_place_holder; volume&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder; #ext.bound.faces
#int.bound.faces
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
343660&nbsp_place_holder; 0.105844E-05&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 1
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
567342&nbsp_place_holder; 0.105844E-05&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
567266&nbsp_place_holder; 0.105844E-05&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 1
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
283659&nbsp_place_holder; 0.105844E-05&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
687334&nbsp_place_holder; 0.105844E-05&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
450784&nbsp_place_holder; 0.105844E-05&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
730990&nbsp_place_holder; 0.105844E-05&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
146725&nbsp_place_holder; 0.105844E-05&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
785111&nbsp_place_holder; 0.105844E-05&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
450711&nbsp_place_holder; 0.105844E-05&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; 0&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
0&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;

View File

@@ -0,0 +1,64 @@
.. _read :
&nbsp_place_holder;
> **_READ_**
>
>> This command reads in data into the active Mesh Object, replacing whatever
data might have been previously contained in the active Mesh Object.
> FORMAT:
>
>> avs, LaGriT, and gmv formats are supported.&nbsp_place_holder; The other
formats may be used, but no guarantees are made about their capabilities.
goCad format is supported only for reading TSURF files.
>>
>> **[read/avs](../read_avs.html)**
**[read/LaGriT](../read_lagrit.html)**
**[read/gmv](../read_gmv.html)**
**[read/gocad](../read_gocad.html)**
**[read/iges_grid](../read_iges_grid.html)**
**[read/ngp](../read_ngp.html)**
**[read/vrml](../read_vrml.html)**
**[read/datex](../read_datex.html)**
**[read sheetij](../read_sheetij.html)**
**[read/gmvfreeformat](../read_freeformat.html)**
**[read/zone|zonn
](../read_fehm_zone.html)**
>>
>> Note: To read tabular data (spreadsheet style x,y,z nodes or attributes)
see: [cmo/readatt/...](cmo/cmo_readatt.html)
>
> EXAMPLES:
>
>> **read** / gmv / myfile / mesh_object_name
**read** / LaGriT / myfile
Short form syntax does not require file type as the second token. This is
supported for the suffixes listed below. Suffix may be upper or lower case.
**read** / example.[inp|avs|gmv|ts|lg|lagrit] / mesh_object_name
See links to various formats for more detailed explanations and examples.
[
](../read_fehm_zone.html)

View File

@@ -0,0 +1,128 @@
.. _recon:
&nbsp_place_holder;
> **_RECON_**
>
>> This command flips connections in the mesh to get restore the Delaunay
criterion or to improve element shapes. The option 1 (recommended for 2D
meshes only) adds points on the boundaries if needed. The option 0 (default)
specifies that no points are to be added on the boundaries. The standard
method used by recon is to flip connections based on the in-sphere test (the
circumsphere of a tetrahedral element should contain no other nodes).
Additional flipping criteria are available. The Minimum Error Gradient
Adaption ([mega](RADAPT.html)) can be invoked by changing the value of the
code variable [ivoronoi](../meshobject.html) (**cmo/setatt**//ivoronoi/-2).
The effect of this option is to generate well shaped elements; however the
grid will not be Delaunay. If the user has a function to used for adaptive
reconnection this option is available by setting the code variable ivoronoi to
2 (**cmo/setatt**//ivoronoi/2). The user will have to supply an external
function.
> > If damage is specified then flips on exterior boundaries are checked to
verify that the maximum depth of deformation of the external boundary does not
exceed the value of damage. The default value of damage is 1% of the problem
size. This setting prevents connecting across corners if the external boundary
is a reflective box.
>>
>> If the keyword **checkaxy **is provided, then 2D flips are suppressed if
the new triangles
would have xy-projected areas less than EPSILONA.
>>
>> **recon** is called by other LaGriT commands such as
**massage**.&nbsp_place_holder; To disable recon set ivoronoi to 5
(**cmo/setatt**//ivoronoi/5).
>>
>> **recon** will by default reconnect across interface
edges.&nbsp_place_holder; To restrict reconnection to interior faces and
exterior boundary faces, set [iopt2to2](../meshobject.html) to 0
(**cmo/setatt**//iopt2to2/0)
>
> FORMAT:
>
>> **recon**/[**1**|**0**]/[damage]/[**checkaxy**]
>
> EXAMPLES:
>
>> **recon**&nbsp_place_holder;&nbsp_place_holder; attempt to restore Delaunay
>>
>> **cmo/setatt**//ivoronoi/-2
>>
>> **recon&nbsp_place_holder;**&nbsp_place_holder;&nbsp_place_holder; attempt
to improve geometric mesh quality
>>
>> **recon**/**1**&nbsp_place_holder; for 2d meshes add nodes on boundaries to
guarantee Delaunay
>>
>> **recon**//.001&nbsp_place_holder; reconnect limit interface and boundary
damage to a maximum of .001.
>>
>> **recon**/0/.001/**checkaxy**&nbsp_place_holder; for 2d meshes reconnect,
limiting damage to a maximum of .001
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; and preventing
creation of any negatively oriented or small triangles
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_plac
e_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_
holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_ho
lder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_hold
er;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder
;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; (with respect to
the xy-plane).
&nbsp_place_holder;
&nbsp_place_holder;
>
> [Click here for demos](../demos/2d_recon/test/html/main_2d_recon.html)
>
>> &nbsp_place_holder;
&nbsp_place_holder;

View File

@@ -0,0 +1,378 @@
.. _refine :
## REFINE
> The **refine** command is used to create more elements. The method in which
these new elements are formed is based on the refine_option chosen. The refine
criteria used in these methods are defined in the [Grid
Refinement](http://lagrit.lanl.gov/new_html/REFINE1.html) Section.
COMMAND ARGUMENTS:
> The refinement choice is followed on the command line by options that are
needed for the type of refinement chosen. See the details for each
refine_option for a description of parameters specific to the refine type. See
examples below for various formats. In general the refine arguments include:
>
> **refine** / refine_option / field / interpolation / refine_type / range /
xvalue
/ [ xvalue2 / xvalue3 / inclusive_flag ]
refine_option: indicates the choice of refinement method. The choices for
first parameter are:
> * **junction** will refine object where field crosses xvalue
> * **constant** will refine object where field > xvalue
> * **delta** will refine object where delta(field) > xvalue
> * **lambda** will refine object where lambda(field) < xvalue
> * **maxsize** will refine object where object > xvalue. Size refers to
volume for tets, area for face, and length for edges.
> * **aspect** will refine where aspect ratio < xvalue
> * **addpts** will refine explicitly by adding a set of nodes
> * **rivara **edges longer than xvalue will be refined according to the
principle that a refined edge candidate is the longest edge in any element
that contains it. This results in a recursive refinement procedure that adds
neighboring edges to the refinement candidate list until no neighbor edge is
longer then the candidate. refine_type must be **edge**. Arguments field and
interpolation are ignored. This method of refinement, when used with a pset,
produces a nicely graded mesh.
> * **rivara_boundary** applies the rivara algorithm, but only bisect edges
on external boundaries.
> * **rivera_truncated** applies the rivara algorithm, but restricts the
neighborhood search to the edges in the selected pset. If the pset is the
entire mesh, this option has the same behavior as **rivara**.
> * **roughness** will refine based on the distance of the endpoint of an
edge to the plane determined by the synthetic normal with respect to a
specified surface at the other endpoint of the edge. This is intended to
increase refinement on surfaces near corners or around sharp bends in
surfaces. xvalue is the distance, the surface name must follow the distance
argument.
> * **edge_list** will bisect a set of edges specified by the node numbers
of the endpoints of the edges. refine_type must be **edge** followed by a list
of end points making up the edge_list.
> * **element_set** (or **eltset**) will refine all elements in a specified
element set. The mesh object may be tri, quad, tet or hex.&nbsp_place_holder;
Internally a node set will be created from the chosen
elements.&nbsp_place_holder; Because of the conversion from element set to
point set, it is possible that some element not in the original element set
will have all of its nodes as members of the internally constructed points set
and hence will be refined.&nbsp_place_holder; Refinement_method is
**constant**; refine_type is **element**; inclusion_flag is
**exclusive**.&nbsp_place_holder; The element range **eltset,get,**ename is
the only argument after **element_set**.&nbsp_place_holder;&nbsp_place_holder;
> The refine command generated internally is :
**refine**/**constant**/**imt1**/**linear**/**element**/**pset**,**get**,internal_psetname/ -1.,0.,0./**exclusive**
directional refinement is available through **amr** keyword (see OCTREE
examples below):
refine/constant/imt1/linear/element/**pset,get,psetname**/-1.,0.,0./exclusive/
** amr prd_choice**
> * **interface** will bisect a set of non-interface edges of tets all of
whose vertices are interface nodes. Valid only for 3D tetrahedral grids and is
useful to 'unlock' tetrahedra that are stuck because all of their vertices lie
on interface surfaces.&nbsp_place_holder; After the refine operation these
tetrahedral will be replaced by tetrahedra containing a vertex that is not on
the surface - thus allowing later smooth or massage operations more freedom to
improve the grid.
refine_type specifies what object will be refined and how that object will be
refined:
> **element **in 3D will refine elements by placing a point in the center of
the element.
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
in 2D (triangle) will refine element by refining all edges of the triangle.
**face **in 3D will refine facets by placing a point in the center of the facet.
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
in 2D (triangle) will refine face by refining all edges of the face.
**edge **will refine edges by placing a point on the midpoint of the edge.
**faceedge** will refine facets by refining all edges of the facet.
**tetedge** will refine elements by refining all edges of the element.
field must refer to a previously defined attribute of the current Mesh Object.
interpolation specifies how to interpolate the field to give field values to
the new nodes created. The implemented values are:
> **linear**
**log**
**asinh**
range is the selection of points designated by node numbers for
ifirst,ilast,istride or **pset,get**,pname. **/1,0,0/** will select all nodes
in the Mesh object.
xvalue [/xvalue2/xvalue3/] is the real number usually indicating a size for
the different refine options. Most of the refine options do not use the second
and third values so their places will be empty **///**. See examples.
inclusion_flag is an optional flag specifing if refinement is an inclusive or
an exclusive operation. By default, all operations are **exclusive**. For
**inclusive**, if an edge refinement is specified restricted to a pset, then
an edge is eligible for refinement if either or both of the end points belong
to the pset selected. If the inclusion_flag is **exclusive** then both end
points must be in the pset. The implemented values are:
> **inclusive**
**_exclusive_**
QUADTREE and OCTREE REFINEMENT:
Quad and hexahedral elements may be refined creating quad tree and octree
meshes. Three new Mesh object attributes are added during this operation. The
refine_type must be **element**. The refine_option must be **constant,**
**junction **or **maxsize**. The values for /xvalue/xvalue2/xvalue3/ should be
/-1.,0.,0./. For an element set, use the shortened syntax
**refine/element_set/eltset,get,**esetname.
The element attributes added to the Mesh object are:
> **itetlev**(ie) is an integer with the level of refinement. An unrefined
mesh element has **itetlev**(ie)=0, one level of refinement **itetlev**(ie)=1,
etc.
**itetkid**(ie) is a pointer to a child element number. If nothing has been done to change element numbering, it is element number of the first child element created and the rest of the children are in sequence after the first child. If** itetkid**(ie)=0 , the element has not been refined further.
**itetpar**(ie)is a pointer to the parent element at refinement level&nbsp_place_holder; **itetlev**(ie)-1.
Quad meshes will have 4 children for each refined element. Hex meshes will
have 8 children. The children are generated sequentially; The first child will
contain the first local node of the parent element, the other elements are
created in the order shown in this diagram.
For example in the picture below, element e1 is refined to create 8 children,
c1, c2, c3, c4, c5, c6, c7, c8.
>
> Label
> Element #
> itetlev
> itetkid
> itetpar
>
> e1
> 1
> 0
> 2
> 0
>
> c1
> 2
> 1
> 0
> 1
>
> c2
> 3
> 1
> 0
> 1
>
> c3
> 4
> 1
> 0
> 1
>
> c4
> 5
> 1
> 0
> 1
>
> c5
> 6
> 1
> 0
> 1
>
> c6
> 7
> 1
> 0
> 1
>
> c7
> 8
> 1
> 0
> 1
>
> c8
> 9
> 1
> 0
> 1
>
![octree refinement](../dsquare.gif)
&nbsp_place_holder;
> One can control refinement so that a hex is broken into either 8, 4 or 2
elements and a quad is broken into either 4 or 2 elements. This is controlled
with the principal refine direction choice (prd_choice) parameter. This syntax
works assuming imt values are greater or equal to zero with principal refine
direction chosen through a combination of "123" prd_choice indicators as
defined below. The command line used is:
refine/constant/itetclr/linear/element/1,0,0/-1.,0.,0./exclusive/amr
**prd_choice**
or with element selection (based on pset and inclusive/exclusive options): ref
ine/constant/imt1/linear/element/**pset,get,pname**/-1.,0.,0./**inclusive**/
amr **prd_choice**
>
> **prd_choice** indicates the chosen principal refinement direction based on
the local hex element topology as defined by edge numbers, for instance, quad
edge 1 is in the x direction relative to the local topology.
= 1 refine along x direction, 1 hex->2 hex, 1 quad->2 quad (quad edges 1 and
4)
= 2 refine along y direction, 1 hex->2 hex, 1 quad->2 quad (quad edges 2 and
3)
= 3 refine along z direction, 1 hex->2 hex, 1 quad->4 quad
= 12 refine along x and y direction, 1 hex->4 hex, 1 quad->4 quad
= 13 refine along x and z direction, 1 hex->4 hex, 1 quad->4 quad
= 23 refine along y and z direction, 1 hex->4 hex, 1 quad->4 quad
= 123 refine xyz with prd amr routines, 1 hex->8 hex, 1 quad->4 quad
= 0 refine xyz with default amr refinement, 1 hex->8 hex, 1 quad->4 quad
FORMATS:
> **refine**/refine_option/ [field]/ [interpolation]/refine_type /ifirst,
ilast, istride/xrefine/yrefine/zrefine/inclusive_flag/
**refine/roughness///edge**/ifirst,ilast,istride/distance/surface_name/**exclusive|inclusive**
**refine/edge_list///edge/**edge_list/
**refine/interface/// edge/pset,get**,psetname
**refine/element_set / eltset,get**,esetname
**refine/eltset / eltset,get**,esetname
EXAMPLES:
> **refine**/**maxsize**///**edge**/**pset,get,**something / .25 will refine
element where edge is longer than .25
**refine**/**constant**/concentration/**log**/**edge**/
1,0,0/25.0///**inclusive** will refine where concentration is greater than 25.
**refine**/**addpts**///**tet**/**pset,get,**newpoints/ refine explicitly by
adding the new nodes in the set newpoints
**refine**/**rivara**///**edge/pset,get,**p1/.5///**inclusive** refine all
edges containing at least one node in pset p1 that are longer than .5. Using
the 'rivera' algorithm may result in edges not containing nodes in the pset to
be refined. **refine/rivara_truncated///edge/pset,get,p1/**.5///**exclusive**
rivera_truncated, exclusive will refine only edges both of whose endpoints are
in the selected pset named p1 **refine/rivara_boundary///edge/1,0,0/**.25
rivara_boundary will only refine boundary edges.
**refine/roughness///edge/1,0,0/**.28/ptop**/inclusive** will refine based on
.28 distance to the surface named ptop. **refine/edge_list///edge/**1 2 23 47
will refine the edge with endpoints 1 and 2 AND the edge with endpoints 23 and
47. **eltset** / elem3 / id_elem1 / **eq** / 3
**refine/eltset** / **eltset,get**, elem3 will create a node set from the element set named elem3 and refine using the constant option. **refine/constant/**imt1/linear/**element/pset,get,**pbox /-1.,0.,0./**inclusive** create a quadtree refined quad mesh **eltset** / elm2 / itetclr / **eq** / 2
**pset**/ pelm2 / **eltset** elm2
**refine/constant/imt1/linear/element/pset,get,**pelm2**/-1.,0.,0./**inclusive/**amr** 12 refine the material 2 elements of a hex mesh , do not refine in the vertical direction **refine/constant/imt1/linear/element/pset,get,**pelm2**/-1.,0.,0./**inclusive/**amr** 3 refine the material 2 elements of a hex mesh , refine only in the vertical direction

View File

@@ -0,0 +1,22 @@
.. _refine2d :
> &nbsp_place_holder;
>
> **_REFINE2D_**
>
>> This routine deterministically refines a triangle by bisecting all the
edges and connect these bisection points to form new triangles. Thus, after
calling **REFINE2D** once, a triangle will be tessellated into 4 triangles.
>
> FORMAT:
>
>> **refine2d**

View File

@@ -0,0 +1,65 @@
.. _region :
&nbsp_place_holder;
> **_REGION_**
>
>> Define a geometric region from the set of surfaces by logically combining
the surface names.&nbsp_place_holder; A region may be removed from the
geometry by specifying the release keyword.
>>
>> To define a region, the operators **lt, le, gt, and ge** are applied to
previously defined surfaces according to the following rules.
>>
>>> **lt** -- if the surface following is a volume then lt means inside not
including the surface of the volume. If the surface is a plane or a sheet lt
means the space on the side of the plane or sheet opposite to the normal not
including the plane or sheet itself.
**le** -- if the surface following is a volume then le means inside including the surface of the volume. If the surface is a plane or a sheet le means the space on the side of the plane or sheet opposite to the normal including the plane or sheet itself.
**gt** -- if the surface following is a volume then gt means outside not including the surface of the volume. If the surface is a plane or a sheet **gt** means the space on the same side of the plane or sheet as the normal not including the plane or sheet itself.
**ge** -- if the surface following is a volume then ge means outside including the surface of the volume. If the surface is a plane or a sheet **ge** means the space on the same side of the plane or sheet as the normal including the plane or sheet itself.
The operators or, and, and not applied to surfaces mean union, intersection
and complement respectively. The parentheses operators, (and ), are used for
nesting. Spaces are required as delimiters to separate all operators and
operands. Internal interfaces should be included in exactly one region. In the
event of conflicting region commands, the one occurring last in the input
stream takes precedence.
>>>
>>> Defining a&nbsp_place_holder; region will cause the information associated
with this material region to be stored under the name of the [geometry
](../geometries.html)of the current mesh object.&nbsp_place_holder; Releasing
the&nbsp_place_holder; region will remove this information.
>
> FORMAT:
>
>> **region/**region_name/region definition
**region/**region_name/**release**
&nbsp_place_holder;
>
> EXAMPLES:
>
>> **region**/reg1/**le** sphere1 **and** ( **lt** plane1 **or** **gt** plane2
)
**region**/reg2/**le** sphere1 **and** ( **ge** plane1 **and** **le** plane2 )
**region**/reg1/**release**
&nbsp_place_holder;

View File

@@ -0,0 +1,63 @@
.. _regnpts :
&nbsp_place_holder;
> **_REGNPTS_**
>
>> Generates points in a region previously defined by the region command. The
points are generated by shooting rays through a user specified set of points
from an origin point, line, or plane and finding the intersection of each ray
with the surfaces that define the region. The point distribution is determined
by the data in ptdist. If ptdist is integer, then that many points are evenly
distributed along the ray in the region. If ptdist is real, then points are
distributed at that distance along the ray, up to a maximum of maxpenetr
points along the ray (in addition to any interface points that may be
created). note: If the ray encounters a region more than once, multiple sets
of points are layed down. Points are distributed on the regionis material
interfaces and external boundaries if the region definition includes the
interfaces or boundaries -- usually **ge** or **le** means that the region
includes the interface or boundary.
Only surface intersection points are created if ptdist is **inside**, **in**,
**out**, **outside**, or**both****. **In this case, surface points are created
regardless of region ownership of the interface or boundary surface -- if a
ray encounters a region more than once, the appropriate surface intersection
point(s) is generated for each encounter.
If another region intrudes upon the regnpts region so that the regpts region
is divided into more than one piece, points that fall inside the intruding
region are not distributed.
The variables irratio and rrz determine ratio zoning when ptdist is an
integer. Ratio zoning is on when irratio is 1; the point distribution is
adjusted so that the ratio between successive pairs of points is rrz. When
irratio is 3, ratio zoning is calculated on the longest ray; then this length
distribution is applied to all rays.
See the description of the command **surface **for a discussion of point
distributions with respect to sheet surfaces.
>
> FORMAT: **regnpts**/region name/ptdist/ifirst,ilast,istride/geom/ ray
origin/irratio,rrz,maxpenetr **regnpts/**region
name/ptdist/**pset**,**get**,setname/geom/ray origin /irratio,rrz/maxpenetr
Where ifirst,ilast,istride or **pset**,**get**,setname define the set of
points to shoot rays through.
SPECIFICALLY FOR ALLOWABLE GEOMETRIC TYPES: **regnpts**/region
name/ptdist/ifirst,ilast,istride/**xyz**
/x1,y1,z1/x2,y2,z2/x3,y3,z3/irratio,rrz/maxpenetr
Where points 1, 2, 3 define the plane to shoot rays from that are normal to
the plane. **regnpts**/region name/ptdist/ifirst,ilast,istride/
**rtz**/x1,y1,z1/x2,y2,z2/irratio,rrz/ Where points 1, 2, define the line from
which to shoot perpendicular rays **regnpts**/region
name/ptdist/ifirst,ilast,istride/
**rtp**/xcen,ycen,zcen/irratio,rrz,maxpenetr Where xcen,ycen,zcen define a point from which to shoot rays . **regnpts**/region name/ptdist/ifirst,ilast,istride/**points**/iffirst,iflast,ifstride/irratio,rrz/ maxpenetr Where the 2 point sets have the same length and rays are constructed between pairs of elements, one from each point set.
&nbsp_place_holder; [Click here for
demos](../demos/regnpts/test/html/main_regnpts.html)

View File

@@ -0,0 +1,37 @@
.. _reorder:
&nbsp_place_holder;
> **_REORDER_**
>
>> This command will reorder a MO according to a designated permutation
vector.&nbsp_place_holder; The permutation vector can be any integer vector
nnodes or nelements long with min value = 1, max value = nnodes/nelements and
no repeated entries.&nbsp_place_holder;&nbsp_place_holder; sort_key is the
permutation vector - i.e. an integer node/element based mesh object attribute.
>>
>> Reorder command will decide to reorder nodes or elements based on the
length of the permutaion vector. When elements are reordered all element
attributes are also reordered. itet and jtet arrays are also updated. When
nodes are reordered, all node based attributes are also reordered. Arrays such
as isn are also updated.
> FORMAT:
>
>> **reorder/**cmo_name/sort_key/
**reorder/ -def- **/sort_key/
>
> EXAMPLE:
>
>> &nbsp_place_holder;

View File

@@ -0,0 +1,167 @@
.. _resetpts :
&nbsp_place_holder;
> **_RESETPTS_**
>
>> Reset node values.
>>
>> * If option is **parent** (default) the parent child flags are reset. All
child points are eliminated and the connectivity list is corrected to
reference only the parent points.
>> * If option is **itp** the itp1 array is reset to indicate whether each
node is in the interior (0), on an interior interface (2), on a reflected
boundary (10), or on a reflected interface boundary (12) . Resetting itp would
be used if nodes were removed (such as with **rmmat**) leaving new boundaries
>> * If option is **cell_color** then node color (**imt**) is set based on
element color(**itetclr**).&nbsp_place_holder; There are three behaviors
possible depending on whether 0, 1 or 3 arguments are specified.
>> * If no arguments are given, then, loop through all **itetclr** values
in ascending order, and reset node **imt** to element colors, (**itetclr**).
Note that if parent/child nodes do not exist, then an interface node will have
its **imt** value set to the largest value of **itetclr** of all elements that
contain this node.
>> * If three arguments are given, then these 3 arguments are interpreted
as itetclr_min, itetclr_max, itetclr_stride.&nbsp_place_holder; Node colors
are reset only for nodes in elements that fall in the subset
selected.&nbsp_place_holder; See examples given below.
>> * If one argument is given, this argument is an node** imt** value and
only nodes with node color (**imt** ) equal to this value will be set to the
element color (**itetclr**).&nbsp_place_holder; This option loops through each
node of each element and if the node color (**imt**) is equal to the user
specified value (integer_node_color) then it is changed to the element color
(**itetclr**). This will introduce a bias since the nodes are modified in the
order of the element numbering. To give some control over the bias the user
can specify a negative value for integer_node_color. In that case, the element
loop goes from largest to smallest element number.
>
>> &nbsp_place_holder;****
>
> FORMAT:
>
>> &nbsp_place_holder;
>>
>> **resetpts**
>> remove child points
>>
>> **resetpts/parent**
>> remove child points
>>
>> **resetpts/itp**
>> set node type (**itp**) from connectivity of mesh
>>
>> **resetpts/cell_color/**
>> set all node colors (**imt**) from element colors(**itetclr**)
>>
>> **resetpts/cell_color/**istart,iend,istride
>> set all node colors (**imt**) from element colors(**itetclr**)
>>
>> **resetpts/cell_color/** integer_node_color
>> reset node **imt** for nodes with **imt** currently = integer_node_color
from the **itetclr** of an element that contains the node
>
> EXAMPLES:
>
>> &nbsp_place_holder;
>>
>> **resetpts/parent**
>> remove child points
>>
>> **resetpts/itp**
>> set node type from connectivity of mesh
>>
>> **resetpts/cell_color/**1
>> replace node color for nodes that currently have **imt** value of 1 by the
cell color of an element containing the node; this is done by looping through
all the elements in cell color order, so that the value of **imt** will be the
largest **itetclr** of the set of elements containing this node.
>>
>> **resetpts/cell_color/**
>> loop through all element colors and reset all node **imt** values
>>
>> **resetpts/cell_color/**-1
>> replace node color for nodes that currently have **imt** value of 1 by the
cell color of an element containing the node; this is done by looping through
all the elements in desending cell color order, so that the value of **imt**
will be the smallest **itetclr** of the set of elements containing this node.
>>
>> **resetpts/cell_color/**1,0,0
>> loop through all element colors and reset all node **imt** values (same as
previous example)
>>
>> **resetpts/cell_color/**1,3,1
>> loop through colors from **itetclr**=1 to **itetclr**=3
>>
>> **resetpts/cell_color/**3,1,-1**&nbsp_place_holder;**
>> loop through colors from **itetclr**=3 to **itetclr**=1
>>
>> &nbsp_place_holder;
&nbsp_place_holder;****
**&nbsp_place_holder;**
**&nbsp_place_holder;**

View File

@@ -0,0 +1,53 @@
.. _rm:
****&nbsp_place_holder;
> **_RM_**
>
>> Removes any points that are within the specified point range and specified
volume of space. This is done in Cartesian (**xyz**), cylindrical (**rtz**),
or spherical (**rtp**) coordinates. It should be noted that in cylindrical
coordinates, theta is the angle in the XY- plane with respect to the x-axis,
while in spherical coordinates theta is the angle with respect to the Z-axis
and phi is the angle in the XY-plane with respect to the X-axis. In
cylindrical coordinates the cylinder always lines up along the z axis; use the
**coordsys **command before issuing the **rm **command if the points to be
removed are not aligned with the z-axis; then issue a final **coordsys**
command to return to normal. Also note that the points that are removed become
dudded out (point type set to 21) and are not removed from the data array.
>>
>> The other options are:
>>
>> geometry -- **xyz**, **rtz**, **rtp**
ifirst,ilast,istride -- point range to search
xmin, ymin, zmin -- minimums of geometry type coordinates
xmax, ymax, zmax -- maximums of geometry type coordinates
xcen, ycen, zcen -- center of removal space for geometry
xscale, yscale, zscale -- scaling factors for geometry limits
&nbsp_place_holder;
> FORMAT:
>
>> **rm **/ geometry /ifirst,ilast,istride/xmin,ymin,zmin/xmax,ymax,zmax/
xcen,ycen,zcen / [xscale,yscale,zscale]
>
> EXAMPLE: **rm**/**xyz**/1,0,0/2.,2.,2./4.,4.,4./0.,0.,0./
**rm/rtz/**1,0,0/0.,0.,0./1.,360.,10./0.,0.,0./

View File

@@ -0,0 +1,63 @@
.. _rmmat :
> **_RMMAT_**
>
>> This routine is used to remove points that are of a specified material
type.&nbsp_place_holder; Elements with the specified material types are
flagged by setting the element material type negative.&nbsp_place_holder;
After using **rmmat**, **[rmpoints/](RMPOINT.html)**compress will delete
elements whose material type is negative and the dudded nodes.
>
> &nbsp_place_holder;** FORMAT**
>
>> **rmmat**/material number/[**all|node|element**]/[**exclusive**]
default is: **rmmat**/material number or **rmmat**/material number/**all**
removes nodes with imt = material number and removes elements with itetclr=
material number
>>
>> other options are:
>>
>> **rmmat**/material number/**node**
removes nodes&nbsp_place_holder; with imt = material number
>>
>> **rmmat**/material number/**element**
removes elements with itetclr= material number
>>
>> **rmmat**/material number//**exclusive or rmmat**/material
number/**all/exclusive**
removes everything except nodes with imt =material and removes everything
except elements with itetclr= material
&nbsp_place_holder;
&nbsp_place_holder;
&nbsp_place_holder;
>
> [Click here for demos](../demos/rmmat/test/html/main_rmmat.html)
>
>> &nbsp_place_holder;

View File

@@ -0,0 +1,56 @@
.. _rmpoint :
&nbsp_place_holder;
> **_RMPOINT_**
>
>> Removes nodes or marks nodes for removal points or removes elements from a
mesh.&nbsp_place_holder;&nbsp_place_holder; The first option sets the node
type flag&nbsp_place_holder; [itp=**ifitpdud** (21)] to indicate that the set
of nodes are treated as invisible, but does not actually remove the
nodes.&nbsp_place_holder; Elements will also be removed.&nbsp_place_holder;
If&nbsp_place_holder; **inclusive **is specified, any element containing a
marked node will be removed.&nbsp_place_holder; If&nbsp_place_holder;
**exclusive **is specified (default), any element containing a retained node
is retained.&nbsp_place_holder; The second option, **compress**, removes the
invisible nodes (i.e. those nodes whose itp1 value is 21) from the data
structure and material-wise resequences all remaining
nodes.&nbsp_place_holder; The third option, **zero_volume**, will remove
elements whose volumes are less than or equal to the specified
threshold.&nbsp_place_holder; The fourth option,** element, **will remove all
marked elements from the mesh.&nbsp_place_holder; Marked elements have a
negative value for the first entry in the itet vertex list.&nbsp_place_holder;
The fifth option will remove a specified list of elements from the
mesh.&nbsp_place_holder; The sixth option will remove elements that are
specified in a named element set from the mesh. The seventh option, **womesh
**will delete stray nodes that are not connected to any element and that are
not parent nodes.
FORMAT: **rmpoint**/ifirst,ilast,istride/[**exclusive**|**inclusive **]
**rmpoint**/**compress**/
**rmpoint/zero_volume**/threshold
**rmpoint/element**
**rmpoint/element**/tet list
**rmpoint/element/eltset,**get,esetname
**rmpoint/womesh** EXAMPLES:
&nbsp_place_holder; **rmpoint/pset, **get, pset1
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; mark all the nodes
in pset1 for removal.&nbsp_place_holder; Remove elements all of whose vertices
are members of pset1.
**rmpoint/compress**
**&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; **remove all marked nodes and correct the itet array
**rmpoint/zero_volume/**1.e-16
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
remove all elements with volumes less than 1.e-16
**rmpoint/element/**27 259 1009
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
remove the three specified elements
**rmpoint/element/eltset, **get, myeset

View File

@@ -0,0 +1,12 @@
.. _rmregion :
****&nbsp_place_holder;
> **_RMREGION_**
>
>> Removes points that lie within the specified region.
**FORMAT:** **rmregion/**region_name/

View File

@@ -0,0 +1,12 @@
.. _rmsphere:
****&nbsp_place_holder;
> **_RMSPHERE_**
>
>> Removes a sphere of points from a point distribution.
**FORMAT:** **rmsphere/**inner_radius/outer_radius/xcen,ycen,zcen/

View File

@@ -0,0 +1,20 @@
.. _rmsurf :
****&nbsp_place_holder;
> **_RMSURF_**
>
>> Removes points that lie in, on or in and on the specified surface. ioper
can be one of the following:
>>
>>> **lt** - only points in the surface are removed
**eq** - only points on the surface are removed
**le** - all points in or on the surface are removed
FORMAT: **rmsurf**/surface_name/ioper

View File

@@ -0,0 +1,101 @@
.. _rotateln :
&nbsp_place_holder;
> **_ROTATELN_**
>
>> Rotates a point distribution (specified by ifirst,ilast,istride) about a
line. The **copy** option allows the user to make a copy of the original
points as well as the rotated points, while **nocopy** just keeps the rotated
points themselves. The line of rotation defined by x1 through z2 needs to be
defined such that the endpoints extend beyond the point distribution being
rotated. theta (in degrees) is the angle of rotation whose positive direction
is determined by the right-hand-rule, that is, if the thumb of your right hand
points in the direction of the line (1 to 2), then your fingers will curl in
the direction of rotation. xcen,ycen,zcen is the point where the line can be
shifted to before rotation takes place.
If the **copy **option is chosen, the new points will have only coordinate
values (**xic, yic**, **zic**); no values will be set for any other mesh
object attribute for these points.
>>
>> Note:&nbsp_place_holder; The end points of the&nbsp_place_holder; line
segment must extend well beyond the point set being rotated.
FORMAT: **rotateln** /ifirst,ilast,istride/ [**no**] **copy** /
x1,y1,z1/x2,y2,z2/theta/xcen,ycen,zcen/
&nbsp_place_holder; EXAMPLE:
> * input.cylrot use rotateln and trans to move cylinder
* create a cylinder centered around&nbsp_place_holder; x=.5,z=.5, radius = .1
* the cylinder is aligned parallel to the y-axis.
* inside a box of width =2 , length=2 ,height=1
* the regions are air for the cylinder - solid outside the cyl.
* points are spread by surrounding the whole object with
* a cylinder shell of points and then creating rays between
* these points and the major axis of the cylinder.&nbsp_place_holder; Points
* are distributed along these rays inside the cylindrical region.
* a background rectangular grid of points is spread outside the
* cylinder.
cmo/create/3dmesh
surface/box1/reflect /box/-1.0,-1.0,0.0/ 1.0, 1.0, 1.0/
surface/h1/intrface /cylinder/ 0.5, -1.,0.5/ 0.5, 1.0, 0.5/.1/
region/H1/ le box1 and le h1 /
region/Fill/ le box1 and gt h1 /
mregion/Air/ le box1 and lt h1 /
mregion/Solid/Fill
createpts/xyz/11,11,1/-1.,-1.,1.1/1.0,1.0,1.1/,1,1,0/
pset/rays/seq/1,0,0/
regnpts/Fill/11/pset,get,rays/xyz/ 0.0,0.0,-0.1/1.0,1.0,-0.1/ &
0.0,1.0,-0.1/0,0/
* the rz command always distributes points with the z-axis as
* the axis of symmetry
* use the rotateln and trans commands to move the point
* distribution after it is created.
createpts/rtz/1,13,11/5.,0.,-1./5.,360.,1./0,1,1/0,0,0/
pset/ray1/seq/0,0,0/
rotateln/pset,get,ray1/nocopy/-100.,0.,0./100.,0.,0./-90./0.,0.,0./
trans/pset,get,ray1/0.,0.,0./0.5,0.,0.5/
regnpts/H1/3/pset,get,ray1/rtz/0.5,-1.1,0.5/0.5,1.1,0.5/0,0/
filter/1,0,0/
cmo/setatt//itp1/pset,get,rays/21
cmo/setatt//itp1/pset,get,ray1/21
setpts
connect
settets
dump/gmv/gmv.cylrot/3dmesh
finish
>
> [click here for image](../new_html/image/cylrot.gif)

View File

@@ -0,0 +1,23 @@
.. _rotatept :
&nbsp_place_holder;
> **_ROTATEPT_**
>
>> Rotates a point distribution (defined by** **ifirst,ilast,istride) about a
point xcen,ycen,zcen. phi (in degrees) is the angle of rotation of the XY
plane around the Z-axis, where positive phi is measured from the positive
x-axis toward the positive y-axis. theta (in degrees) is the angle of rotation
toward the negative z-axis. The (**no**) **copy** options are as described in
the **rotateln** command.
FORMAT: **rotatept** /ifirst,ilast,istride/ [**no**] **copy** /
xcen,ycen,zcen/theta/phi
&nbsp_place_holder;
&nbsp_place_holder; [Click here for
demos](../demos/rotatept/test/html/main_rotatept.html)

View File

@@ -0,0 +1,70 @@
.. _rz :
****&nbsp_place_holder;
> **_RZ_**
>
>> This command adds points to the mesh. It can distribute points evenly or
according to a ratio zoning method.
**xyz **specifies Cartesian coordinates.
**rtz **specifies cylindrical coordinates.
**rtp** specifies spherical coordinates.
**line **this option implies xyz and will distribute n1 nodes from (xmin,ymin,zmin) to (xmax,ymax,zmaz)
When using the rtz or rtp coordinate systems the center is at **(**0,0,0). Use
a **trans** command to move the center. For the **rtz **command, minimum and
maximum coordinates are the triplets: radius from the cylinder's axis, angle
in the xy-plane measured from the x-axis and height along the z-axis. For the
**rtp **command minimum and maximum coordinates are the triplets: radius from
the center of the sphere axis, angle in the zy-plane measured from the
positive z-axis and the angle in the xy-plane measured from the positive
x-axis (see II.a.11). Note that the **rtz **always results in a (partial)
cylinder of points centered around the z axis. Use the **rotateln **command to
orient the cylinder. For example, to center the cylinder around the y axis,
specify the x axis as the line of rotation in the **rotateln **command.
>>
>> ni,nj,nk number of points to be created in each direction.
xmin,ymin,zmin minimums for coordinates.
xmax,ymax,zmax maximums for coordinates.
iiz,ijz,ikz if =0 then mins and maxs are used as cell centers
if =1 then mins and maxs are used as cell vertices
iirat,ijrat,ikrat ratio zoning switches (0=off,1=on)
xrz,yrz,zrz ratio zoning value - distance is multiplied by this value for each
subsequent point.
&nbsp_place_holder;
>
> FORMAT:
**rz**/**xyz**|**rtz**|**rtp**|ni,nj,nk/xmin,ymin,zmin/xmax,ymax,zmax/
iiz,ijz,ikz/[iirat,ijrat,ikrat/xrz,yrz,zrz/]
**rz/line**/np///xmin,ymin,zmin,xmax,ymax,zmax/iiz,ijz,ikz/
&nbsp_place_holder; EXAMPLES:
**rz**/**xyz**/**5,3,10**/**0.,2.,0.**/**5.,6.,2.**/**1,1,1**/
This results in a set of 150 points, five across from x=0. to x=5., 3 deep
from y=2. to y=6. and 10 high from z=0. to z=2.
**rz/rtz/4,6,11**/**0.,0.,0.**/**3.,360.,10.**/**1,0,1**/
This results in 264 points arranged around the z- axis. There are 3 rings of
points at distances r=1., r=2. and r=3. from the z-axis. There are 11 sets of
these three rings of points and heights z=0., z=1., z=2.,...,z=10. In each
ring there are 6 points where each pair of points is separated by 60°; note
that ijz=0 requests that points be placed at cell centers, hence the first
point will be at 30° not at 0°. Corresponding to r=0, there will be 6
identical points at 11 intervals along the z-axis at heights z=0., z=1.,
z=2.,...z=10. **Filter** should be used to remove these duplicate points.

View File

@@ -0,0 +1,117 @@
.. _rzamr :
**_RZAMR_**
> **RZAMR **uses an octree type refinement applied to an existing hexahedral
mesh to all nodes in a specified region.&nbsp_place_holder; No additional
elements are kept,&nbsp_place_holder; the intention is that the resulting node
distribution will be passed to** **connect to generate a tetrahedra mesh.
>
> FORMAT:
>
>> **rzamr**/region_name/number_of_levels
*&nbsp_place_holder; region_name&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; name of region to refine.&nbsp_place_holder; If blank,&nbsp_place_holder; all regions will be refined.&nbsp_place_holder; An element will be refined if any node of the element is in the specified region.
*&nbsp_place_holder; number_of_levels&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; is the number of times the refinement will be performed.&nbsp_place_holder; After each level, the code will determine which of the new nodes are in the specified region and will refine the associated elements.&nbsp_place_holder; Default is 1.
&nbsp_place_holder;
>
> EXAMPLES:
>
>> **rzamr**&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; refine
the entire mesh
**rzamr** /r1/3&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; refine elements with nodes in the region r1 three times
>>
>> examples of use of **rzamr**:
>>
>> *create the hex mesh
cmo/create/cmo///hex
* define geometry
surface/inside/reflect/box/0,0,0/1,1,1
surface/diag/intrface/plane/0,0,0/1,0,1/1,1,1
region/lin/ le inside and ge diag /
region/rin/ le inside and lt diag /
mregion/mlin/ le inside and gt diag /
mregion/mrin/ le inside and lt diag /
* distribute nodes
quadxyz/2,2,2/0.,0.,0./1.,0.,0./1.,1.,0./0.,1.,0./ &
0.,0.,1./1.,0.,1./1.,1.,1./0.,1.,1./
* set node types and materials
setpts
* connect up the hex mesh
rzbrick/xyz/2,2,2/1,0,0/connect
* refine the hex mesh
rzamr/lin/1
rzamr/rin/3
* create the tet mesh
cmo/create/cmot///tet
* define geometry again for tet mesh
surface/inside/reflect/box/0,0,0/1,1,1
surface/diag/intrface/plane/0,0,0/1,0,1/1,1,1
region/lin/ le inside and ge diag /
region/rin/ le inside and lt diag /
mregion/mlin/ le inside and gt diag /
mregion/mrin/ le inside and lt diag /
* copy in the nodes from the hex mesh to the tet mesh
copypts/cmot/cmo
cmo/select/cmot
cmo/release/cmo
* reset node types and materials so that setpts will use
* geometry to figure out the correct values
cmo/setatt/cmot/itp/1,0,0/0
cmo/setatt/cmot/imt/1,0,0/0
* set node types and materials
setpts
* connect up the tet mesh
connect
* set element materials
* and create parent/child nodes on interfaces
settets
dump/gmv/gmvtet
finish
&nbsp_place_holder;
&nbsp_place_holder;

View File

@@ -0,0 +1,67 @@
.. _rzbrick :
&nbsp_place_holder;
> **_RZBRICK_**
Builds a brick mesh and generates a nearest neighbor connectivity matrix. This
command is similar to the rz command format except here we have symmetry flags
to input. A second format specifies that a mesh be created and connected.
**xyz **specifies Cartesian coordinates.
**rtz **specifies cylindrical coordinates.
**rtp **specifies spherical coordinates.
ni,nj,nk number of points to be created in each direction.
xmin,ymin,zmin minimums for coordinates.
xmax,ymax,zmax maximums for coordinates.
iiz,ijz,ikz&nbsp_place_holder; if =0 then mins and maxs are used as cell
centers if =1 then mins and maxs are used as cell vertices iirat,ijrat,ikrat
ratio zoning switches (0=off,1=on)
xrz,yrz,zrz ratio zoning value - distance is multiplied by the value for each
subsequent point.
name name of pset containing starting point number
isym,jsym,ksym symmetry flags - not documented
Warning:&nbsp_place_holder; This command does not create a 2D grid, it has mem
errors.&nbsp_place_holder; **rzbrick**/**xyz/**5,10,1/0. 0. 0./10. 20. 0.
/1,1,1
for 2D this will work:
&nbsp_place_holder; **cmo create **cmo1///quad
&nbsp_place_holder; **quadxy **5 5/ 0. 0. 0. / 20. 0. 0./20. 20. 0. / 0. 20.
0.
&nbsp_place_holder; **rzbrick**/**xyz/**5,5,1/1,0,0/**connect**
&nbsp_place_holder; **dump gmv **quad5x5.gmv
&nbsp_place_holder;
&nbsp_place_holder; FORMAT:
**rzbrick**/**xyz**|**rtz**|**rtp**/ni,nj,nk/xmin,ymin,zmin/xmax,ymax,zmax/
iiz,ijz,ikz/[iirat,ijrat,ikrat/xrz,yrz,zrz/isym,jsym,ksym]
or
**rzbrick/xyz|rtz|rtp/**ni,nj,nk/**pset,get,**name/**connect/**
Use this option with** quadxyz **to connect logically rectangular grids.
EXAMPLE: **rzbrick/xyz**/3,2,3/0.,0.,0./1.,1.,1./1,1,1
creates a hex grid 2x1x2 cells in the unit cube
**quadxyz**/5,7,5/0.,0.,0./1.,0.,0./1.5,0.5,2.0/.5,.2,2.5/
-1.,1.5,0./2.0,0.,0.0/2.1,1.9,2.4/-0.2,1.8,2.3/
**setpts**
**rzbrick/xyz**/5,7,5/1,0,0/**connect**
creates a hex grid inside the** **hexahedral specified by the 8 corners passed
to** quadxyz**

View File

@@ -0,0 +1,185 @@
.. _rzran :
****&nbsp_place_holder;
> **_RZRAN_**
>
>> This routine is used to add random points with a given target spacing to
the region of space defined by the input minimum and maximum coordinate values
using the specified geometry (xyz, rtz, or rtp), and the given local origin
(specified in xyz coordinates). Within the bounding geometry, the points are
distributed uniformly in space, with the average separation targeted at the
input value of the spacing.&nbsp_place_holder; Near the boundaries of the
geometry, the uniform distribution is modified slightly in order to create a
well defined outer boundary.&nbsp_place_holder; Points are added separately on
the corners, edges, and surfaces of the bounding geometry, uniformly randomly
distributed with the same target spacing on each of these boundary objects.
Points in the interior are offset by the sepcified edge protection distance
from the exterior.&nbsp_place_holder; This separation helps LaGriT's connect
algorithm avoid creating artificial "pits" in the interface surfaces.
&nbsp_place_holder;
> FORMAT
> > **rzran** / **cgeom **/ **spacing** / rmin1,rmin2,rmin3 /
rmax1,rmax2,rmax3&nbsp_place_holder; & [/ xoff,yoff,zoff / edgedist /
ranseed1,ranseed2 ]
>>
>> while only **rzran** is required (will result in a single point at the
origin), it is recommended that you use as the minimal command:** rzran** /
**cgeom **/ spacing /&nbsp_place_holder; rmin1,rmin2,rmin3 / rmax1,rmax2,rmax3
>>
>> **cgeom**
&nbsp_place_holder;&nbsp_place_holder; geometry label (same convention as for
rz)
&nbsp_place_holder;&nbsp_place_holder; allowed values: xyz|rtp|rtz
&nbsp_place_holder;&nbsp_place_holder; default: _xyz _if not present, error
return if not allowed
>>
>> **spacing**
&nbsp_place_holder;&nbsp_place_holder; target separation between the random
points
&nbsp_place_holder;&nbsp_place_holder; allowed values: spacing>0
&nbsp_place_holder;&nbsp_place_holder; default: spacing=1
>>
>> rmin1,rmin2,rmin3 / rmax1,rmax2,rmax3
&nbsp_place_holder;&nbsp_place_holder; minimum and maximum coordinate values
&nbsp_place_holder;&nbsp_place_holder; allowed values:
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; all geometries: rmax.ge.rmin
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; **rtz:** rmin1.ge.0, rmax2-rmin2.le.360
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; **rtp**: rmin1.ge.0, rmin2.ge.0, rmax2.le.180,
rmax3-rmin3.le.360
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; defaults: rmin=0,
rmax=rmin
>>
>> xoff,yoff,zoff (specified in xyz coordinate system)
&nbsp_place_holder;&nbsp_place_holder; local origin shift
&nbsp_place_holder;&nbsp_place_holder; defaults: 0
>>
>> edgedist
&nbsp_place_holder;&nbsp_place_holder; edge protection distance aka interior-
exterior offset
&nbsp_place_holder;&nbsp_place_holder; default: spacing/2
&nbsp_place_holder;&nbsp_place_holder; recommended value: spacing/2
>>
>> ranseed1,ranseed2
&nbsp_place_holder;&nbsp_place_holder; seeds for the random number generator
&nbsp_place_holder;&nbsp_place_holder; defaults: -1 (do not re-seed,
recommended)
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; if either seed is .le. zero, the seeds are ignored
&nbsp_place_holder;&nbsp_place_holder; recommended values if reseed:
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; large-ish integers, ranseed1>ranseed2>0, ranseed2 odd.
&nbsp_place_holder;&nbsp_place_holder; No initial seeds are needed, and
repeating the command
&nbsp_place_holder;&nbsp_place_holder; with the identical parameters and seeds
should result
&nbsp_place_holder;&nbsp_place_holder; in the identical point distribution.
Repeating the
&nbsp_place_holder;&nbsp_place_holder; command with no seeds specified should
result in
&nbsp_place_holder;&nbsp_place_holder; different point locations with the same
distribution.
&nbsp_place_holder;
> EXAMPLES
>
>> **rzran** / **xyz** / .1 / 0 0 0 / 1 1 1 /
&nbsp_place_holder;&nbsp_place_holder; random points with target spacing 0.1
in a 1x1x1 box
>>
>> **rzran**/** rtz** / .1 /&nbsp_place_holder; 0,0,0 / 1,180,360 / 2,3,4 /
0.2
&nbsp_place_holder;&nbsp_place_holder; random points with target spacing 0.1
in a cylinder
&nbsp_place_holder;&nbsp_place_holder; of radius 1 centered at xyz=(2,3,4) and
with an
&nbsp_place_holder;&nbsp_place_holder; edge protection distance of 0.2
>>
>> **rzran/ rtp** / .5 /&nbsp_place_holder; 5,0,0 / 5,180,360
/&nbsp_place_holder; , ,&nbsp_place_holder; /&nbsp_place_holder; / 98765 4321/
&nbsp_place_holder;&nbsp_place_holder; random points with target spacing 0.5
on the surface
&nbsp_place_holder;&nbsp_place_holder; of a sphere of radius 5 centered at the
origin
&nbsp_place_holder;&nbsp_place_holder; with new random seeds
>
> CAVEATS
>
>> Filter should be used afterwards to remove possibly duplicate points. The
algorithm to insure the points are uniformly distributed in space is not
clever about handling values outside the allowed range for** rtz** and **rtp
**geometries and so it simply truncates them to the allowed range if possible
or aborts. Most importantly, angles are in degrees and theta for the rtp
geometry runs from 0 to 180 degrees, with 0 degrees being the +z axis. It does
know about the angular periodicity and there should be only the "corner" point
artifacts of, eg, the +x axis being the origin of phi (rtp) or theta (rtz) if
a full 360 degrees for these two variables in their respective coordinate
systems is used.

View File

@@ -0,0 +1,58 @@
.. _rzs :
> **_RZS_**
Builds a sphere by generating coordinates of points and also modifies zoning
by ratio-zoning point distributions. See the** rz **command for more details.
The** **itype flag defines what type of sphere will be generated.
itype=1 generates a sphere by gridding the faces of a cube and then projecting
the vertices onto a sphere. The number of nodes per shell is of the form
6*i**2.
itype=2 generates a sphere by subdividing an icosahedron placed on the surface
of a sphere.
Icosahedralm gridding is made up of 10 diamonds per shell. Each diamond is
made up of n**2 nodes (where n must be of the form 2**i+1). There are 2 nodes
(the poles of the sphere) at which 5 diamonds meet and 10 nodes where 3
diamonds meet; hence there are a minimum of 12 nodes per shell. The number of
nodes per shell can be 12, 42, 162, 642,...
itype= 1 or 2 or diamond distributes points only, call **connect** to generate
connectivity information.
nr is the number of radial shells
npt is the upper limit of the number of points in a shell
itype=8 generates a hexahedral icosahedron grid. This option distributes
points and generates the grid connectivity data structures.
xirad,xorad are the inner and outer radii of the sphere. For itype=8 reverse
inner and outer radii.
xcen,ycen,zcen are the coordinates of the center of the sphere
iz&nbsp_place_holder; if =0 then mins and maxs are used as cell centers
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; if
=1 then mins and maxs are used as cell vertices
irat is ratio zoning switch (0=off,1=on)
rz is ratio zoning value - distance is multiplied by the value for each
subsequent point.
itype = diamond generates the points for one diamond of the icosahedron
&nbsp_place_holder; FORMAT:
**rzs/**itype/nr,npt,xirad,xorad/xcen,ycen,zcen/iz/irat,rz/
&nbsp_place_holder; EXAMPLES: **rzs**/8/5/162/1.0,0.5/0.,0.,0./1,0,0.0/
rzs/2/5/162/0.5,1.0/0.,0.,0./1,0,0.0/
rzs/diamond/5/162/1,.5/0,0,0/1,0,0/

View File

@@ -0,0 +1,148 @@
.. _rzv:
&nbsp_place_holder;
> **_RZV_**
> > This routine is used to ratio zone the region of space spanned by the
input number ni of copies of the input vector vij away from the initial point
v0j using the desired coordinate system. No attempt is made to insure that the
3 vectors are independent.
For ratio_method = component (default), the j-th component of the i-th vector
vij is reduced by&nbsp_place_holder; rij&nbsp_place_holder; after the ki -th
step in the i-th direction away from the initial point.&nbsp_place_holder; For
this ratio_method the ratio flags fi are not used.&nbsp_place_holder; In this
case an initial step of 1 for the j-th component of the i-th direction would
become, for rij&nbsp_place_holder; =&nbsp_place_holder; 1/2, a step of the
j-th component of the i-th direction of 1/2 at ki =&nbsp_place_holder; 1, 1/4
at&nbsp_place_holder; ki =&nbsp_place_holder; 2, 1/8 at&nbsp_place_holder; ki
=&nbsp_place_holder; 3, 1/16 at ki =&nbsp_place_holder; 4,etc.
For ratio_method = vector and fj =1 (the default), the j-th vecor is reduced
by rij&nbsp_place_holder; after the ki -th step in the i-th
direction.&nbsp_place_holder; In this case an initial step of 1 in the j-th
direction would become, for&nbsp_place_holder; rij&nbsp_place_holder;
=&nbsp_place_holder; 1/2, a setp in the j-th direction of 1/2 at ki
=&nbsp_place_holder; 1, 1/4 at&nbsp_place_holder; ki =&nbsp_place_holder; 2,
1/8 at&nbsp_place_holder; ki =&nbsp_place_holder; 3, 1/16 at ki
=&nbsp_place_holder; 4,etc.
For ratio_method = vector and fj =0, the j-th vecor is reduced by [1 -
(1-rij&nbsp_place_holder; )*2/(ki +&nbsp_place_holder; 1)] after the ki -th
step in the i-th direction.&nbsp_place_holder; In this case an initial step of
1 in the j-th direction would become, for&nbsp_place_holder;
rij&nbsp_place_holder; =&nbsp_place_holder; 1/2, a step in the j-th direction
of 1/2 at ki =&nbsp_place_holder; 1, 1/3 at&nbsp_place_holder; ki
=&nbsp_place_holder; 2, 1/4 at&nbsp_place_holder; ki =&nbsp_place_holder; 3,
1/5 at ki =&nbsp_place_holder; 4,etc.
>
> FORMAT:
**rzv/xyz**|**rtz**|**rtp** /
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder; [ n1,n2,n3
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
/v11,v12,v13/v21,v22,v23/v31,v32,v33
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pl
ace_holder; /v01,v02,v03
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
/r11,r12,r13/r21,r22,r23/r31,r32,r33
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
/**component**|**vector**
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_
place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
/f1,f2,f3]
default = **xyz**
default = 0:&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder; ni, vi, v0j
default = 1:&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_pla
ce_holder;&nbsp_place_holder; rij
default = **component** EXAMPLES: spiral of points
**rzv/rtz**/n1,0,0/.1,10.,1/ , , / , , / , , /1.1,1,.9/ sc (simple cubic)
point distribution **rzv/xyz**/n1,n2,n3/1,0,0/0,1,0/0,0,1/ &nbsp_place_holder;
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder; same as
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;
**rz/xyz/**n1+1,n2+1,n3+1/0,0,0/n1,n2,n3/1,1,1
bcc (body centered cubic) point distribution
**rzv/xyz/**n1,n2,n3/.5,.5,.5/.5,.5,-.5/.5,-.5,-.5/
compare the two command sequence (different bounding box)
**rz/xyz/**n1+1,n2+1,n3+1/0,0,0/n1,n2,n3/1,1,1
**rz/xyz/**n1&nbsp_place_holder; ,n2&nbsp_place_holder; ,n3&nbsp_place_holder; /0,0,0/n1,n2,n3/0,0,0 fcc (face centered cubic) point distribution **rzv/xyz**/n1,n2,n3/.5,.5,0/0,.5,.5/.5,0,.5/
compare the four command sequence (different bounding box)
**rz/xyz/**n1+1,n2+1,n3+1/0,0,0/n1,n2,n3/1,1,1
**rz/xyz**/n1&nbsp_place_holder; ,n2&nbsp_place_holder; ,n3+1/0,0,0/n1,n2,n3/0,0,1
**rz/xyz/n**1&nbsp_place_holder; ,n2+1,n3&nbsp_place_holder; /0,0,0/n1,n2,n3/0,1,0
**rz/xyz**/n1+1,n2&nbsp_place_holder; ,n3&nbsp_place_holder; /0,0,0/n1,n2,n3/1,0,0 hexagonal lattice of points in x,y plane, repeated in z direction **rzv/xyz**/n1,n2,n3/1,0,0/.5,0.866,0/0,0,1/ diamond point distribution (two command sequence) **rzv/xyz**/n1,n2,n3/.5,.5,0/0,.5,.5/.5,0,.5/ &nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder; **rzv/xyz**/n1,n2,n3/.5,.5,0/0,.5,.5/.5,0,.5/.25,.25,.25 compare the eight command sequence (different bounding box) **rz/xyz**/n1+1,n2+1,n3+1/0,0,0/n1,n2,n3/1,1,1 &nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;** rz/xyz/**n1&nbsp_place_holder; ,n2&nbsp_place_holder; ,n3+1/0,0,0/n1,n2,n3/0,0,1
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder; **rz/xyz**/n1&nbsp_place_holder; ,n2+1,n3&nbsp_place_holder;
/0,0,0/n1,n2,n3/0,1,0
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbs
p_place_holder; **rz/xyz**/n1+1,n2&nbsp_place_holder; ,n3&nbsp_place_holder;
/0,0,0/n1,n2,n3/1,0,0
**rz/xyz**/n1+1,n2+1,n3+1/0.25,0.25,0.25/n1+.25,n2+.25,n3+.25/1,1,1
**rz/xyz**/n1&nbsp_place_holder; ,n2&nbsp_place_holder; ,n3+1/0.25,0.25,0.25/n1+.25,n2+.25,n3+.25/0,0,1
**rz/xyz/**n1&nbsp_place_holder; ,n2+1,n3&nbsp_place_holder; /0.25,0.25,0.25/n1+.25,n2+.25,n3+.25/0,1,0
**rz/xyz**/n1+1,n2&nbsp_place_holder; ,n3&nbsp_place_holder; /0.25,0.25,0.25/n1+.25,n2+.25,n3+.25/1,0,0 &nbsp_place_holder;hcp (hexagonal close pack) point distribution&nbsp_place_holder; (two command sequence) **rzv/xyz**/n1,n2,n3/1,0,0/.5,0.866,0/0,0,1/
**rzv/xyz**/n1,n2,n3/1,0,0/.5,0.866,0/0,0,1/.5,0.289,.5/ nice 2-d distribution of points in a circle of radius 1 **rzv/xyz/**10,60,0/0.1,0,0/0,60,0/0,0,1/0,0,0/1,0.5,1/1,1,1/1,1,1/**vector**/0,0,0
&nbsp_place_holder;&nbsp_place_holder; CAVEATS -
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; * filter should be used afterwards to remove possibly
duplicate points
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; * this can create some really bizzare point distributions
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; * mistyped input after "rzv/[cgeom]" always returns
successful point addition,
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; but may be very different than desired
&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&nbsp_place_holder;&n
bsp_place_holder; * ratio_flag might better be a scalar or a matix, and its
use might want to be extended to ratio_method=component.

View File

@@ -0,0 +1,26 @@
.. _scale :
&nbsp_place_holder;
> **_SCALE_**
Scale a point distribution specified by** **ifirst,ilast,istride according to
the scale factors iscale,jscale, and kscale.&nbsp_place_holder; One can
substitute the syntax** pse**t get pset_name&nbsp_place_holder; for the
ifirst, ilast, istride variable to access a pset.&nbsp_place_holder; The
letters i,j, and k in the scale factors correspond to coordinates specified by
one of the geometry types [**xyz** (Cartesian), **rtz** (cylindrical), **rtp**
(spherical)].&nbsp_place_holder;&nbsp_place_holder; For example, if geometry =
**rtz** then iscale = radial coordinate, jscale = theta coordiante, and kscale
= z coordinate.
If geometry = **rtp** the iscale = radial coordiante, jscale = theta
coordinate and kscale = phi coordinate. If the scaling option is **relative**
then the scaling factors are unitless multipliers with reference to some
geometric center (xcen,ycen,zcen).&nbsp_place_holder;&nbsp_place_holder; If
the scaling option is **absolute** then the scaling factors are constants
added on to the existing coordinates.&nbsp_place_holder; That is, absolute is
really a translation rather than a rescale. **FORMAT:** **scale**/ifirst,ilast
,istride/**absolute**|**relative**/xyz/|rtz|rtp/iscale,jscale,kscale/xcen,ycen
,zcen

View File

@@ -0,0 +1,70 @@
.. _setpts :
> **_SETPTS_**
Sets point types and material regions by calling** surfset **and** regset**
routines.** **Generate constraint table. The material (imt1) attribute is set
based on the **mregion** commands. Interior and external boundary nodes should
be assigned to exactly one **mregion**; these nodes will be assigned an
**imt1** value that corresponds to the **mregion.** A node which is on an
interface will be assigned to any** mregion **and will be given an **imt1**
value of "**interface**" (an integer equal to one more than the number of
material regions.) Node types are assigned based on whether a node is on a
surface and what type the surface(s) is.
This command must be executed before **connect.** FORMAT: **setpts**
**setpts/no_interface**
This allows one to set the imt values of nodes without getting any nodes
labeled imt=interface. This is useful if you do not want settets to create
parent child chains at interface points. The actual imt value given may be
determined by roundoff error so should not be used in cases where there are a
large number of interface points.&nbsp_place_holder; It is useful for setting
imt values of an rzbrick mesh in which interface points only occur due to the
coincidental point very near the geometry defining surface.
**setpts**/**closed_surfaces**/**reflect**
The **closed_surfaces** option works with geometries in which all regions and
mregions are defined by closed surfaces. The nodes that fall on more than one
surface are labeled as interface nodes. Nodes which fall on exactly one
surface are labeled external reflective boundary nodes. Nodes which are
external boundary interface nodes are not labeled correctly and
**resetpts/itp** must be called to correct the point types. An input file
using the closed_surfaces option might look like: cmo/create/s1///tri
read/avs/surfaces
cmo/create/3dmesh
surface/surface1/intrcons/sheet/s1
copyts/3dmesh/s1/
cmo/release/s1/
cmo/create/s2///tri/
read/avs/surf2.avs
surface/surface2/intrcons/sheet/s2
copypts/3dmesh/s2
cmo/release/s2/
region/r1/le surface1
region/r2/le surface2
mregion/mr1/lt surface1
mregion/mr2/lt surface2
setpts/closed_surfaces/reflect
connect
settets
resetpts/itp

View File

@@ -0,0 +1,78 @@
.. _setsize :
> **_SETSIZE_**
> > **setsize** will set the mesh object attributes
xmin,xmax,ymin,ymax,zmin,zmax from the xic,yic,zic values of all 'real' points
(dudded and merged points will be ignored).&nbsp_place_holder; It also sets
epsilon, epsilona and epsilonv as follows:&nbsp_place_holder; setsize is
called internally by LaGriT commands that add nodes to the
mesh;**[copypts](COPYPTS.html)**,**[ createpts](createpts.html)**,
**[regpnts](REGNPTS.html)**, **[recon](RECON.html)**,**[scale](SCALE.html)**,
**[translate](TRANS.html)**
epsilonv=abs(xmax-xmin)*abs(ymax-ymin)*abs(zmax-zmin)*epsilonr*1000.
epsilona=((xmax-xmin)**2+(ymax-ymin)**2+(zmax-zmin)**2)*epsilonr*1000.
epsilonr is set at initialization time by:
>>
>>> > > x2=one
do i=1,1000
>>>>>
>>>>>> x2=x2/two
x1=one+x2
if(x1.le.one) go to 11
>>>>>
>>>>> enddo
11 epsilonr=x2*2.
where the values of 'one' and 'two' are obtained from the include file
'consts.h'.
The command**[ cmo/printatt ](cmo/cmo_printatt.html)**can be used to view any
of these cmo attributes:
e.g. **cmo/printatt**//**xmax**
The programmer interface is the subroutine setsize (see Section e.7)
The variables epsilonl, epsilona and epsilonv are mesh object attributes;
hence they may be different for all meshes in a given run.&nbsp_place_holder;
epsilona, epsilonv and epsilon1 may be set by the user with the
**[cmo/setatt](cmo/cmo_setatt.html)** command.&nbsp_place_holder; They also
will be written to LaGriT dumps and subsequently will be read in at restart.
The variables in consts.h (epsilon and epsilonr) are machine and run
dependent. They are not written to LaGriT dumps and there is only one copy per
run.
&nbsp_place_holder; FORMAT: **setsize**
if epsilonv is very small epislonvis set to epsilona
epsilon1 is set by a call to set_epsilon
epsilon1 is set to the square root of epsilona unless this number would be too
small in which case epsilon1 is to (( xmax-xmin) + (ymax-ymin) + (zmax-zmin))
* 1.e=8/3
Many LaGriT algorithms use epsilon1; for example, if a node falls on a
interface or boundary surface.&nbsp_place_holder; It uses epsilonv to
determine if a node can be connected.&nbsp_place_holder; Errors from
**setpts** and **connect** may result if inconsistant or wrong values of
epsilons are used.
&nbsp_place_holder;
&nbsp_place_holder;

View File

@@ -0,0 +1,41 @@
.. _settets :
&nbsp_place_holder;
> **_SETTETS_**
Set element color** (**itetclr) and create child points at interior
interfaces. This command can also be used to set the node color from the
element color.
If there are no options **settets** and **settets/color_tets** sets the color
of all elements using the following tests. If the element contains a non-
interface point, the element color is set to this value. If the element is
comprised entirely of interface points, the centroid of the element is
calculated and the material region containing this point is determined; the
element color is set to this material. If the centroid of the element is not
in any material region, the centroid must be on an interface surface. In this
case all vertices of the element are examined and the material common to all
vertices is selected as the element color.
**settets**/ **parents** has exactly the same behavior as **settets **except that existing values of itetclr are used for elements containing non-interface nodes.
**geometry**&nbsp_place_holder; sets the&nbsp_place_holder; element color&nbsp_place_holder; based on the material region containing the centroid of the element for all elements; existing values of itetclr are ignored.
**color_points**&nbsp_place_holder; sets the node material (imt1) from the element color (itetclr); existing values of itetclr are not changed.
**settets/newtets **has the same behavior** **as** settets **except that existing positive values of itetclr are not changed.
**settets/normal** assigns the itetclr array of a triangle mesh to an integer value depending on the normal vector direction.&nbsp_place_holder; There are 26 possible direction that correspond to the 6 faces, 12 edges and 8 corners of a cube.&nbsp_place_holder; In general most triangles will be assigned one of 6 values which correspond to the 6 sectors which are within 45 degrees of the 6 unit vectors: 1 0 0 , 0 1 0 , 0 0 1, -1 0 0, 0 -1 0, 0 0 -1
NOTE:&nbsp_place_holder; Valid only for triangle mesh.
&nbsp_place_holder;
&nbsp_place_holder; FORMAT: **settets**
**settets**/**parents**
**settets**/**geometry**
**settets**/**color_tets**
**settets**/**color_points**
**settets/normal**

View File

@@ -0,0 +1,128 @@
.. _smooth :
&nbsp_place_holder;
> **_SMOOTH_**
The **smooth** command smooths 2D or 3D mesh objects. For adaptive smoothing
see the **[radapt](RADAPT.html)** command. **smooth **takes a 2D or 3D mesh
object and moves nodes, without changing the connectivity of the grid, in
order to improve the aspect ratios and distribution of elements in the mesh.
An optional control value between zero and one for options **esug**, **mega**,
**geometry**, **elliptical** and **random** affects the amount of node
movement. The default (control =0.) results in the standard smoothing scheme.
Increasing control towards 1. causes the scheme to be progressively more
controlled (moving the mesh less), until at control =1., there is no mesh
movement whatsoever.
By default, the second argument is **position**. This results in the positions
of the nodes being changed. (Other options will be added in the future for
implementation of smoothing using node velocities.)
There are nine smoothing algorithms available. **esug**, **elliptic** and
**random**&nbsp_place_holder; are for 2D grids, **laplace**, **aspect** and
**lpfilte**r&nbsp_place_holder; for 2D or 3D grids, **mega, network** and
**geometry **are for 3D grids:
1. **esug** --- Elliptic Smoothing for Unstructured Grids. This is the default
for 2D mesh objects. It can only be used on triangular 2D mesh objects. (Ref.:
Ahmed Khamayseh and Andrew Kuprat, "[Anisotropic Smoothing and Solution
Adaption for Unstructured Grids](../../pdfs/ahmandrew1.pdf)", Int. J. Num.
Meth. Eng., Vol. 39, pp. 3163-3174 (1996).)
2.**elliptic** --- Similar to esug but the 'guards' which prevent a grid from
folding are turned off. (Thus esug is preferred.)
3. **random **-- a node's position is set to a randomly weighted average
position of its neighbors. 'Guards' keep the elements from inverting.
4. **laplace** ---On a 3D tetahedral mesh moves a node to the average position
of its neighbors where neighbor is defined as the set of nodes connected to
the candidate node by an edge where the node types (itp1) and node constraints
(icr1) are a 'subset' of the candidate node type and
constraints.&nbsp_place_holder; A node will not be moved if the result is an
inverted element. The following controls may be supplied:
&nbsp_place_holder;
> rlxwt default(0.5)
> weight for underrelaxed Laplacian smothing
> ntimes default(5)
> number of smoothing iterations
> nwttry default(3)
> number of attempts to not tangle the mesh by halving the smoothing weight.
> useisn default(1)
> 1 means interface nodes are smoothed based alonga multimaterial edge with
all the same materials as the candidate node. 0 means interface nodes are
smoothed based on all interface neighbors
> extrnbr default(**inclusive**)
> **inclusive** means do not restrict neighbors&nbsp_place_holder;
**exclusive** means restrict neighbors to nodes in pset&nbsp_place_holder;
&nbsp_place_holder;5.** aspect**---Adjusts node positions such that the aspect
ratio of the elements is improved.&nbsp_place_holder; The default damage
tolerance for** smooth//****aspect** is infinity, so it can be used as a
general smooth which has the effect of improving worst aspect ratio. 6.
**lpfilter**---This smooths surface networks by a low-pass filtering of the
coordinate data.
(filtdeg default = 30, k_pb default = 0.1) &nbsp_place_holder;7**. mega ---**
Minimum Error Gradient Adaption. This option creates a smoothed grid which is
adapted to the standard function with constant Hessian f(x,y,z)=x2+y2+z2. Can
be used on hybrid 3D meshes and guards against mesh folding. Adaption to this
function creates a uniform isotropic mesh.&nbsp_place_holder; The code
variable **maxiter_sm** (default=25) controls the maximum number of **mega**
iterations.&nbsp_place_holder; The value of **maxiter_sm** may be changed
using the **[assign](ASSIGN.html)** command
(**assign**///**maxiter_sm**/10).&nbsp_place_holder; (Ref.: Randolph E. Bank
and R. Kent Smith, "Mesh Smoothing Using A Posteriori Error Estimates", SIAM
J. Num. Anal. tol. 34, Issue 3, pp. 979-997 (1997).)
8. **geometry **--- Geometry ("plump element") adaption. Default for 3D. Can
be used on hybrid 3D meshes It uses the **mega** algorithm but retains only
the leading geometry term; the term containing the Hessian has been dropped.
This algorithm guards against mesh folding.
9. **network** --- This option smooths the surface network of a 3D tetrahedral
grid.&nbsp_place_holder; Volume nodes are not moved.&nbsp_place_holder; The
material volumes are conserved.&nbsp_place_holder; By default a check is
performed to verify that no elements are inverted; the user may turn this
check off with the **nocheck** option.&nbsp_place_holder; This option will not
work correctly (will not conserve volume) on grids which have two areas of a
material connected at a single node or edge; each material region must have
face connectivity.&nbsp_place_holder; The number of iterations is controlled
by the niter argument (default is 10) and the weight argument controls the
amount of movement (from 0. to 1. default is 1.).&nbsp_place_holder; Combining
this type of smooth with volume smoothing will help to avoid element
inversions. FORMAT: **smooth**/**position**/**esug**|**mega**|**geometry**|**e
lliptic|**|**random**/ [ifirst,ilast,istride ]/[control]
**smooth**/**position**/**lpfilter/**/ [ifirst,ilast,istride] /[filtdeg]/[k_pb]/**network** **network** smoothing applies to a network of curves in 2D or 3D, or to a network of surfaces in 3D.&nbsp_place_holder; The materiality of the cells (if any) is ignored. **smooth**/**position**/**aspect**//[ifirst,ilast,istride/toldamage]
**smooth**/**position/laplace/**[ifisrt,ilast,istride]/[rlxwt]/[ntimes]/[nwtty]/[useisn]/[extrnbr]
**smooth**/**position/network/**[ifisrt,ilast,istride]/[niter]/[weight]/[**check**|**nocheck**} EXAMPLES:
&nbsp_place_holder; 1. Smooth all nodes in the mesh using **esug** in 2D or
**geometry** in 3D.
**smooth**
2. Smooth all nodes in the mesh, using controlled smoothing with control =0.5
**smooth** / / / 1,0,0 / 0.5
3. Smooth a 3D grid by combining network and volume smooths.
**pset**/p2/**attribute**/itp1/1,0,0/0/**eq**
**smooth**/**position**/**network**/1,0,0/3/1./**check**
**smooth/position/geometry/pset,get,**p2
**smooth**/**position**/**network**/1,0,0/3/1./**check**
**smooth/position/geometry/pset,get,**p2

View File

@@ -0,0 +1,255 @@
.. _sort :
## sort
> The **sort** command creates a sort key for chosen node or element
attributes. Sort can be in ascending or descending order and will not alter
current mesh object values (though the **line_graph** option will create three
new attributes; see below). One can perform a sort on a single attribute or in
the case of **index** or **rank** sorting, one can perform a multi-key sort.
The **line_graph** sort does not sort on an attribute but instead sorts line
segment elements into a reasonable order based on connectivity. In each case
the sort key that is created can be used in the **reorder** command to change
the node or element ordering of the mesh object.
> The command parameters include the cmo_name, followed by the sort_type. The
ordering is indicated by **ascending** or **descending**. A new attribute is
created with the sort_key_name. For the **bins**, **index**, and **rank**
options, sorting is performed on the sort_attributes which can be a single
attribute name or a list of attribute names. This list is formed with
attribute names in_att1, in_att2, through in_attn. The **line_graph** option
does not take any attributes as arguments because it sorts based on the
connectivity of the elements, which must be line segments.
cmo_name: The choices for first parameter are the name of a valid mesh object
or **-def-** which select the currently active mesh object.
sort_type: The sorting methods include **bins**, **index**, **rank** and
**line_graph**.
> **bins** A single-key sort which assigns each in_att1 value a bin number. If
in_att1 is an integer then bins each have a unique integer value associated
with them. If in_att1 is a real number, bins are created with values which are
within +-epsilon of each other, where epsilon=1.e-10*abs(real_bin_value). If
all array values are unique, then the maximum value of the index array will
equal the number of entries in the sorted list. Otherwise, the maximum value
of the index array will be less than the number of entries in the sorted list
but will equal the number of unique entries in the list.
>
> With the **bins** method, an optional user specified epsilon multiplier,
**epsilon_user**, will override the default value of 1.e-10.
>
>
**index** Constructs a single or multi-key index table such that in_att1(ikey(1)) is the first entry in the sorted array, in_att1(ikey(2)) is the second, etc.
>
> **rank** Constructs a single or multi-key rank table such that the tables
ith entry give the rank of the ith entry of the sorted arrays. The rank table
is derived from the index table by:
foreach j = 1,N
rank(index(j)) = j
end
>
> **line_graph** This option requires all elements to be line segments, and it
arranges them in a reasonable order. In particular, it makes the following
guarantees:
>
> * Each connected component will be arranged together.
> * Polylines (chains of line segments with no branching or loops) will be
in order from one end to the other.
> * Polygons will be in order starting from one segment and looping back
around to the same place.
> The sorted order for components which are not polylines or polygons is
unspecified, but it will usually be reasonable because the underlying
algorithm visits the edges via depth first search.
>
> The **line_graph** option for **elements** also generates the following
three integer element attributes:
>
> * cid: A component id for distinguishing separate connected components.
Each connected component receives a unique positive integer starting from one.
This allows you to identify all the edges in a particular component by
selecting all elements with a particular component id.
> * ctype: The component type, represented as an integer from 1 to 5.
>
> 1 (Polyline)
> A connected chain of segments with no branches or loops.
> 2 (Tree)
> A connected acyclic component.
> 3 (Polygon)
> A component consisting solely of a single loop.
> 4 (Shared Edges)
> A component which has a pair of cycles with a shared edge.
> 5 (Other)
> Anything which does not fit into the above categories.
> * loop_id: This is a unique positive integer assigned to each simple
cycle. Edges that are not part of a cycle receive a default value of zero. If
an edge is shared (i.e. part of more than one cycle) then it will be labeled
with only one of its cycles. In this case, the cycle corresponding to the
label is not fully specified because there is more than one right answer.
> The **line_graph** option for **nodes** is based on the option for elements,
except that it does not create extra attributes. Based on the sorted elements,
the nodes will be reordered in the same sequence. This is necessary for
triangulation as "TRIANGULATE" routine requires the nodes to be in
clockwise/counterclockwise order.
sort_order: Choose between **_ascending_** or **descending**
> **_ascending_** Sort sort_attributes in **_ascending_** order
**descending** Sort sort_attributes in **descending** order
The **line_graph** sort will ignore this option, but it still expects the
field to be present for consistency with the other sort variations.
sort_key_name: The name for an integer vector (VINT) which will hold the
output sort key values. If the name exists it will be used, if it does not
exist it will be created. If no name is given for sort_key_name A name will be
created which will be the concatination of **'ikey_**' and the first attribute
name in sort_attributes (i.e. /-def-/imt will produce a sort key named
ikey_imt). For the **line_graph** option, the default key will be called
**ikey_line_graph**.
sort_attributes: The name of one or more existing attribute names. Each
attribute will be used as a node of element based array upon which the sorting
routine will sort. Multi-key sorts can have an arbitrary number of input
attributes. Attribute in_att1(n) has priority over in_att2(n) in breaking
ties. Note: all attributes are put into a real*8 work array before being sent
to the sort routine.
SINGLE KEY bins FORMAT:
> **sort** / cmo_name / **bins** / [ **_ascending_ | descending** ] /
sort_key_name / sort_attribute / [epsilon_user]
MULTI-KEY FORMAT:
> **sort**/ cmo_name / **index | rank** / [ **_ascending_ | descending** ] /
sort_key_name / in_att1, in_att2, in_att3 ...
LINE GRAPH FORMAT:
> **sort** / cmo_name / **line_graph** / [ **_ascending_ | descending** ] /
sort_key_name / [**_elements_ | nodes**]
EXAMPLES:
> **sort** / cmo / **index / ascending** / ikey / imt zic yic xic
Multi-key sort first by imt then to break ties consider z coordinate, then if
there are further ties, use y coordinate. Use x coordinate as final tie
breaker.
>
> **sort** / cmo **/ rank / descending** / ikey / yic
Produce ranking of nodes based on y coordinate in descending order.
>
> **sort** / cmo / **index /-def-/-def-**/ xic yic zic
Produce index of noded coordinates. This would be like a line sweep sort where
the sweep is first along x coordinate then y then z.
>
> **sort** / cmo / **bins / ascending **/ i_index / xic
**sort**/ cmo / **bins / ascending** / j_index / yic
**sort** / cmo / **bins / ascending** / k_index / zic
If the cmo were a finite difference grid of points, the above three commands
would produce the finite difference indexing. All points with the same x value
would be in the same i_index bin, all points with the same y value would be in
the same j_index bin, etc.
>
> **sort** / cmo / **line_graph** / **ascending** / ikey / elements
Sort the line segment elements into a reasonable order based on connectivity.
This also creates attributes cid, ctype, and loop_id (see above).
>
> **sort / xyz / bins**
Old version no longer supported but syntax will work. Result is the same as
previous three commands.
LINKS:
> [Example 1 for sort and reorder](../sort_lagrit_input_1)
[Example 2 for sort and reorder](../sort_lagrit_input_2)
BEGIN OLD FORMAT - No longer supported but syntax will still work.
Old Format - **sort / xyz / [ _index_ | bins | rank** ]
> sort/xyz/index - sorts the x,y,z coordinate integer arrays i_index, j_index,
k_index such that xic(i_index(i)) i=1,..nnodes lists the coordinate in
ascending order.
sort/xyz/bins - sorts the x,y,z coordinates and assigns each i_index, j_index,
k_index values in ascending order of the bin number of the sorted list.
sort/xyz/rank - sorts the x,y,z coordinates and assigns each i_index, j_index,
k_index values the ranking of the node in the sorted list.
If all array values are unique, then the maximum value of the index array will
equal the number of entries in the sorted list. Otherwise, the maximum value
of the index array will be less than the number of entries in the sorted list
but will equal the number of unique entries in the list.
For example given x = 0, 1, 2, 1, 0
sort/xyz/index returns i_index = 5, 1, 4, 2, 3
sort/xyz/bins returns i_index = 1, 2, 3, 2, 1
sort/xyz/rank returns i_index = 2, 4, 5, 3, 1
END OLD FORMAT - No longer supported but syntax will still work.
&nbsp_place_holder;

View File

@@ -0,0 +1,198 @@
.. _stack:
&nbsp_place_holder;
## STACK
> The **stack/layers** command is used to read surfaces and merge into a
single stacked layers cmo. The surfaces must have the same number of nodes,
and the x,y coordinates of each layer must be the same. (i.e. x_n,y_n of
surface M must equal x_n,y_n of surface N), and the surfaces must be single
valued functions of z. The layers are stacked with the first file on the
bottom, last file is the top surface. The lower elevation of each layer
truncates the upper. The second from last surface can be made to truncate all
lower surfaces, commonly done with a topographic surface.
The **stack/layers** command adds three scalar attributes that are used in the
**stack/fill** command. See syntax below. nlayers are the total number of
layers in the stacked cmo, this includes layers added for refinement.
nnperlayer are the number of nodes in each of the layers. neperlayer are the
number of elements in each of the layers.
>
>> The node attribute VINT layertyp is created to indicate what type of layer
each node is in.
-1 bottom surface
-2 top surface
0 original input surfaces (usually interfaces)
1 derived surface to buffer interfaces
2 derived surface added as refinement layer
>
>
The **layers** option is followed by a list of surface files and their
material numbers. Further options include the file_type either AVS or GMV,
layer_refinement and pinch_options.
**stack/layers/** file_type / [xy_subset] / file_list / [buffer_opt] [truncate_opt] [pinchout_opt] [flip_opt]
file_type The third parameter indicates the type of files to read as
surfaces.
> _**avs**_ will read AVS UCD files as a surfaces.
**gmv** will read GMV files as a surfaces.
xy_subset This option allows a subset of the surfaces to be used. The syntax
is minx, miny, maxx, maxy
file_list This is the list of files to read from bottom surface to top. Each
surface can be followed by an integer value to indicate a material number, and
an integer value to indicate the number of layers to add as refinement between
input surfaces. The file list has this syntax: file1 mat_num, file2 mat_num
[ref_num], file3 mat_num [ref_num] ...
> file1 thru filen can be quad or tri surface files.
mat_num is the material number for the unit defined by upper and lower
surface. These values will detirmine the element colors when the layers are
filled with element volumes.
ref_num is the number of refinement layers to add between two surfaces.
Refinement is done proportionallly, creating new layers between the choosen
surfaces. The first filename can not have a refinement number, units start at
second file name. See examples below.
buffer_option This optional parameter creates buffer layers around interfaces
at a distance equal to xvalue. It derives layers above and below each surface
that is read in to the stack routine. Buffers are not created around
refinement layers or on the top and bottom surfaces. The buffer option has
this syntax: **buffer** xvalue
truncate_option This optional parameter causes all layers below the choosen
surface to be truncated. The truncating surface is indicated by the integer
number. For instance 5 will truncate all layers below the 5th surface by the
5th surface. **trunc** nth_file
pinchout_options These optional parameters control how layers are pinched out
where they cross. They will also help to control the minimum thickness in a
unit between layers.
> **pinch** xthick real value xthick is mininum thickness allowed in a
layer. This allows upper surface elevation to be equal to ower surface
elevation if upper surface dips below lower surface. By default, **pinch** is
set to 0.
**dpinch** dvalue **dmin** mvalue These options are used along with buffers to help elements to follow the interface boundarys. These options differ from the simple **pinch** option. This option uses the beads_ona_ring algrithm to move points vertically after all the layers are stacked.
If layer thickness <= dvalue then thickness is set to zero.
If layer thickness is < dvalue < mvalue, set thickness to mvalue.
(default dvalue = mvalue = 0.0, no post processing)
** flip ** optional parameter will flip elements so the normals point positive Z direction.
**stack/fill** / cmo_3D / cmo_stack
is a command used after the files are stacked into a single cmo. The units are
filled between the layers with 3D elements. For triangulated surfaces, the
elements will be prisms, and for quad sheets the filler elements will be hex.
FORMAT:
> ** stack/layers **
** [avs | gmv ] **
[minx,miny, maxx,maxy]
filename(1) [matno] filename(i) [matnum, addnum] filename(n) [matnum, addnum]
**[ flip ]**
** [ buffer **[xdistance] ]
** [ pinch** font face="Courier New,Courier">[xthick] ]
**[ trunc** [ifile]
**[ dpinch **xvalue /
**dmin **xvalue ]
&nbsp_place_holder;
&nbsp_place_holder;
EXAMPLES:
> cmo create cmo_stack
**stack/layers/avs**/ fsrf575.inp&nbsp_place_holder;&nbsp_place_holder;1/ fsrf09.inp&nbsp_place_holder;&nbsp_place_holder;2/ fsrf44.inp&nbsp_place_holder;&nbsp_place_holder;2 /**flip/pinch **1.0
This command will read 3 triangulated surface files, flip the normal from down
to up, and pinch layers less than 1.0 meter apart. When converted to a 3D
grid, this will be two elements thick in the z direction.
A surface is assigned the material value that occurs with it on the command
line. When the surfaces are filled with volumes, the nodes on the bottom
surface will detirmine the material of volume elements on and above that
surface. So nodes on fsrf575.inp and above will all have imt values of 1.
Nodes on fsrf09.inp and above will have imt equal to 2.
cmo create cmo_stack
**stack/layers/avs **/ fsrf575.inp&nbsp_place_holder;&nbsp_place_holder;1/&nbsp_place_holder; fsrf09.inp&nbsp_place_holder;&nbsp_place_holder;2/fsrf44.inp&nbsp_place_holder;&nbsp_place_holder;2/ **flip **/ **buffer ** 3.0 / **dpinch** 1.0 / **dmin** 3.0
Same surfaces are used but buffer layers are added at 3 meters below and 3
meters above the unit interface fsrf09.inp. The units are pinched at anything
less than 1 meter and the mininum distance to next layer is 3 meters.
cmo create cmo_stack
**stack/layers/avs** / surf-12.inp&nbsp_place_holder;&nbsp_place_holder;1/ surf-5.inp&nbsp_place_holder;&nbsp_place_holder;2&nbsp_place_holder;3&nbsp_place_holder;/ surf5.inp&nbsp_place_holder;&nbsp_place_holder;3&nbsp_place_holder;&nbsp_place_holder;/ surf2_slope.inp&nbsp_place_holder;&nbsp_place_holder;4/ surf25.inp&nbsp_place_holder;&nbsp_place_holder;4&nbsp_place_holder;1&nbsp_place_holder;/ **truncate** 4 / **pinch** 0.
**stack/fill/**cmohex/cmo_stack
**hextotet//**cmotet/cmohex
This command reads a list of quad surfaces and assigns material values 1
through 4. The first unit (between surf-12.inp and surf-5.inp) is
refined&nbsp_place_holder; by 3, so that 3 layers are added between these
surfaces. All materials will be 1 in this refined unit. The next two units,
material 2 and 3, will have no refinement layers added. The last unit is
refined once, with a layer between the surfaces surf2_slope.inp and
surf25.inp.
The fill option will fill the space between quad surfaces with hex elements.
This hex grid will have 4 units and 10 layers.
The hextotet command can be used to convert the hex grid to a tet grid. Note
that the second option to hextotet is defaulted. This allows hextotet to check
on the grid's mesh type and use the appropriate tet conversion. There will be
6 tet from each hex and there are 3 tets from each prism.
LINKS:
> [Simple Examples for stack](../stack_demo.html)
[Advanced Examples for stack](../stack_demo2.html)

View File

@@ -0,0 +1,128 @@
.. _surface :
&nbsp_place_holder;
> **_SURFACE_**
Defines a boundary surface of the type specified in ibtype.
Releases a previously defined surface.
ibtype can be **free**, **intrface**, **reflect, intrcons **or** virtual**.
Use **reflect **or **free** for external boundaries, **intrface** for interior
interfaces, **intrcons** for constrained interior interfaces. Use **virtual**
for virtual interfaces.&nbsp_place_holder; Nodes on **reflect**, **intrcons**,
or **virtual&nbsp_place_holder; **interfaces will be assigned icrl values
corresponding to the surfaces on which the nodes sit. The command **settets
**will generate parent/child node chains (isn1) for nodes on **intrface** or
**intrcons. **Surfaces which have different materials on either side of the
surface virtual interfaces do not separate material regions but are intended
to identify other structural features of a geometry.&nbsp_place_holder; The
surface is defined by a set of surface-parameters.
istype can be **plane**, **box,** **parallel**(piped), **sphere**,
**cylinder**, **cone**, **ellipse**(oid), **tabular** (rotated tabular
profile), or **sheet**. Surface-parameters are specified with the surface type
in mind.
isurname is the name of the surface and must be unique for each surface
defined by **surface**. FORMAT: **surface**/isurname/ibtype/istype/surface-
parameters
**surface**/isurname/ibtype/**sheet**/cmo-name
**surface**/isurname/**release** EXAMPLES: **surface**/s1/**release**
Release the previously defined surface named s1.&nbsp_place_holder; Remove all
references from the geometry data structures and remove all constraints
associated with this surface.
**surface**/sbox/ibtype/**box**/xmin,ymin,zmin/xmax,ymax,zmax/
Where xmin,ymin,zmin and xmax,ymax,zmax are the coordinates of opposite
corners of a cube, i.e bottom left and top right corners.
**surface**/mysurf/ibtype/**cone**/x1,y1,z1/x2,y2,z2/radius/
Where point 1 is the vertex and point 2 is the top center of the cone with
radius from that point. A cone is finite but open. To create a closed cone cap
the open end with a plane.
**surface**/acyl/ibtype/**cylinder**/x1,y1,z1/x2,y2,z2/radius
Where point 1 is the bottom center and point 2 is the top center of the
cylinder. radius is the radius of the cylinder. Cylinders are open but
finite.&nbsp_place_holder; To create a closed cylinder cap both ends with
planes.
**surface**/sellip/ibtype/**ellipse**/x1,y1,z1/x2,y2,z2/x3,y3,z3/ar,br,cr/
Where point 1 is the center of the ellipsoid and point 2 is on the a semi-axis
(new x), point 3 is on the b semi-axis (new y), and ar, br, cr are radii on
their respective semi-axes.
**surface**/s2/ibtype/**parallel**/x1,y1,z1/x2,y2,z2/x3,y3,z3/x4,y4,z4/
Where points 1, 2, 3 are the front left, front right and back left points of
the base and point 4 is the upper left point of the front face.
**surface**/s1/ibtype/**plane**/x1,y1,z1/x2,y2,z2/x3,y3,z3
**surface**/top/ibtype/**planexyz**/x1,y1,z1/x2, z2/x3,y3,z3
the direction of the normal to the plane is determined by the order of the
points according to the right hand rule.
**surface**/bot/ibtype/**planertz**/radius1,theta1,z1,radius2,theta2,z2,radius ,zcen/
**surface**/s10/ibtype/**planertp**/radius1,theta1,p
**surface**/asheet/ibtype/**sheet**/cmo_name/<
Sheet surfaces may be input by specifying a cmo_name. The Mesh Object must be
either a 2D quad Mesh Object or a 2D triangle Mesh Object. A discussion of
inside and outside with respect to sheet surfaces is presented after the
EXAMPLES section.
**surface**/sphere1/ibtype/**sphere**/x_center,y_center,z_center,radius
**surface**/s3/ibtype/**tabular**/x1,y1,z1/x2,y2,z2/rz|rt/&
r1,z1 &
r2,z2 &
r3,z3 &
....
rn,zn &
end
or
r1,theta1 &
r2,theta2 &
r3,theta3 &
...
rn,thetan &
end
Where point 1 and point 2 define the axis of rotation for the tabular profile
with point 1 as the origin. This is followed by pairs of profile descriptors
depending on the value of geom.Ifgeom is set to **rz**, then the r value is a
radius normal to the axis of rotation and z is the distance along the new axis
of rotation. If geomis set to **rt** then theta is the angle from the axis of
rotation at point 1 andris the distance from point 1 along theta. The first
pair must start on a new line and all lines must contain pairs of data. The
last pair of data must be followed by end.
**Inside/outside **with respect to** sheet surfaces** will be determined by the following algorithm: * For the point being considered, p, find the nearest sheet triangle and the closest point, q, to p that lies on that triangle.
* Construct the vector![](../Image255.gif), from q to p.
* Construct the outward normal to the triangle,&nbsp_place_holder;![](../Image256.gif). The outward normal is constructed using the right hand rule and the order of the points in the sheet. Sheets may be specified as quad Mesh Object (i.e. a 2 dimensional array of points containing the coordinates of the corners of each quad). Either two triangles (divide each quad in two using point (i,j) and (i+1,j+1)) or four triangles (add a point in the center of the quad) are generated by each quad. Applying the right hand rule to the points (i,j), (i+1,j), (i+1,j+1) gives the direction of the normal for all triangles created from the quad.
* If&nbsp_place_holder;![](../Image255.gif)*&nbsp_place_holder;![](../Image256.gif)< 0 then the point is inside. If&nbsp_place_holder;![](../Image255.gif)*&nbsp_place_holder;![](../Image256.gif)>0 the point is outside. If&nbsp_place_holder;![](../Image255.gif)![](../Image256.gif)* n = 0, and if p is on the triangle then p=q and p in on the triangle.
* If&nbsp_place_holder;![](../Image255.gif)*![](../Image256.gif) = 0 and p is not on the triangle then p is outside. ![](../new_html/Image257.gif)
One implication of this definition is that the concept of shadows cast by open
sheets no longer is valid. Sheets may be considered to extend to the boundary
of the geometry.
![](../new_html/Image259.gif)

View File

@@ -0,0 +1,38 @@
.. _surfpts:
&nbsp_place_holder;
> **_SURFPTS_**
> > Generates points on boundary surfaces previously defined by the surface or
region command. The variable** **itype can be **surface** or **region** and
iname is the name of the surface or region. The points are generated by
shooting rays through a user specified set of points from an origin point,
line or plane and finding the surface intersection of each ray. The point
location for a region is determined by iregpt and can be on the **inside**,
**outside** or **both** surfaces.
>
> FORMAT:
>
>> **surfpts**/itype/iname/iregpt/ifirst,ilast,istride/geom/ray_origin
**surfpts**/itype/iname/iregpt/**pset,get,setname/**geom/ray_origin
Where ifirst,ilast,istride or **pset,get**,setname define the set of points to
shoot rays through. SPECIFICALLY FOR ALLOWABLE GEOMETRY TYPES:
**surfpts**/itype/iname/iregpt/ifirst,ilast,istride/**xyz**/x1,y1,z1/x2,y2,z2/x3,y3,z
Where points 1, 2, 3 define the plane to shoot rays from that are normal to
the plane.
**surfpts**/itype/iname/iregpt/ifirst,ilast,istride/ **rtz**/x1,y1,z1/x2,y2,z2 /
Where points 1, 2, define the line to shoot rays from that are perpendicular
to the line.
**surfpts**/itype/iname/iregpt/ifirst,ilast,istride/ **rtp**/xcen,ycen,zcen/
**surfpts**/itype/iname/iregpt/ifirst,ilast,istride/ **points **/iffirst,iflast,ifstride/
Where ifirst,ilast,istride define a set of points to shoot rays from.

Some files were not shown because too many files have changed in this diff Show More