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

85
documentation/COPYRIGHTS Executable file
View File

@@ -0,0 +1,85 @@
============================================================
CODE Title: LaGriT, Version 3.x (OSS)
Primary Author: Carl Gable
LACC #: LA-CC-15-069
Copyright Number Assigned: C15097
Funding source: DOE Program (other than Weapons Program)
Initial Program Header:
* * * * * * * * * * * * * * * * * * * * * * * * *
* * *
* * Program: LaGriT V3.107 Linux m64 *
* * date_compile: 2015/06/24 Ubu gf.so *
* * Run Time: 2016/Aug 24 10:46:29 *
* * Manual: http://lagrit.lanl.gov *
* * *
* * * * * * * * * * * * * * * * * * * * * * * * *
-----oOo-----
LaGriT V3 LA-CC-15-069
LaGriT Copyright: This program was prepared by Los Alamos National Security, LLC
at Los Alamos National Laboratory (LANL) under contract No. DE-AC52-06NA25396
with the U.S. Department of Energy (DOE). All rights in the program are reserved
by the DOE and Los Alamos National Security, LLC. Permission is granted to the
public to copy and use this software without charge, provided that this Notice
and any statement of authorship are reproduced on all copies. Neither the
U.S. Government nor LANS makes any warranty, express or implied, or assumes
any liability or responsibility for the use of this software.
-----oOo-----
LaGriT can read and write exodus files by way of external libraries.
The following copyrights are included for the purpose of binary distribution.
LaGrit does not distribute these libraries or their source.
-----oOo-----
The EXODUS II library is licensed under the BSD open source license.
Copyright (c) 2005 Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000
with Sandia Corporation, the U.S. Government retains certain rights in this software.
Redistribution and use in source and binary forms, with or without modification, are permitted
provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
-Neither the name of Sandia Corporation nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The ExodusII library source code is available on Sourceforge at
http://sourceforge.net/projects/exodusii
For bug reports, documentation errors, and enhancement suggestions, contact:
- Gregory D. Sjaardema
- PHONE: (505) 844-2701
- EMAIL: gdsjaar@sandia.gov
-----oOo-----
NetCDF
Copyright 1993-2004 University Corporation for Atmospheric Research/Unidata
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, University Corporation for Atmospheric Research/Unidata.
Portions of this software were developed by the Unidata Program at the University Corporation for Atmospheric Research.
Access and use of this software shall impose the following obligations and understandings on the user. The user is granted the right, without any fee or cost, to use, copy, modify, alter, enhance and distribute this software, and any derivative works thereof, and its supporting documentation for any purpose whatsoever, provided that this entire notice appears in all copies of the software, derivative works and supporting documentation. Further, UCAR requests that the user credit UCAR/Unidata in any publications that result from the use of this software or in any product that includes this software, although this is not an obligation. The names UCAR and/or Unidata, however, may not be used in any advertising or publicity to endorse or promote any products or commercial entity unless specific written permission is obtained from UCAR/Unidata. The user also understands that UCAR/Unidata is not obligated to provide the user with any support, consulting, training or assistance of any kind with regard to the use, operation and performance of this software nor to provide the user with any updates, revisions, new versions or "bug fixes."
THIS SOFTWARE IS PROVIDED BY UCAR/UNIDATA "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UCAR/UNIDATA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE ACCESS, USE OR PERFORMANCE OF THIS SOFTWARE.

206
documentation/DEPENDENCIES.md Executable file
View File

