LaGriT Release Notes

LaGriT V3.203 July 2017

Major upgrade to LaGriT build and test scripts.
Added install.h and improved documentation for building LaGriT on Linux and Mac machines.
Update ExodusII to 7.01 using git clone
Removed exodus include files from src directory and changed build to use $EXODUSII_HOME/include
Updates to web pages and documents, added text regarding open source and github

These issues were fixed:

segmentation fault during triangulate
massage command failing to de-refine and no error is reported
ExodusII output for 2D Planar incorrectly written as 3 Dimensions
second call to addmesh/excavate command causing memory error or segmentation fault
output adjusted to make room for large numbers when reporting dudded nodes from filter command

Additional tests and improvements to for running and reporting the test suite New tests include:
level01/createpts_filter - illustrates the difference between filter and the more accurate filterkd commands
level01/smooth_massage - use massage with smooth to refine and de-refine a triangulation
level01/write_exo - write 3D and 2D Exodus files with psets, eltsets, and facesets
level01/pflotran_stor - write pflotran style Voronoi geometric coefficient (volume, face area) files

PyLaGriT new features:
read_sheetij - creates a quad mesh from an elevation file reading Z(i,j) into mesh zic attribute
read_modflow - creates a modflow rectilinear mesh using modflow files using elev_top.mod and init_bnds.inf
read_fehm - read FEHM format mesh file with geometry and connectivity (LaGriT does not have this option)
examples/arctic_w_ice_wedges - example Mesh for 2D polygon with ice wedges by Chuck Abolt

Known Issues:
Builds with compiler gfortran v5 or greater can generate run-time signal exceptions such as IEEE_DNORMAL. Most exceptions have been tracked down and fixed according to picky compiler suggestions. These exceptions have not changed the behavior of the code. Exceptions will continue to be fixed as they show up.

During testing it was found that the filter command may find and remove fewer nodes than the command filterkd. The command filterkd is recommended where precision might be an issue. Documentation will be changed to reflect this. It is expected that the filter command and algorithm will be deprecated and replaced by filterkd. See test/level01/createpts_filter

Paraview has trouble displaying ExodusII facesets for 2D grids in 3 Dimensions, but is fine with 2D planar where Z values are ignored. When viewing these same ExodusII files with GMV, the facesets look correct. Checking files by converting to ASCII with ncdump, the files look correct. We do not know if this is a LaGriT, ExodusII, or Paraview issue. See test/level01/write_exo/reference for ExodusII example files.

LaGriT V3.200 September 2016

LaGriT V3 LACC-15-069 is now distributed as open-source software under a BSD 3-Clause License.
This version moves the entire LaGriT repo from a local mercurial version control to github and now includes the python driven version PyLaGriT.
For most current versions of source and documentation use the open-source repository at

Compiled executable versions of LaGriT will continue to available through

LaGriT V3.108 July 2016

Last version under open distribution license:

2012 LaGriT Version 3 LACC-2012-084
Copyright Notice: 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.

Change from Mercurial open distribution to open source on Github. Tag this version Release V3.108 and use clone for V3.2 for start of open-source repository.

LaGriT V3.108 from
tag:         Release V3.108
parent:      349:8524530343c2
parent:      346:a5f6fb10ecce
user:        Terry Miller 
date:        Tue Jul 26 09:48:53 2016 -0600

This merges student Mikita V3.106 WIN development with master.
Mikita comments and updates to mercurial/trac repository include:

LaGriT V3.106 August 2015

Major update to write PFLOTRAN type option stor file and new syntax using Exodus II 6.9 libraries.
This version is used for code development by summer student Mikita Yanki that includes changes and scripts to build LaGriT on windows with Exodus II V6 libraries. This is a branch that does not include some of the V3.107 updates. Mikita's version is merged and contained in the V3.2 release.

Note: The LaGriT run-time banner shows V3.2 with compile date Aug 2015, even though it is actually a branch from V3.106.

Major updates include:

Minor updates to master version include:

LaGriT V3.101 November 2013

This version does NOT have the PFLOTRAN file output used by DFN workflow.

There are no major enhancements, code is compiled and tested for release. This is in preparation for major update to Exodus 6 which changes routine calls and syntax.

V3.103 is last version lagrit code using Exodus 5 libs
V3.104 is new  version lagrit code using Exodus 6 libs

- Build/test V3.103 old RHEL RedHat 5 on aquifer with Exodus 5
- Build/test V3.103 new RHEL RedHat 6.5 on darcy or talik with Exodus 5
- Build/test V3.103 Ubuntu-14.04-x86_64 with Exodus 5
- Build/test V3.104 Ubuntu-14.04-x86_64 with Exodus 6

- Build/test V3.104 WIN7 with Exodus 6
- Build/test V3.104 MacOS with Exodus 6
- Build/test V3.104 RHEL 6.5 with Exodus 6

Current Stable Linux version:
  LaGriT V3.101 Linux m64
  date_compile: 2013/04/25  RH gf4.5

These are the external libs used with LaGriT V3.1 As of November 2012
     Exodus II 5.22a
     HDF5 version 1.8.6

