205 lines
5.6 KiB
Markdown
Executable File
205 lines
5.6 KiB
Markdown
Executable File
---
|
||
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
|
||
|
||
|
||
|
||
|
||
|