@@ -0,0 +1,206 @@
# Installing LaGriT Dependencies
LaGriT requires a number of external dependencies to fully compile.
* [HDF5](https://github.com/live-clones/hdf5) -- required
* [NetCDF](https://github.com/Unidata/netcdf-c) -- required with modifications
* [zlib](https://github.com/madler/zlib) -- required
* [ExodusII](https://github.com/gsjaardema/seacas) -- optional but recommended
ExodusII is used for file exportation. If you have no need of this format, you may skip the ExodusII installation after building netCDF and HDF5 and following the *Managing Exodus* instructions in [INSTALL.md](INSTALL.md).
LaGriT also requires the following compilers:
* gcc-core
* gcc-fortran
* gcc-g++
If you are on Windows, it will be necessary to install [Cygwin](https://cygwin.com/install.html).
**NOTE:** This configuration also depends on what you use as your fortran, c++, and gcc compilers. You can add these variables to the `./configure` commands without adding the word 'export', or you can set these as global variables in your `.bashrc` file (recommended).
export FC="/bin/gfortran"
export CC="/bin/gcc"
export CXX="/bin/c++"
export FC90="/bin/gfortran"
export RANLIB="/bin/gcc-ranlib"
export AR="/bin/gcc-ar"
## 1. Compiling zlib
1.1. Unpack zlib and navigate to the directory
1.2. Compile for Cygwin:
```sh
./configure --static --prefix=$HOME --64
```
1.3. Type in `make` and then make sure there is no errors with `make check`
1.4. Use `make install` to finish installing zlib
1.5. Use `make clean` to clean up the library directory of build files.
## 2. Compiling HDF5
2.1. Unpack the tar source file, in it you should find a folder named release_docs, which contains installation instructions in file called `INSTALL_Cygwin.txt`. I will follow these, while giving the actual commands I used.
>***CYGWIN NOTE:** On Windows, when you run the configure script, it might complain about new line characters. If this happens stop the script with Ctrl+C, and run `dos2unix -f targetfile` on the file where it throws an error. Use `make clean` afterwards to clean up your build.*
2.2. In Hdf5 directory use the following command to configure the build script:
```sh
CFLAGS="-m64 -g" FCFLAGS="-m64 -g" CXXFLAGS="-m64 -g" ./configure --disable-shared --with-zlib=/cygdrive/c/Users/304285/dev/cygwin/home/304285/include,/cygdrive/c/Users/304285/dev/cygwin/home/304285/lib --prefix=$HOME --enable-fortran --enable-cxx --enable-static-exec
CFLAGS="-m64 -g" FCFLAGS="-m64 -g" CXXFLAGS="-m64 -g" ./configure --disable-shared --with-zlib=/lib/libz.a --prefix=$HOME --enable-fortran --enable-cxx --enable-static-exec
--host=x86_64-w64-mingw32
--build=x86_64-w64-mingw32
--with-gnu-ld
```
2.3. Once configuration is complete, type in `make` to build the library, and `make check` to test it.
2.4. Run `make install` and `make check-install` to test it.
2.5. Run `make clean` to clean up your library of build files.
## 3. Compiling netCDF
**NOTE:** After version 4.1.3, NetCDF-fortran became a different distribution so the use of environment variables set for fortran is unnecessary.
3.1. Unpack NetCDF and navigate to the directory, the installation instructions can be traced here: http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-install/
3.2. Configure the build script
```sh
CPPFLAGS="-I$HOME/include -m64 -g" LDFLAGS="-L$HOME/lib -m64 -g" LIBS="-L$HOME/lib -lhdf5_hl -lhdf5 -lz" ./configure --disable-shared --disable-dap --enable-netcdf-4 --prefix=$HOME CFLAGS="-m64 -g"
```
**NOTE:** Possibly helpful options: `--build`, `--host`
3.3. Build the library with `make`, and test it with `make check`
3.4. Finish the install with `make install` and `make clean`
## 4. Compiling Exodus
*For Exodus II bug reports, documentation errors, and enhancement suggestions, contact:*
>**Gregory D. Sjaardema**
>
> (505) 844-2701
>
> gdsjaar@sandia.gov
4.1. Now before we start installing ExodusII, we need to make some slight modifications to NetCDF in `$NETCDF_HOME/include/netcdf.h` by changing the following variables as stated in exodus `README` file:
#define NC_MAX_DIMS 65536
#define NC_MAX_VARS 524288
#define NC_MAX_VAR_DIMS 8
4.2. Unpack Exodus and navigate to the exodus directory
4.3. Here we have two options for compiling ExodusII as described in the `README`, 1st is with `Makefile.standalone`, and 2nd is with `cmake`
**4.3.1. Using Makefile.standalone (INCOMPLETE: Might need to add additional arguments):**
a) Use the following make command:
make -f Makefile.standalone NETCDF=$HOME ARFLAGS=-rcv CFLAGS="-m64" FCFLAGS="-m64" CXXFLAGS="-m64"
b) Copy the Exodus libararies to our local libraries
cp libexodus.a libexoIIv2for.a $HOME/lib
**4.3.2. Using cmake (Harder difficulty since requires manipulation of additional libs but completed):**
>***CYGWIN NOTE:** To be able to use cmake on my Cygwin installation I had to copy over my cmake executable from `/bin/cmake` to `/home/304285/bin/cmake`, and my cmake root files from `/usr/share/cmake-3.1.2` to `/home/304285/share/cmake-3.1.2`. My PATH variable was set up to read my `/home/304285/bin` directory last and it overwrote the cmake I had in `/bin/cmake`.
(Otherwise it throws `could not find CMAKE_ROOT/Module directory not found/Error executing cmake::LoadCache()`)*
a) Run `sh cmake-script` once you make appropriate changes to your `cmake-script` file, this was mine:
EXTRA_ARGS=$@
# Fortran compiler
FC="/bin/gfortran"
# Root to where netcdf and hdf5 libraries and includes
# are installed. Libraries will be in LIB_ROOT/lib and
# includes will be in LIB_ROOT/include
LIB_ROOT=/usr/local/lib
# Root of where to install the exodus libraries and
# include files. Library will be in INSTALL_ROOT/lib
# and include file in INSTALL_ROOT/include
INSTALL_ROOT=$HOME
# Complete path to where the exodus.py file should be installed
PYTHON_INSTALL=${INSTALL_ROOT}/python
# Add the following for a static build, mine kept throwing me memory truncation error
# -DCMAKE_EXE_LINKER_FLAGS:STRING="-static" \
rm -f CMakeCache.txt
cmake \
-DBUILD_SHARED:BOOL=OFF \
-DBUILD_SHARED_LIBS:BOOL=OFF \
-DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_ROOT} \
-DCMAKE_Fortran_COMPILER:FILEPATH=${FC} \
-DNETCDF_NCDUMP:PATH='which ncdump' \
-DNETCDF_INCLUDE_DIR:PATH=/usr/include \
-DNETCDF_LIBRARY:PATH=/lib/libnetcdf.dll.a \
-DHDF5HL_LIBRARY:PATH=/lib/libhdf5_hl.dll.a \
-DHDF5_LIBRARY:PATH=/lib/libhdf5.dll.a \
-DZLIB_LIBRARY:PATH=/lib/libz.dll.a \
-DCURL_LIBRARY:PATH=/lib/libcurl.dll.a \
-DPYTHON_INSTALL:PATH=${PYTHON_INSTALL} \
-DCMAKE_C_FLAGS:STRING="-g -m64 -Dwin64 -mwindows" \
-DCMAKE_CXX_FLAGS:STRING="-g -m64" \
-DCMAKE_Fortran_FLAGS:STRING="-g -m64 -fcray-pointer -fdefault-integer-8 -Dwin64 -w -mwindows -fno-exceptions" \
-DCMAKE_RANLIB:FILEPATH=/bin/gcc-ranlib \
-DCMAKE_AR:FILEPATH=/bin/gcc-ar \
-DCYGWIN:BOOL=TRUE \
-DCMAKE_LEGACY_CYGWIN_WIN32=1 \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=TRUE \
$EXTRA_ARGS
b) There is a bug when it makes tests with static libraries, the following 2 files need to be changed for 'make' to work:
>i) `../exodus-6.09/exodus/forbind/CMakeLists`: change line 56 and have `${HDF5HL_LIBRARY}` come before `${HDF5_LIBRARY}`
>
>ii) `../exodus-6.09/exodus/cbind/CMakeLists`: change line 284 with the same library ordering
c) Now run `make`
**NOTE:** When compiling with static linker flags, make throws a truncating error, to fix this I have attempted many options in the cmake-script that are listed here, however in the end I just ended up not using `-static` as a linker flag:
# -DCMAKE_GENERATOR:STRING="Unix Makefiles" \
# -DCMAKE_LEGACY_CYGWIN_WIN32=1 \
# -DCMAKE_Fortran_FLAGS:STRING="-g -fcray-pointer -fno-exceptions -fdefault-integer-8 -m64" \
# -DCMAKE_STATIC_LINKER_FLAGS:STRING="-ncmodel=medium" \
# --large-address-aware --relax --high-entropy-va
# -DCMAKE_EXE_LINKER_FLAGS:STRING="-static" \
# -DCYGWIN:BOOL=TRUE \
# -DCMAKE_LEGACY_CYGWIN_WIN32=1 \
d) To test your build use `make check`
>***CYGWIN NOTE:** After testing the build it throws a message about truncating to 32 bit. What causes this is probably the fact that floats on Windows 64 bit are 4 bit, while on Cygwin they are 8 bit since Cygwin emulated a Linux system.*
e) Run `make install`
---
**If you run into errors building LaGriT or have suggestions on how to improve this documentation, please email Terry Miller (tamiller@lanl.gov), Dylan Harp (dharp@lanl.gov), or Daniel Livingston (livingston@lanl.gov).**