Linux RHEL Exodus 5 libraries were built in

Build executable for linux:
gfortran -O -Dlinx64 -static -fcray-pointer -fdefault-integer-8 -fno-sign-zero -o mylagrit lagrit_main.o lagrit_fdate.o lagrit_lin64_o_gf4.5.a /n/swdev/LAGRIT/VERS_3.100_012_NOV09/build_lagrit/lg_util/lib/util_lin64_o_gfort4.5.a -L /n/swdev/LAGRIT/VERS_3.100_012_NOV09/build_lagrit/exodus/lin64/lib -lexoIIv2for -lexodus -lnetcdf -lhdf5_hl -lhdf5 -lz -lm -lstdc++

This release include the following enhancements:

This release include the following fixes:

LaGriT V3.100 November 2012

Major changes to most parts of the code to enable 64 bit compilation and added external Exodus II 5 libraries to write Exodus basic mesh files. These are the external libs used with this release:

A few minor changes/fixes include: cmo/copyatt fix copy from node attribute to elem attribute of equal length. cmo/readatt fix to allow char in first position. Memory and bug fixes related to 64 bit code changes. Improved error catching for common routines.

Command Enhancements

LaGriT V3.001 August 2011

Major changes incoporating work from Andrew Kuprat (64bit work) and summer student Adam Cozzette to add more capability. Changes to make 64bit code more consistent and easier to modify for various platforms. The code for stack routines are combined into stack_options.f from temptam.f and read_trilayers.f. The beads algorithm and routines are now all in their own file beads_ona_ring.f

LaGriT assumes that the size of an integer is the same size as a pointer. Use the preprocessor and configure settings to select the integer type so that it matches the size of a pointer.

#define int_ptrsize int
#define int_ptrsize long

Makefile changes for 64 bit compile:
Enables the Cray pointer extension, which provides a C-like pointer

-falign-commons (will try to reorder commons so this is not needed)
By default, gfortran enforces proper alignment of all variables in a COMMON block by padding them as needed. On certain platforms this is mandatory, on others it increases performance. If a COMMON block is not declared with consistent data types everywhere, this padding can cause trouble, and -fno-align-commons can be used to disable automatic alignment. The same form of this option should be used for all files that share a COMMON block. To avoid potential alignment issues in COMMON blocks, it is recommended to order objects from largests to smallest.

Andrew Kuprat changes:

Adam Cozzette changes:

LaGriT V2.200 November 2010

Banner when LaGriT is started (eg Linux):
*               *    Program:  LaGriT V2.200   Linux m32      *                 
* * date_compile: 2010/11/22 *

The next release, expected in early 2011, will have 64 bit memory pointers. This will allow access to much more real and virtual memory so that the present limitations on memory and mesh size that can be built and manipulated will be greatly expanded.

Modifications and New Capabilities Index:

dump / zone_outside / ...

Changed FEHM outside area calculation to default to Voronoi area associated with nodes of a 3D tetrahedral mesh instead of computing Median area. FEHM file file_root_outside.area changed to file_root_outside_vor.area For dump/zone, added keywords keepatt_area or keepatt_voronoi which will compute and keep voronoi vector areas xn_varea, yn_varea, zn_varea and keepatt_median will compute area/num nodes on face and keep attributes xn_area, yn_area, zn_area The written file file_root_outside_vor.area or file_name_outside_med.area is a list of 2D area vectors (Ax_i,Ay_i,Az_i) associated with each node. dump/zone_outside

cmo / addatt / voronoi_varea / ...

This module will do the same voronoi calculation on triangles as is done with the outside area for a 3D tetrahderal mesh. The call will create vector components for each node and fill the node attributes xn_varea, yn_varea, zn_varea.

extract / surfmesh / ...

Now creates attributes to hold element local face numbers of 3D input mesh that occur on either side of output mesh face, idface0 and idface1. Now copies user-created node-based attributes from source mesh into extracted sink mesh.

addmesh / excavate / ...

excavate - remove nodes and elements if they fall with the circumsphere of triangles on the input mesh.

mesh1 must be a 3D mesh (of any geometry) and mesh2 must be a 2D triangular mesh. This command then excavates a volume 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).

interpolate / ...

Changed interpolate to "find" more points on edges this will permit nodes to find a nearest edge or point and be "inside" the triangle for extreme small or large numbers where epsilon values are difficult to evaluate correctly. Note, this changed test results for interpolate, test/level01 results were updated for these improvements.

A bug was fixed in interpolation that would sometimes save a node id in pt_gtg or el_gtg attributes that was not related to the found candidate and value. This could occur where there are multiple candidates for the source and if epsilon values are near machine limits. The test in level01/intrp_2D_sizes was changed to capture and evaluate these issues.

intrp_gtg.f, inside_lg.f
There are changes to interpolate using tests for finding points that are inside or on edges or vertices of an element. The epsilon tests have been relaxed to allow points that are "near" to be found on edge - if within the chosen epsilon. The interpolation has been changed to evaluate candidate points based on the confidence of being inside the associated triangle. A result indicating the point is inside will "win" over a candidate result that is on edge or vertice. If idebug attribute is set to a number of 5 or greater, there will be many more statements written that are related to the inside triangle and epsilon tests.

