LaGriT Release Notes

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