252
documentation/INSTALL.md Executable file
View File

@@ -0,0 +1,252 @@
# Building with make for LaGriT V3.32 and pre-2019 and older
----------------------------------------------
LaGriT installation is intended to be as straightforward as possible for Linux and macOS systems. If you encounter any problems with the build process, submit a ticket on the [Issues page](https://github.com/lanl/LaGriT/issues).
The files in this directory used the make system to build on linux, mac, and WINDOWS.
## New build instructions apply to V3.33 with cmake
Newer codes use C++ to Fortran wrappers that are easier to build with cmake. Building with Exodus is also made easier with cmake. See https://github.com/lanl/LaGriT/README.md
# Old instructions for Building LaGriT V3.32 and pre-2019 codes.
If you are on Windows, see Section 4.0 on this page for more information.
## 1. Automatic Build (Linux, macOS)
### 1.1. Pre-requisites
* GCC / G++ / GFORTRAN 8.0.0+
* CMake 3.10+
* Git
* Bash
* wget
* Python 3
Linux users will also require the following:
* [m4](https://www.gnu.org/software/m4/)
* [bison](https://www.gnu.org/software/bison/)
* libz-dev
On Ubuntu, run
sudo apt-get -y install gfortran libz-dev m4 bison
to install all non-stock pre-requisites.
On macOS, if you use [Homebrew](https://brew.sh), run
brew update && brew install gcc wget cmake python
or, if you use [MacPorts](https://www.macports.org),
sudo port selfupdate && sudo port install cmake gcc wget python
to install all non-stock pre-requisites.
### 1.2. Cloning LaGriT
Download the repo by running:
git clone https://github.com/lanl/LaGriT.git
cd LaGriT
### 1.3. Building Exodus
If you don't already have [Exodus](http://gsjaardema.github.io/seacas/exodusII-new.pdf) built on your system, run
make exodus
Note that Exodus is optional, though recommended for full functionality.
### 1.4. Compiling LaGriT
Finally, to build and test a shared, optimized LaGriT binary, run
make release
make test
To build LaGriT without Exodus,
make WITH_EXODUS=0 release
More options are available by running `make help`.
### 1.5. Testing LaGriT
Run the command
make test
to validate the LaGriT compilation. Note that if you compiled without Exodus, one test should fail (`write_exo`).
The test suite requires Python 3 or above.
### 1.6. Troubleshooting
dumpexodusII.f:130: Error: Can't open included file 'exodusII.inc'
make[1]: *** [objects/dumpexodusII.o] Error 1
make[1]: Leaving directory `/path/to/LaGriT/src'
make: *** [before] Error 2
The command "make release" exited with 2.
**Problem**:
* GFORTRAN cannot find Exodus include files.
**Solution**:
* This problem typically results from a failed Exodus compilation.
* Follow the traceback from `make exodus` to see where in the process it failed.
* Usually this is because one or more pre-requisites were not found on your system. See Section 1.1 for more information.
* Alternately, run `make WITH_EXODUS=0 release` to circumvent the Exodus dependency.
## 2. Makefile Usage
### 2.1. Usage
make [options] [target]
### 2.2. Targets
* `make release`
* Optimized build (with shared libraries)
* `make static`
* Optimized build (with static libraries)
* `make DEBUG=1 release`
* Debug build (with shared libraries)
* `make DEBUG=1 static`
* Debug build (with static libraries)
* `make exodus`
* Download and build the Sandia ExodusII Fortran library.
By default, it will download to the current working directory.
This can be changed by running
* `make EXO_BUILD_DIR=/exodus/path/out/ exodus`
* `make test`
* Run the LaGriT test suite on the created binary.
If you have changed or moved LaGriT from src/lagrit, use
the option `EXE_NAME=/path/to/lagrit`
### 2.3. Options
* `CC` (default: gcc) : C source compiler
* `FC` (default: gfortran) : Fortran source compiler
* `FC90` (default: gfortran) : Fortran90 source compiler
* `WITH_EXODUS` (default: 1) : Build with or without Exodus
* `DEBUG` (default: 0) : Built in debug (1) or optimized (0) mode
* `EXO_LIB_DIR` (default: LAGRIT_ROOT_DIR/seacas/lib) : ExodusII library location
* `EXE_NAME` (default: src/lagrit) : binary filename for LaGriT
## 3. Manual Build
If you are experiencing issues with the standard compilation procedure, you may need to do a manual install.
### 3.1. Exodus Compilation
See Section 1.3 in this document to build Exodus automatically.
To manually build Exodus, read the [SEACAS Documentation](https://github.com/gsjaardema/seacas/blob/master/README.md) for the most up-to-date instructions.
For most architectures, this should be as simple as:
$ export CGNS=NO
$ export MATIO=NO
$ export SHARED=NO
$ export NEEDS_ZLIB=YES
$ git clone https://github.com/gsjaardema/seacas.git $(EXO_BUILD_DIR)/seacas
$ cd $(EXO_BUILD_DIR)/seacas
$ ./install-tpl.sh
$ cd TPL
$ ../cmake-config -DFORTRAN=YES
$ make && make install
If the build was unsuccessful, a non-zero exit code will be thrown along with this error:
-- Configuring incomplete, errors occurred!
### 3.2. Building the LaGriT `lg_util` library
If this is your first time installing LaGriT, you will need to navigate to `LaGriT/lg_util/src` and build `lg_util`. To do this, you may either follow the directions in `README` for advanced operations, or simply run
$ make clean
$ make lib
You may pass options to this Makefile, such as:
* `CC` (default: `gcc`)
* `FC` (default: `gfortran`)
* `BIT_SIZE` (default: output of `$(shell getconf LONG_BIT)`)
* `DEBUG` (default: `0`)
Since this library is stable and generally not updated with most releases, it is usually not necessary to recompile with each pull.
The `lib` target compiles every source file into an object file and combines them into a library using `ar rcu [targets]`.
### 3.3. Building the LaGriT `src/` library
Navigate to `src/` and run
$ make clean
$ gfortran -O -fcray-pointer -fdefault-integer-8 -m64 -Dlinx64 -c -o lagrit_main.o lagrit_main.f
$ gfortran -O -fcray-pointer -fdefault-integer-8 -m64 -Dlinx64 -c -o lagrit_fdate.o lagrit_fdate.f
$ make lib
The `lib` target compiles every source file into an object file and combines them into a library using `ar rcu [targets]`.
Note that `dumpexodusII.f` must be compiled with the `-cpp` flag, due to `#ifdef` statements. Further, `tempgable.f` must be compiled with the flag `-std=legacy`. These flags may be different on compilers other than GNU gfortran.
-----------------
To build without Exodus, in lieu of `make lib`, run
$ make WITH_EXODUS=0 lib
Critically, this flag set to `0` does two things:
1. Compiles `dumpexodusII.f` with flags: `-cpp -DNOEXODUS`
2. Does **not** compile any source files matching the glob `exo_*.c`
### 3.4. Building LaGriT
Within the `src/` directory, link the generated libraries using the command:
$ gfortran -O -Dlinx64 -fcray-pointer -fdefault-integer-8 -fno-sign-zero -o lagrit lagrit_main.o lagrit_fdate.o lg_main_lib.a ../lg_util/src/lg_util_lib.a -L$ACCESS -lexodus_for -lexodus -lnetcdf -lhdf5_hl -lhdf5 -lz -lm -lstdc++ -ldl
Note that `ACCESS` is a shell variable pointing to `$(EXODUS_DIRECTORY)/lib`.
If Exodus has not been built, several flags become unneccessary:
$ gfortran -O -Dlinx64 -fcray-pointer -fdefault-integer-8 -fno-sign-zero -o lagrit lagrit_main.o lagrit_fdate.o lg_main_lib.a ../lg_util/src/lg_util_lib.a -lm -lstdc++
Note that some flags are architecture-dependant. For example, `-Dlinx64` is a Linux-unique command that translates to `-Dmacx64` on macOS systems.
### 3.5. Running LaGriT
From inside `LaGriT/src/`, run
$ ./lagrit
to start the program.
A comprehensive test suite can be found in `LaGriT/test`. Run the command
python suite.py -f -l 1 -exe=path/to/lagrit
to validate the build.
## 4. Windows Build
Currently, Windows support is limited and will require a manual install. See [here](build_win.md) for build instructions.
Windows support is under active development. Read this [issue](#null) for current development status.
## What's next? ##
For documentation, tutorials, and commands, visit the [LaGriT homepage](http://lagrit.lanl.gov).
**If you run into errors building LaGriT or have suggestions on how to improve this documentation, please email Terry Miller (tamiller@lanl.gov)**

12
documentation/README.md Normal file
View File

@@ -0,0 +1,12 @@
## LaGriT: Los Alamos Grid Toolbox old Documentation ##
The files in this directory were from LaGriT during the transition from Mercurial version control and the html web pages, moved to github version control and github pages for documentation.
Most these files and command descriptions were created before 2017, though there are some updates to the build process included in these pages that may be helpful for older machines.
See current documentation located at the top directory and manual pages under docs.
**LANL Software: LA-CC-15-069 No. C15097**

2075
documentation/Versions.txt Executable file

File diff suppressed because it is too large Load Diff

204
documentation/build.md Executable file
View File

@@ -0,0 +1,204 @@
---
Title: "Manual - Building an Executable"
Tags: Manual Building an executable and running LaGriT
---
# Building an executable with LaGriT
------
The executable is built by linking a driver routine with the code and
utility libraries. The driver routine must contain a call to initLaGriT
and a call to control_command_lg and must contain a subroutine called
user_sub. 
The input arguments to initLaGriT are:
**mode** - set to 'noisy' for output to be echoed to the screen - set to
'silent' for no echo
**log_file** - name of log file (if ' ' or '-def-' use default name which
is logx3dgen)  This file will contain a list of commands.
**batch_file** - name of batch file (if ' ' or '-def-' use default name
which is outx3dgen). This file will contain a list of commands and the
error, warning and informational messages generated by the command.
User_sub is used to implement user commands, see [User Commands](writing.md).
A sample Fortran driver routine is listed below.
<pre>
program adrivgen
C PURPOSE LaGriT driver
implicit none
integer ierror_return
call initLaGriT('noisy',' ',' ')
call control_command_lg(ierror_return)
stop
end
C Subroutine user_sub
C
C PURPOSE
C Process user supplied commands
C
C INPUT ARGUMENTS
C
C imsgin - integer array of tokens returned by parser
C xmsgin - real array of tokens returned by parser
C cmsgin - character array of tokens returned by parser
C msgtyp - int array of token types returned by parser
C nwds - number of tokens returned by parser
C
C OUTPUT ARGUMENTS
C
C ierr1 - 0 for successful completion - -1 otherwise
subroutine user_sub(imsgin,xmsgin,cmsgin,msgtyp,nwds,ierr1)
character*32 cmsgin(nwds)
integer imsgin(nwds),msgtyp(nwds)
integer nwds,ierr1,lenc
real*8 xmsgin(nwds)
C set default error return to fail
ierr1=-1
C Insert code here to handle user coded subroutines
C For example
if(cmsgin(1).eq.'my_cmnd') then
call my_rtn(imsgin,xmsgin,cmsgin,msgtyp,nwds,ierr1)
else
ierr1=-1
endif
return
end
</pre>
### Sample build scripts
LaGriT can be compiled on most modern machines including Linux, and Mac. WINDOWS is still under development, but pre-cmake versions were successful under Cygwin. LaGriT now uses cmake to build with or without external libraries such as Seacas Exodus.
The most recent instructions can be found on the github pages.
Simple install, build, and test: [LaGriT Github README](https://github.com/lanl/LaGriT/blob/master/README.md)
### Running LaGriT
To execute, use standard unix file redirection for standard input and
output. LaGriT will produce two additional files, lagrit.out and
lagrit.log. The user can change the names of these files by supplying new
names as arguments in the call to initLaGriT before compiling.  These files contain
detailed output information and the list of commands respectively.
LaGriT may also be run interactively in which case the user will be
prompted to enter commands at the machine prompt.
lagrit < lagrit_command_file
### The following are examples to build old releases (pre V3.2) but may be helpful on older machines.
**Sun OS and Sun Solaris forte version 7 compiler:**
f90 -O2 -lf77compat -o LaGriTgen adrivgen.f libLaGriT.a libutil.a
if the user wishes to link in user subroutines that contain CRAY type
pointer statements, these routines must be compiled using the f77
compiler and then the .o files linked in with f90:
f77 -c -O2 user_routines.f
f90 -O2 -lf77compat -o LaGriTgen adrivgen.f user_routines.o
libLaGriT.a libutil.a
older sun compilers:
f90 -O2 -o LaGriTgen adrivgen.f libLaGriT.a libutil.a
**IBM RISC**
xlf -g -o LaGriTgen -qintlog -qcharlen=500 -brename:.fdate,.fdate_
adrivgen.f
libLaGriT.a libutil.a
**SGI**
f90 -O2 -n32 -r10000 -o LaGriTgen adrivgen.f libLaGriT.a libutil.a
Compile for 64 bit I8 SGI:
f90 -O2 -64 -i8 -o LaGriTgen adrivgen.f  libLaGriT.a libutil.
**HP:**
f90 +U77 -R8 -lm -o LaGriTgen adrivgen.f libLaGriT.a libutil.a
**DEC COMPAQ compiler**
fort -i8 -O -fast -pipeline -transform_loops -o LaGriTgen 
adrivgen.f  libLaGriT.a libutil.a
**ABSOFT compiler**:
f90 -YTEXT_NAMES=LCS  -o LaGriTgen adrivgen.f fdate.f libLaGriT.a
libutila. -lm -lu77
where fdate.f is
<pre>
subroutine fdate(string)
character*(*) string
call fdate_(string)
return
end
</pre>
**LINUX**
if ($OSTYPE == 'Linux') then
set OSTAG = _lin
set F77FLAG = "-c -f -m32 -YEXT_NAMES=ASIS"
set F90FLAG = "-m32 -YEXT_NAMES=ASIS"
set LINKFLAG = "-lm -lU77"
set F90DIR = /opt/absoft10.0/bin
else if ($OSTYPE == 'Darwin') then
set OSTAG = _mac
set F77FLAG = "-c -f -N113 -N90 -B19 -q"
set F90FLAG = ""
set LINKFLAG = " -lU77"
set F90DIR = /Applications/Absoft/bin
else if ($OSTYPE == 'SunOS') then
set OSTAG = _sun
source /n/env/local.forte.7
set F77FLAG = -c
set F90FLAG = "-lf77compat "
set LINKFLAG = " "
set F90DIR = /n/local_SunOS/forte7/SUNWspro/bin
else
echo 'OS $OSTYPE not recognized '
exit 1
endif
set FFILES = "lagrit_main.f lagrit_fdate.f"
set OFILES = "lagrit_main.o lagrit_fdate.o"
set binname = lagrit$OSTAG$COPT
set binname_date = lagrit$OSTAG$COPT$DATETAG
set liblagrit = lagrit$OSTAG$COPT.a
set libutil = util$OSTAG$COPT.a
'rm' -f *.o
$F90DIR/f77 $CFLAG $F77FLAG $FFILES
$F90DIR/f90 $CFLAG $F90FLAG -o $binname $OFILES $LAGRIT_LIBS/$liblagrit $UTIL_LIBS/$libutil $LINKFLAG

150
documentation/build.txt Executable file
View File

@@ -0,0 +1,150 @@
LaGriT uses Exodus II libraries, lg_util library and lagrit library.
####################################################################
Platform WIN7 with cygwin
####################################################################
See build_win.txt and cmake-script in this directory.
May need development.
####################################################################
Platforms Linux RHEL, Linux Ubuntu, and Mac OSX
####################################################################
These platforms have been compiled locally on Ubuntu.
Other platforms have not been compiled on newer OS.
May need development.
See Makefile for lg_util library in lg_util/src
See Makefile for lagrit library in lagrit/src
See build scripts and README in lagrit/src
---------------------------------------------
BUILD the BINARY:
# GNU Fortran (Ubuntu 4.8.2-19ubuntu1) 4.8.2
# using ExodusII 6.09 shared libraries
# load modules
module load exodusii/6.09/gcc-4.8.2-serial
module list
rm *.o
rm *.mod
make COPT=-g lib
### link code and libraries to build executable
# leave off -static option for the .so shared libraries:
gfortran -g -Dlinx64 -fcray-pointer -fdefault-integer-8 -fno-sign-zero -o mylagrit lagrit_main.o lagrit_fdate.o lagrit_ulin64_g_gf4.8.a /n/swdev/LAGRIT/VERS_3.103_015_MAR/lg_util/src/util_ulin64_g_gf4.8.a -L/n/swdev/packages/Ubuntu-14.04-x86_64/exodusii/6.09/gcc-4.8.2-serial/lib -lexodus -lexoIIv2for -lnetcdf -lhdf5_hl -lhdf5 -lz -lm -lstdc++
-------------------------------------------------------------------------
Exodus II Notes:
The ExodusII library source code is available on Sourceforge at
http://sourceforge.net/projects/exodusii
For bug reports, documentation errors, and enhancement suggestions, contact:
- Gregory D. Sjaardema
- PHONE: (505) 844-2701
- EMAIL: gdsjaar@sandia.gov
ExodusII 6.09
1) zlib/1.2.5/gcc-4.8.2
2) hdf5/1.8.6/gcc-4.8.2-serial
3) netcdf/4.3.3.1/gcc-4.8.2-serial
4) exodusii/6.09/gcc-4.8.2-serial
/n/swdev/packages/Ubuntu-14.04-x86_64/exodusii/6.09/gcc-4.8.2-serial/lib
libexodus.so libexoIIv2for.so
(static libs should be libexodus.a libexoIIv2for.a)
copy include files to src (or add -I to the link command)
exodusII.h (for C calls)
exodusII.inc (for Fortran calls)
exodusII_int.h exodusII_int.inc
The include file exodusII.inc is incomplete (Greg will fix for future)
Add these lines if it does not exist:
integer EX_ELEM_SET
parameter (EX_ELEM_SET = 10)
Use fortran API as described in exodus.pdf for 6.09
Old property code added because new property code not found in include file.
The exodus.pdf document describes EXNSET for nodes, but nothing for element sets.
integer EX_ELEM_SET
parameter (EX_ELEM_SET = 10) ! /**< element set property code */
code reference to EX_NODE_SET changed to EXNSET (defined in exodusII.inc)
####################################################################
Running LaGriT
Run on command line in directory where files will be read and written.
Run interactive or redirect with input command file.
See manual in lagrit.lanl.gov
bsh% lagrit
* * * * * * * * * * * * * * * * * * * * * * * * *
* * *
* * Program: LaGriT V3.107 Linux m64 *
* * date_compile: 2015/06/24 Ubu gf.so *
* * Run Time: 2016/Aug 24 12:05:49 *
* * Manual: http://lagrit.lanl.gov *
* * *
* * * * * * * * * * * * * * * * * * * * * * * * *
-----oOo-----
LaGriT V3 LACC-2012-084
LaGriT Copyright: This program was prepared by Los Alamos National Security, LLC
at Los Alamos National Laboratory (LANL) under contract No. DE-AC52-06NA25396
with the U.S. Department of Energy (DOE). All rights in the program are reserved
by the DOE and Los Alamos National Security, LLC. Permission is granted to the
public to copy and use this software without charge, provided that this Notice
and any statement of authorship are reproduced on all copies. Neither the
U.S. Government nor LANS makes any warranty, express or implied, or assumes
any liability or responsibility for the use of this software.
-----oOo-----
Output log file: outx3dgen
Command log file: logx3dgen
Enter a command
memory print
memory print
--------
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
INDEX LENGTH TYPE ADDRESS NAME PARTITION
2 10 1 428217712 global_type global_lg
3 10 1 428217904 global_index global_lg
1 10 3 428219696 global_name global_lg
4 20 1 428280176 global_integer global_lg
5 20 2 428280448 global_real global_lg
6 20 3 428280720 global_character global_lg
7 10 3 428281472 geom_names geom_lg
8 80 1 428281904 geom_info geom_lg
9 8 3 428282656 defcmo_attparam_names define_cmo_lg
10 10 3 428283024 cmo_names define_cmo_lg
11 10 1 428283456 cmo_natts define_cmo_lg
12 455 3 428283648 cmo_attlist default_cmo_lg
13 65 3 428298320 cmo_attparam_cdefault default_cmo_lg
14 65 1 428300512 cmo_attparam_idefault default_cmo_lg
15 65 2 428301136 cmo_attparam_rdefault default_cmo_lg
16 2560 1 428301760 cmd_stack initlagrit
17 1280 1 428322352 definition initlagrit
Total BYTES = 51456 Total MEGABYTES = 51.456E-03
--------
Enter a command
finish
finish
LaGriT successfully completed

281
documentation/build_win.md Executable file
View File

@@ -0,0 +1,281 @@
# Old build instructions for Windows with CYGWIN
----------------------------------------------
LaGriT V3.3 uses C++ to Fortran wrappers that are easier to build with cmake. Building with Exodus is also made easier with cmake.
Though build with cmake works for linux and mac, WINDOWS with new cmake method is still under development.
See https://github.com/lanl/LaGriT/README.md
# Building LaGriT on Windows (pre-V3.3)
## 1. Installing Cygwin
Get the latest version of Cygwin for your operating system: https://cygwin.com/install.html
This guide is for the x86_64 setup file since its for 64 bit OS. The installation procedure with the setup file is straightforward.
My installation and download path: `C:/Users/304285/dev/cygwin`
Find the best mirror here: https://cygwin.com/mirrors.html
Necessary libraries to install:
a) zlib-devel
b) libhdf5-devel
c) libnetcdf-devel
d) libcurl-devel
Helpful libraries to install:
a) wget - helpful for downloading resources from url
b) git - another plugin for obtaining external resources
c) make - used by zlib, HDF5, NetCDF for building (make sure its GNU Make)
d) cmake - used by ExodusII
e) dos2unix - sometimes cygwin confuses Windows ecoding, use this binary on the file
Every now and then this wouldn't fix the issue unless forced 'dos2unix -f filename'
f) gzip - for unzipping .tar files with 'tar -zxvf'
g) curl - Web requests service mainly used by PHP, but ExodusII wants it too for some reason
Compilers needed to install:
a) gcc-core
b) gcc-fortran
c) gcc-g++
**NOTE:** Keep the setup file in your Cygwin directory as you can use it later to download additional packages and keep your cygwin directory updated.
Extra Resources:
GitHub
1) zlib-1.2.8 - https://github.com/madler/zlib
2) HDF5-1.9.227 - https://github.com/live-clones/hdf5
3) NetCDF - https://github.com/Unidata/netcdf-c
## 2. Getting the source
The following versions of libraries were used to compile LaGrit, if the devel versions of first three libraries were installed then these downloads might not be necessary:
a) zlib-1.2.8 - from http://www.zlib.net/
b) HDF5-1.8.15-patch1 - from https://www.hdfgroup.org/downloads/index.html
c) NetCDF-4.3.3.1.tar.gz - from http://www.unidata.ucar.edu/downloads/netcdf/index.jsp
d) ExodusII-6.09 - from http://sourceforge.net/projects/exodusii/files/
f) LaGrit-3.2
**NOTE:** Cygwin emulates a UNIX system, so all of the downloads can be normal .tar collections. This makes it easy to install the dependencies since we don't have to deal with Windows. Just make sure to get 64 bit downloads.
**NOTE:** This configuration also depends on what you use as your fortran, c++, and gcc compilers. You can add these variables to the ./configure commands without adding the word 'export', or you can set these as global variables in your .bashrc file(recommended).
a) export FC="/bin/gfortran"
b) export CC="/bin/gcc"
c) export CXX="/bin/c++"
d) export FC90="/bin/gfortran"
e) export RANLIB="/bin/gcc-ranlib"
f) export AR="/bin/gcc-ar"
*************************
### 2.1 Compiling zlib
**Do not get if you downloaded zlib-devel from Cygwin package source, it comes with a static version of zlib**
*************************
1. Unpack zlib and navigate to the directory
2. Compile for Cygwin:
`./configure --static --prefix=$HOME --64`
3. Type in `make` and then make sure there is no errors with 'make check'
4. Use `make install` to finish installing zlib
5. Use `make clean` to clean up the library directory of build files.
*************************
### 2.2 Compiling HDF5
**Use this to compile a static version of hdf5, otherwise libhdf5-devel is enough**
*************************
1. Unpack the tar source file, in it you should find a folder named release_docs, which contains installation instructions in file called INSTALL_Cygwin.txt I will follow these, while giving the actual commands I used.
**NOTE:** When you run the configure script, it might complain about new line characters. If this happens stop the script with Ctrl+C, and run `dos2unix -f targetfile` on the file where it throws an error. Use `make clean` afterwards to clean up your build.
2. In Hdf5 directory use the following command to configure the build script
CFLAGS="-m64 -g" FCFLAGS="-m64 -g" CXXFLAGS="-m64 -g" ./configure --disable-shared --with-zlib=/cygdrive/c/Users/304285/dev/cygwin/home/304285/include,/cygdrive/c/Users/304285/dev/cygwin/home/304285/lib --prefix=$HOME --enable-fortran --enable-cxx --enable-static-exec
CFLAGS="-m64 -g" FCFLAGS="-m64 -g" CXXFLAGS="-m64 -g" ./configure --disable-shared --with-zlib=/lib/libz.a --prefix=$HOME --enable-fortran --enable-cxx --enable-static-exec
--host=x86_64-w64-mingw32
--build=x86_64-w64-mingw32
--with-gnu-ld
3. Once configuration is complete, type in `make` to build the library, and `make check` to test it.
4. Run `make install` and `make check-install` to test it.
5. Run `make clean` to clean up your library of build files.
*************************
### 2.3. Compiling NetCDF
**Use this to compile a static version of NetCDF, otherwise libnetcdf-devel is enough**
*************************
**NOTE:** After version 4.1.3, NetCDF-fortran became a different distribution so the use of environment variables set for fortran is unnecessary.
1. Unpack NetCDF and navigate to the directory, the installation instructions can be traced here: http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-install/
2. Configure the build script
CPPFLAGS="-I$HOME/include -m64 -g" LDFLAGS="-L$HOME/lib -m64 -g" LIBS="-L$HOME/lib -lhdf5_hl -lhdf5 -lz" ./configure --disable-shared --disable-dap --enable-netcdf-4 --prefix=$HOME CFLAGS="-m64 -g"
**NOTE:** Possibly helpful options: `--build`, `--host`
3. Build the library with `make`, and test it with `make check`
4. Finish the install with `make install` and `make clean`
## 3. Compiling Exodus
1. Now before we start installing ExodusII, we need to make some slight modifications to NetCDF in `$NETCDF_HOME/include/netcdf.h` by changing the following variables as stated in exodus README file:
#define NC_MAX_DIMS 65536
#define NC_MAX_VARS 524288
#define NC_MAX_VAR_DIMS 8
2. Unpack Exodus and navigate to the exodus directory
3. Here we have two options for compiling ExodusII as described in the README, 1st is with Makefile.standalone, and 2nd is with cmake
3.1. Using Makefile.standalone (INCOMPLETE: Might need to add additional arguments):
Use the following make command:
make -f Makefile.standalone NETCDF=$HOME ARFLAGS=-rcv CFLAGS="-m64" FCFLAGS="-m64" CXXFLAGS="-m64"
Copy the Exodus libararies to our local libraries
cp libexodus.a libexoIIv2for.a $HOME/lib
3.2 Using cmake (Harder difficulty since requires manipulation of additional libs but completed):
**NOTE:** To be able to use cmake on my Cygwin installation I had to copy over my cmake executable from `/bin/cmake` to `/home/304285/bin/cmake`, and my cmake root files from `/usr/share/cmake-3.1.2` to `/home/304285/share/cmake-3.1.2`. My PATH variable was set up to read my /home/304285/bin directory last and it overwrote the cmake I had in /bin/cmake. (Otherwise it throws `could not find CMAKE_ROOT/Module directory not found/Error executing cmake::LoadCache()`)
Run `sh cmake-script` once you make appropriate changes to you cmake-script file, this was mine:
EXTRA_ARGS=$@
# Fortran compiler
FC="/bin/gfortran"
# Root to where netcdf and hdf5 libraries and includes
# are installed. Libraries will be in LIB_ROOT/lib and
# includes will be in LIB_ROOT/include
LIB_ROOT=/usr/local/lib
# Root of where to install the exodus libraries and
# include files. Library will be in INSTALL_ROOT/lib
# and include file in INSTALL_ROOT/include
INSTALL_ROOT=$HOME
# Complete path to where the exodus.py file should be installed
PYTHON_INSTALL=${INSTALL_ROOT}/python
# Add the following for a static build, mine kept throwing me memory truncation error
# -DCMAKE_EXE_LINKER_FLAGS:STRING="-static" \
rm -f CMakeCache.txt
cmake \
-DBUILD_SHARED:BOOL=OFF \
-DBUILD_SHARED_LIBS:BOOL=OFF \
-DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_ROOT} \
-DCMAKE_Fortran_COMPILER:FILEPATH=${FC} \
-DNETCDF_NCDUMP:PATH='which ncdump' \
-DNETCDF_INCLUDE_DIR:PATH=/usr/include \
-DNETCDF_LIBRARY:PATH=/lib/libnetcdf.dll.a \
-DHDF5HL_LIBRARY:PATH=/lib/libhdf5_hl.dll.a \
-DHDF5_LIBRARY:PATH=/lib/libhdf5.dll.a \
-DZLIB_LIBRARY:PATH=/lib/libz.dll.a \
-DCURL_LIBRARY:PATH=/lib/libcurl.dll.a \
-DPYTHON_INSTALL:PATH=${PYTHON_INSTALL} \
-DCMAKE_C_FLAGS:STRING="-g -m64 -Dwin64 -mwindows" \
-DCMAKE_CXX_FLAGS:STRING="-g -m64" \
-DCMAKE_Fortran_FLAGS:STRING="-g -m64 -fcray-pointer -fdefault-integer-8 -Dwin64 -w -mwindows -fno-exceptions" \
-DCMAKE_RANLIB:FILEPATH=/bin/gcc-ranlib \
-DCMAKE_AR:FILEPATH=/bin/gcc-ar \
-DCYGWIN:BOOL=TRUE \
-DCMAKE_LEGACY_CYGWIN_WIN32=1 \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=TRUE \
$EXTRA_ARGS
There is a bug when it makes tests with static libraries, the following 2 files need to be changed for `make` to work:
1) ../exodus-6.09/exodus/forbind/CMakeLists change line 56 and have ${HDF5HL_LIBRARY} come before ${HDF5_LIBRARY}
2) ../exodus-6.09/exodus/cbind/CMakeLists change line 284 with the same library ordering
Now run `make`
**NOTE:** When compiling with static linker flags, make throws a truncating error, to fix this I have attempted many options in the cmake-script that are listed here, however in the end I just ended up not using "-static" as a linker flag:
# -DCMAKE_GENERATOR:STRING="Unix Makefiles" \
# -DCMAKE_LEGACY_CYGWIN_WIN32=1 \
# -DCMAKE_Fortran_FLAGS:STRING="-g -fcray-pointer -fno-exceptions -fdefault-integer-8 -m64" \
# -DCMAKE_STATIC_LINKER_FLAGS:STRING="-ncmodel=medium" \
# --large-address-aware --relax --high-entropy-va
# -DCMAKE_EXE_LINKER_FLAGS:STRING="-static" \
# -DCYGWIN:BOOL=TRUE \
# -DCMAKE_LEGACY_CYGWIN_WIN32=1 \
To test your build use `make check`
**NOTE:** After testing the build it throws a message about truncating to 32 bit. What causes this is probably the fact that floats on Windows 64 bit are 4 bit, while on Cygwin they are 8 bit since Cygwin emulated a Linux system.
Then, `make install`
## 4. Compiling lg_util
1. Unpack the `lg_util` source and navigate to the `src/` directory
2. Remove the previous header file and recreate it for your machine:
rm -f mm2000.h
$CC -E -m64 -Dwin64 mm2000_header.f -o mm2000.h
mkdir objects_cygwin64_g_cygwin
cp -p mm2000.h objects_cygwin64_g_cygwin/
3. Build and install the library
make install MOPT=64 COPT=-g LIBDIR=$HOME/lib COMPILER=cygwin
**NOTE:** In the Makefile, there is an `ifeq(COMPILER=cygwin)`, in it CFLAGS are linked to my include folder in cygwin, readjust this as necessary.
4. Run ranlib on the lg_util libraries to fix archives (it appears to grab the wrong version from the path)
$RANLIB $HOME/lib/util_*
**NOTE:** Use the following clean command to when rebuilding:
make clean COMPILER=cygwin COPT=-g MOPT=64 LIBDIR=$HOME/lib
## 5. Compiling LaGriT
1. Unpack the lagrit source and navigate to the source dir
2. Clean the directory up first by running these two commands, `rm *.o` and `rm *.mod`
3. Build the lagrit library
make lib MOPT=64 COPT=-g COMPILER=cygwin CFLAGS="-I$HOME/include" LIBDIR=$HOME/lib
3. Build the lagrit executable with these commands:
cp -f lagrit_cygwin.h lagrit.h
cp -f machine_m64.h machine.h
$FC -g -fcray-pointer -fdefault-integer-8 -m64 -Dwin64 -c -o lagrit_main.o lagrit_main.f
$FC -g -fcray-pointer -fdefault-integer-8 -m64 -Dwin64 -c -o lagrit_fdate.o lagrit_fdate.f
$FC -g -Dwin64 -fcray-pointer -fdefault-integer-8 -fno-sign-zero -o mylagrit objects_cygwin_g_cygwin/lagrit_main.o objects_cygwin_g_cygwin/lagrit_fdate.o lagrit_cygwin_g_cygwin.a /cygdrive/c/Users/304285/dev/cygwin/home/304285/lib/util_cygwin64_g_cygwin.a -L${HOME}/lib -lexoIIv2for -lexodus -L/lib -lnetcdf -lhdf5_hl -lhdf5 -lz -lm -lstdc++
**NOTE:** In the future add `-static option` before the `-o` in order to make a statically compiled executable
4. Copy the .exe file and DLLs to a Windows system and run LaGrit!
**NOTE:** Use the following clean command to when rebuilding:
make clean COMPILER=cygwin COPT=-g MOPT=64 LIBDIR=$HOME/lib