Substantial changes and additions to DUMP2.html which describes all the dump file_types and include more descriptions of FEHM files. DUMP3.html for dump/fehm now includes descriptions of FEHM files.

read /...

Three token read implemented. Files are recognized based on their suffix (AVS, GMV, ...) rather than requiring that the second token specify the file type.

dump /...

Two and three token dump implemented. Files types (AVS, GMV, ...) are recognized based on their suffix rather than requiring that the second token specify the file type. Two token write does not require a MO name. The default MO is used.

cmo / attribute_union / ...

Change two meshes so they both share the same set of attributes (taking the union of their sets of attributes)

compute / linear_extrapolate / ...

linear_extrapolate - 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.

grid2grid /...

grid2grid wrapper for hextotet. Use to convert:
  • quadtotri2    quad to 2 triangles, no new points.
  • prismtotet3   prism to 3 tets, no new points.
  • quattotri4    quad to 4 triangles, with one new point.
  • pyrtotet4     pyramid to 4 tets, with one new point.
  • hextotet5     hex to 5 tets, no new points.
  • hextotet6     hex to 6 tets, no new points.
  • prismtotet14  prism to 14 tets, four new points (1 + 3 faces).
  • prismtotet18  prism to 18 tets, six new points (1 + 5 faces).
  • hextotet24    hex to 24 tets, seven new points (1 + 6 faces).
  • tree_to_fe    quadtree or octree grid to grid with no parent-type elements.

dump / stor / ...

Create two new node vectors, ccoef, ij_ccoef Put the negative ij coefficient value into the two nodes connected to the ij edge. The vector ij_coef will assign the j index value to node i so that one can determine which edge is associated with the neative coefficient that is assigned to nodes.

Changes to include TranslateTetToZero for geometric calculations (not sure it is really helping with some of our neg ccoef issues)

Extensive chages to error handling and messages, but not to the logic of program This code has same logic as matbld3d - but uses linked lists instead of mmgetblk calls Use io_type to toggle creation of attribute for voronoi volumes or to write to stor file added extensive error checking to eliminate segmentation faults added error check and message for every mmgetblk and mmrelblk added calls to mmprint when mm calls fail cleaned up variable declarations and added comments added istatus to check for errors and completion of matrix changed all routine messages to start with AMatbld3d_stor to distinguish from matrix built with Matbld3d_stor added idebug options added status report at end of routine

Extensive chages to error handling and messages, but not to the logic of program This code uses many mmgetblk calls and about 40 percent more memory than linked list version added extensive error checking to eliminate segmentation faults added error check and message for every mmgetblk and mmrelblk added calls to mmprint when mm calls fail cleaned up variable declarations and added comments added istatus to check for errors and completion of matrix added idebug options added status report at end of routine
add warning for newlen call with uncertain effect

initialize list pointers to null assign null to pointers after free add warning messages for failure to free

Add compress_opt to dumpfehm arguments add comments and error checking to clarify code logic check options and set for 2D or 3D calls to matbld use matbld3d_stor for compress options none and coefs use anothermatbld3d_wrapper for compress options all and graph Note anothermatbld3d_wrapper can write only scalar coef values

pset /...

Add option to pset/ / zone for user specified zone id number.

dump /

declare implicit none and initialize variables add comments to clarify the case switches add more error checking and messages change syntax for dump/ fehm and dump/ stor old keywords not needed include alternate_scalar, binaryc, asciic compression keywords are now none, coefs, graph, or all old syntax still works, but now code checks for keywords after filename and cmo and sets options for the fehm and stor routine calls The man pages are updated and corrected.

memory / ...

New options to print and check memory manager and report memory usage. This superseeds old utilities mmprint, mmcheck, etc.

Test Cases Modified:

Change reference files to results from Linux Updated zone_outside and zone_outside_minmax to current voronoi version

LaGriT V2.106 June 2010

This includes a minor changes and added error checking. The following are new syntax that are code wrappers for common command calls.

LaGriT V2.100 August 2009

This is a major update to LaGriT and the lg_util library. Major changes have been made in the core memory management routines to allow development for a 64 bit release. These changes will be invisible to most users but allows better reporting of errors and memory usage for useful diagnostic information.
Other changes include:

  • Executable build for Mac with Intel chip
  • New capability in compute module to compute signed distance fields
  • Incorporate METIS source code for graph partition and reorder package with LaGriT.
    For details of METIS algorithms and descriptions of the third command line argument see:
  • Add option to create node attribute that is the Voronoi volume associated with each node of a Delaunay mesh
  • Module addmesh modified to handle errors so that it can be used in a loop without needing to have first call be different
  • Updates stor file commands so default uses newest version of code to build sparse matrix. This uses less memory and takes less time to build.
    New syntax options for stor file compression include all (default), graph, coefs, or none.
  • Update manual and web pages
  • Bug fix, various modules