#!/bin/csh -f # Copyright(C) 1999-2020 National Technology & Engineering Solutions # of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with # NTESS, the U.S. Government retains certain rights in this software. # # See packages/seacas/LICENSE for details #************************************************************************** #************************************************************************** #** #** SCRIPT: loadbal #** #************************************************************************** #************************************************************************** # Determine ACCESS based on the location of the script if ("`echo $0 | sed 's/\///'`" != "$0") then # Location of the script found if ("`ls -l $0 | sed 's/^l.*/l/'`" != "l") then # Script is not a softlink setenv ACCESS `echo $0 | sed 's/\/etc\/.*//'` if (! -e $ACCESS/config/site.def) then setenv ACCESS @ACCESSDIR@ endif else # Script is a softlink setenv ACCESS @ACCESSDIR@ endif else # Determining the location of the script failed, use default values setenv ACCESS @ACCESSDIR@ endif # initialize variables echo "===========================================================" echo "| Sandia Engineering Analysis Access procedure for: loadbal" echo '| $Revision: 1.57 $, $Date: 2008/05/19 12:29:22 $' echo "===========================================================" set codename=loadbal set runid=DEFAULT set mesh_opt=DEFAULT set machine=DEFAULT set decomp_method="-l inertial" set nem_slice_flag="-c" set pexmach=DEFAULT set rootdir=DEFAULT set subdir=DEFAULT set offset=DEFAULT set raids=DEFAULT set scalar_mesh="yes" set subdirectory="yes" set userid = `echo $LOGNAME` set curdir = `pwd` set ACCESSBIN = $ACCESS/bin set NEM_SLICE = $ACCESSBIN/nem_slice set default_raids = 1 set default_root = `pwd`/ set default_sub = . set default_offset = 1 set input_suffix = i set genesis_suffix = g set exodus_suffix = e set spread_suffix = par set spreadit = "NO" env >! JUNK grep "ALEGRA_EXE" JUNK > JUNK2 set alegra_rc = $status if($alegra_rc == 0) then set input_suffix = inp set genesis_suffix = gen set exodus_suffix = exo endif /bin/rm -rf JUNK JUNK2 # Parse command line so that it can be used by the options program if ($#argv == 0) goto USAGE if ($#argv == 1 && "$argv[1]" == "-h") goto USAGE @ i = 1 while ($i < $#argv) switch ($argv[$i]) case -h: set argv[$i] = "-help" breaksw case -n*: set argv[$i] = "-nem_slice_flag" @ i++ set testvar = `echo $argv[$i] | sed "s/.*\-l/\-l/" | sed "s/\-l.*//"` if ( "$testvar" == "" ) then set decomp_method = "$argv[$i]" else set nem_slice_flag = "$argv[$i]" endif set argv[$i] = "user_defined" breaksw case -o: set argv[$i] = "-offset" breaksw case -p: set argv[$i] = "-mesh_opt" breaksw case -r: set argv[$i] = "-raids" breaksw case -R: set argv[$i] = "-ROOTDIR" breaksw case -S: set argv[$i] = "-SUBDIR" breaksw default: breaksw endsw @ i++ end # Parse command line set argv = (`$ACCESS/bin/options $*`) # Set options exit condition set errflg = $status # echo command line input echo "Input options: $argv" # Check errflg - nonzero indicates error in options, print usage and exit: if ($errflg != 0) then goto USAGE endif # Process options for this code # Check for basename argument (Will follow "--" in argument list) set temp = ($argv) while ("$temp[1]" != "--") shift temp end # temp points to -- shift temp # Set the basename if ($#temp <= 0) then echo "ERROR:******************************************************************" echo "ERROR:******************************************************************" echo "ERROR:************* No run id specified *************" echo "ERROR:******************************************************************" echo "ERROR:******************************************************************" set errflg = 1 goto USAGE endif set runid = $temp[1] # Check for arguments and set corresponding variables while ("$argv[1]" != "--") switch ($argv[1]) case -help: goto USAGE breaksw case -nem_slice_flag: shift argv breaksw case -offset: shift argv set offset = $argv[1] breaksw case -mesh_opt: shift argv set mesh_opt = $argv[1] breaksw case -raids: shift argv set raids = $argv[1] breaksw case -ROOTDIR: shift argv set rootdir = $argv[1] breaksw case -SUBDIR: shift argv set subdir = $argv[1] breaksw case -spread: set spreadit="yes" breaksw case -slit: set nem_slice_flag = "-c" breaksw case -suffix_mesh: shift argv set genesis_suffix = $argv[1] breaksw case -suffix_spread: shift argv set spread_suffix = $argv[1] breaksw case -suffix_transient: shift argv set exodus_suffix = $argv[1] breaksw case -No_scalar_mesh: set scalar_mesh = "no" breaksw case -No_subdirectory: set subdirectory = "no" breaksw case -No_01: set subdirectory = "no" breaksw case -multikl: set decomp_method="-l multikl" breaksw case -rcb: set decomp_method="-l rcb" breaksw case -rib: set decomp_method="-l rib" breaksw case -hsfc: set decomp_method="-l hsfc" breaksw case -spectral: set decomp_method="-l spectral" breaksw case -inertial: set decomp_method="-l inertial" breaksw case -linear: set decomp_method="-l linear" breaksw case -random: set decomp_method="-l random" breaksw case -scattered: set decomp_method="-l scattered" breaksw case -brick: set decomp_method="-l brick" breaksw case -zpinch: set decomp_method="-l zpinch" breaksw default: echo "ERROR: unrecognized option $argv[1]" goto USAGE breaksw endsw shift argv end if($mesh_opt == DEFAULT) then echo echo "ERROR:***************************************************" echo "ERROR:***************************************************" echo "ERROR:>>>> Must specify -p option (number of processors)." echo "ERROR:***************************************************" echo "ERROR:***************************************************" echo goto USAGE endif if($runid == DEFAULT) then echo runid unknown. Specify an file prefix to run. goto USAGE else set input = $runid.$input_suffix set output = $runid.lbd.out set error = $runid.lbd.err set nemesis = $runid.nem set genesis = $runid.$genesis_suffix set exodus = $runid.$exodus_suffix set pexsh = $runid.pex set spreed = $runid.spd set config = $runid.cfg goto EXECUTE_LBD endif # ************************************************************************* # ************************************************************************* EXECUTE_LBD: echo "" echo "***************************************************" echo "*" echo "* Starting loadbal calculation for $runid" echo -n "* at "; date echo "*" echo "* .... beginning decomposition ...." echo "* see $output for current status" echo $mesh_opt >! DUMMY sed -e 's/\x/\*/g' < DUMMY >! DUMMY2 sed -e 's/\x/\ /g' < DUMMY >! DUMMY3 set procopt = `cat DUMMY3` echo "quit" >> DUMMY2 /usr/bin/bc DUMMY2 >! DUMMY set numproc = `cat DUMMY` /bin/rm -rf DUMMY DUMMY2 DUMMY3 set date = `date '+%m/%d/%y'` set time = `date '+%H:%M:%S'` set prob_dir = `pwd | sed "s/.*\///g"` echo "===========================================================" >! $output echo "| Sandia Engineering Analysis Access procedure for: loadbal" >> $output echo '| $Revision: 1.57 $, $Date: 2008/05/19 12:29:22 $' >> $output echo "===========================================================" >> $output echo "Executing:" echo "($NEM_SLICE -e $decomp_method $nem_slice_flag -o $nemesis -m mesh=$mesh_opt -a $input $genesis" if(-f $input) then ($NEM_SLICE -e $decomp_method $nem_slice_flag -o $nemesis -m mesh=$mesh_opt -a $input $genesis >> $output) >& $error set load_rc = $status else ($NEM_SLICE -e $decomp_method $nem_slice_flag -o $nemesis -m mesh=$mesh_opt $genesis >> $output) >& $error set load_rc = $status endif if($load_rc != 0) then goto BOMBED else goto LAN endif # ************************************************************************* # ************************************************************************* CONFIG: echo "set machine = $machine" >! $config echo "set proc_conf = $mesh_opt" >> $config echo "set num_procs = $numproc" >> $config echo "set root_dir = $rootdir" >> $config echo "set sub_dir = $subdir" >> $config echo "set job_name = $runid" >> $config echo "set num_raids = $raids" >> $config echo "set raid_offset = $offset" >> $config echo "set nem_date = $date" >> $config echo "set nem_time = $time" >> $config echo "set zero = 0" >> $config chmod 755 $spreed set mpexe = local if($spreadit == "yes") then echo "" echo "Executing: ./$spreed ..." (./$spreed >> $output) >& $error endif echo "*" echo "* Completed loadbal calculation for $runid" echo -n "* at "; date echo "*" echo "* For details of the decomposition, see" echo "* $output (output) and" echo "* $error (possible errors/warnings)" echo "*" echo "* The following files may be required for parallel runs:" echo "* $input" echo "* $genesis" echo "* $nemesis" echo "* $spreed" echo "* $config" echo "*" echo "***************************************************" echo " " if ($?SEACAS_NO_LOGGING) then echo "SEACAS Audit logging disabled via SEACAS_NO_LOGGING setting" else # Echo audit information to ${ACCESS}/etc/audit.log set time_used=`time` # Get name of user running code if (${?USER}) then set username = ${USER} else if (${?LOGNAME}) then set username = ${LOGNAME} else set username = "UNKNOWN" endif endif # Write info to audit.log file if (-w ${ACCESS}/etc/audit.log) then echo ${codename} ${username} `date` ${time_used} `hostname` >>${ACCESS}/etc/audit.log endif endif exit $load_rc # ************************************************************************* # ************************************************************************* LAN: if($rootdir == DEFAULT) then set rootdir=$default_root endif if($subdir == DEFAULT) then set subdir=$default_sub endif if($offset == DEFAULT) then set offset=$default_offset endif if($raids == DEFAULT) then set raids=$default_raids endif if($raids > $numproc) then set raids = $numproc endif set pexcmd = $ACCESSBIN/nem_spread if ($subdirectory == "no") then set do_sub = ", nosubdirectory" else set do_sub = endif set zero = "zeros" set stage = if(-f $pexsh) then /bin/rm -rf $pexsh endif echo "Creating $pexsh" echo "Input FEM file = $genesis" >! $pexsh echo "LB file = $nemesis" >> $pexsh echo "File Extension for Spread Files = .$spread_suffix" >> $pexsh echo "Parallel Results file base name = $exodus " >> $pexsh echo "Number of Processors = $numproc " >> $pexsh echo "Use Scalar Mesh File = $scalar_mesh " >> $pexsh echo "------------------------------------------------------------" >> $pexsh echo " Parallel I/O section" >> $pexsh echo "------------------------------------------------------------" >> $pexsh echo "Parallel Disk Info= number=$raids, offset=$offset $stage, $zero $do_sub" >> $pexsh echo "Parallel file location = root=$rootdir, subdir=$subdir" >> $pexsh if(-f $spreed) then /bin/rm -rf $spreed endif echo "Creating $spreed" echo "#\!/bin/csh -f" >! $spreed echo "" >> $spreed if ($subdirectory == "yes") then echo "set root = $rootdir" >> $spreed echo "set subdir = $subdir" >> $spreed echo "set numraid = $raids" >> $spreed echo "set i = $offset" >> $spreed echo "set j = 1" >> $spreed echo "set stride = 1" >> $spreed echo "set zero = 0" >> $spreed echo 'while($j <= $numraid)' >> $spreed echo ' if($i < 10) then' >> $spreed echo ' set drive = $root$zero$i' >> $spreed echo ' else' >> $spreed echo ' set drive = $root$i' >> $spreed echo ' endif' >> $spreed echo ' set dir = $drive/$subdir' >> $spreed echo ' if(!(-d $dir)) then' >> $spreed echo ' echo "making directory $dir"' >> $spreed echo ' mkdir -p $dir' >> $spreed echo ' endif' >> $spreed echo ' @ i += $stride' >> $spreed echo ' @ j++' >> $spreed echo 'end' >> $spreed else if ($subdir != $default_sub) then echo "set root = $rootdir" >> $spreed echo "set subdir = $subdir" >> $spreed echo 'set dir = $root/$subdir' >> $spreed echo 'if(!(-d $dir)) then' >> $spreed echo ' echo "making directory $dir"' >> $spreed echo ' mkdir -p $dir' >> $spreed echo 'endif' >> $spreed endif endif echo "" >> $spreed echo "$pexcmd $pexsh" >> $spreed goto CONFIG # ************************************************************************* # ************************************************************************* BOMBED: echo "" echo "" echo "ERROR:***************************************************" echo "ERROR:***************************************************" echo "ERROR:>>>> loadbal exiting with status: $load_rc" echo "ERROR:>>>> This suggests that a problem occurred." echo "ERROR:>>>> The output of $error is:" echo "ERROR:***************************************************" echo "ERROR:***************************************************" echo "" cat $error echo "" exit $load_rc # ************************************************************************* # ************************************************************************* USAGE: cat << 'EOF' Usage: loadbal [-h] -p [-n ] [-r ] [-o ] [-slit] [-R ] [-S