54
documentation/cmake-script Executable file
View File

@@ -0,0 +1,54 @@
EXTRA_ARGS=$@
# Fortran compiler
# FC=/opt/local/bin/gfortran-mp-4.8
# Root to where netcdf and hdf5 libraries and includes
# are installed. Libraries will be in LIB_ROOT/lib and
# includes will be in LIB_ROOT/include
LIB_ROOT=$HOME
# Root of where to install the exodus libraries and
# include files. Library will be in INSTALL_ROOT/lib
# and include file in INSTALL_ROOT/include
INSTALL_ROOT=$HOME
# Complete path to where the exodus.py file should be installed
PYTHON_INSTALL=${INSTALL_ROOT}/python
rm -f CMakeCache.txt
# -DCMAKE_GENERATOR:STRING="Unix Makefiles" \
# -DCURL_LIBRARY:PATH=/cygdrive/x/packages/Ubuntu-14.04-x86_64/anaconda-python/2.1.0/lib/libcurl.a \
# -DCMAKE_LEGACY_CYGWIN_WIN32=1 \
# -DCMAKE_Fortran_FLAGS:STRING="-g -fcray-pointer -fno-exceptions -fdefault-integer-8 -m64" \
# -DCMAKE_STATIC_LINKER_FLAGS:STRING="-ncmodel=medium" \
# --large-address-aware --relax --high-entropy-va
# -DCMAKE_EXE_LINKER_FLAGS:STRING="-static" \
# -DCYGWIN:BOOL=TRUE \
# -DCMAKE_LEGACY_CYGWIN_WIN32=1 \
cmake \
-DBUILD_SHARED:BOOL=OFF \
-DBUILD_SHARED_LIBS:BOOL=OFF \
-DCMAKE_EXE_LINKER_FLAGS:STRING="-static" \
-DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_ROOT} \
-DCMAKE_Fortran_COMPILER:FILEPATH=${FC} \
-DNETCDF_NCDUMP:PATH='which ncdump' \
-DNETCDF_INCLUDE_DIR:PATH=${LIB_ROOT}/include \
-DNETCDF_LIBRARY:PATH=${LIB_ROOT}/lib/libnetcdf.a \
-DHDF5HL_LIBRARY:PATH=${LIB_ROOT}/lib/libhdf5_hl.a \
-DHDF5_LIBRARY:PATH=${LIB_ROOT}/lib/libhdf5.a \
-DZLIB_LIBRARY:PATH=${LIB_ROOT}/lib/libz.a \
-DCURL_LIBRARY:PATH=/cygdrive/x/swdev/packages/Ubuntu-14.04-x86_64/anaconda-python/2.1.0/lib/libcurl.a \
-DPYTHON_INSTALL:PATH=${PYTHON_INSTALL} \
-DCMAKE_C_FLAGS:STRING="-g -m64" \
-DCMAKE_CXX_FLAGS:STRING="-g -m64 -fcray-pointer" \
-DCMAKE_Fortran_FLAGS:STRING="-g -m64 -fcray-pointer -fdefault-integer-4" \
-DCMAKE_RANLIB:FILEPATH=/bin/gcc-ranlib \
-DCMAKE_AR:FILEPATH=/bin/gcc-ar \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=TRUE \
$EXTRA_ARGS

3517
documentation/commit_logs.txt Executable file

File diff suppressed because it is too large Load Diff

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/

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