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 lagrit.log)  This file will contain a list of commands.

batch_file - name of batch file (if ‘ ‘ or ‘-def-‘ use default name which is lagrit.out). 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.

A sample Fortran driver routine is listed below (C++ examples are in examples/liblagrit/):

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    

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

Build options and instructions for developers: LaGriT Github cmake README

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

    subroutine fdate(string)
    character*(*) string
    call fdate_(string)
    return
    end

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