From 0aadda4cc3c46db849a9e1e94bebe2558f02548b Mon Sep 17 00:00:00 2001 From: Philip Eisenlohr Date: Fri, 29 Jul 2016 17:45:37 -0400 Subject: [PATCH] improved cross-platform robustness of DAMASK_env(s) --- DAMASK_env.csh | 28 ++++++++++++++++------------ DAMASK_env.sh | 46 +++++++++++++++++++++++++--------------------- DAMASK_env.zsh | 46 ++++++++++++++++++++-------------------------- 3 files changed, 61 insertions(+), 59 deletions(-) diff --git a/DAMASK_env.csh b/DAMASK_env.csh index 7e3bf128d..78f8922cd 100644 --- a/DAMASK_env.csh +++ b/DAMASK_env.csh @@ -23,25 +23,29 @@ endif # according to http://software.intel.com/en-us/forums/topic/501500 # this seems to make sense for the stack size -set FREE=`which free` -set FREE='' -if ( "x$FREE" != "x" ) then +if ( `which free` != "free: Command not found." ) then set freeMem=`free -k | grep -E '(Mem|Speicher):' | awk '{print $4;}'` - set heap=`expr $freeMem / 2` set stack=`expr $freeMem / $DAMASK_NUM_THREADS / 2` + set heap=` expr $freeMem / 2` # http://superuser.com/questions/220059/what-parameters-has-ulimit limit stacksize $stack # maximum stack size (kB) - limit datasize $heap # maximum heap size (kB) + limit datasize $heap # maximum heap size (kB) +endif +if ( `limit | grep coredumpsize` != "" ) then + limit coredumpsize 0 # prevent core dumping +endif +if ( `limit | grep memoryuse` != "" ) then + limit memoryuse unlimited # maximum physical memory size +endif +if ( `limit | grep vmemoryuse` != "" ) then + limit vmemoryuse unlimited # maximum virtual memory size endif -limit coredumpsize 2000 # core file size (512-byte blocks) -limit vmemoryuse unlimited # maximum virtual memory size -limit memoryuse unlimited # maximum physical memory size # disable output in case of scp -if($?prompt) then +if ( $?prompt ) then echo '' - echo Düsseldorf Advanced Materials Simulation Kit - DAMASK - echo Max-Planck-Institut für Eisenforschung, Düsseldorf + echo Düsseldorf Advanced Materials Simulation Kit --- DAMASK + echo Max-Planck-Institut für Eisenforschung GmbH, Düsseldorf echo https://damask.mpie.de echo echo Using environment with ... @@ -59,8 +63,8 @@ if($?prompt) then echo "MSC.Marc/Mentat $MSC_ROOT" endif echo - echo `limit stacksize` echo `limit datasize` + echo `limit stacksize` endif setenv DAMASK_NUM_THREADS $DAMASK_NUM_THREADS diff --git a/DAMASK_env.sh b/DAMASK_env.sh index 8536a36ca..d9b5b004f 100644 --- a/DAMASK_env.sh +++ b/DAMASK_env.sh @@ -5,8 +5,8 @@ if [ "$OSTYPE" == "linux-gnu" ] || [ "$OSTYPE" == 'linux' ]; then DAMASK_ROOT=$(python -c "import os,sys; print(os.path.realpath(os.path.expanduser(sys.argv[1])))" "$(dirname $BASH_SOURCE)") else - [[ "${BASH_SOURCE::1}" == "/" ]] && BASE="" || BASE="`pwd`/" - STAT=$(stat "`dirname $BASE$BASH_SOURCE`") + [[ "${BASH_SOURCE::1}" == "/" ]] && BASE="" || BASE="$(pwd)/" + STAT=$(stat "$(dirname $BASE$BASH_SOURCE)") DAMASK_ROOT=${STAT##* } fi @@ -17,16 +17,16 @@ set() { source $DAMASK_ROOT/CONFIG unset -f set -# if DAMASK_BIN is present and not in $PATH, add it -if [[ "x$DAMASK_BIN" != "x" && ! `echo ":$PATH:" | grep $DAMASK_BIN:` ]]; then +# add DAMASK_BIN if present but not yet in $PATH +if [[ "x$DAMASK_BIN" != "x" && ! $(echo ":$PATH:" | grep $DAMASK_BIN:) ]]; then export PATH=$DAMASK_BIN:$PATH fi -SOLVER=`which DAMASK_spectral 2>/dev/null` +SOLVER=$(which DAMASK_spectral 2>/dev/null) if [ "x$SOLVER" == "x" ]; then SOLVER='Not found!' fi -PROCESSING=`which postResults 2>/dev/null` +PROCESSING=$(which postResults 2>/dev/null) if [ "x$PROCESSING" == "x" ]; then PROCESSING='Not found!' fi @@ -36,25 +36,22 @@ fi # according to http://software.intel.com/en-us/forums/topic/501500 # this seems to make sense for the stack size -FREE=`which free 2>/dev/null` +FREE=$(which free 2>/dev/null) if [ "x$FREE" != "x" ]; then - freeMem=`free -k | grep -E '(Mem|Speicher):' | awk '{print $4;}'` - heap=`expr $freeMem / 2` - stack=`expr $freeMem / $DAMASK_NUM_THREADS / 2` - + freeMem=$(free -k | grep -E '(Mem|Speicher):' | awk '{print $4;}') # http://superuser.com/questions/220059/what-parameters-has-ulimit - ulimit -s $stack 2>/dev/null # maximum stack size (kB) - ulimit -d $heap 2>/dev/null # maximum heap size (kB) + ulimit -s $(expr $freeMem / $DAMASK_NUM_THREADS / 2) 2>/dev/null # maximum stack size (kB) + ulimit -d $(expr $freeMem / 2) 2>/dev/null # maximum heap size (kB) fi -ulimit -c 2000 2>/dev/null # core file size (512-byte blocks) +ulimit -c 0 2>/dev/null # core file size (512-byte blocks) ulimit -v unlimited 2>/dev/null # maximum virtual memory size ulimit -m unlimited 2>/dev/null # maximum physical memory size # disable output in case of scp if [ ! -z "$PS1" ]; then echo - echo Düsseldorf Advanced Materials Simulation Kit - DAMASK - echo Max-Planck-Institut für Eisenforschung, Düsseldorf + echo Düsseldorf Advanced Materials Simulation Kit --- DAMASK + echo Max-Planck-Institut für Eisenforschung GmbH, Düsseldorf echo https://damask.mpie.de echo echo Using environment with ... @@ -64,14 +61,21 @@ if [ ! -z "$PS1" ]; then echo "Multithreading DAMASK_NUM_THREADS=$DAMASK_NUM_THREADS" if [ "x$PETSC_DIR" != "x" ]; then echo "PETSc location $PETSC_DIR" - [[ `python -c "import os,sys; print(os.path.realpath(os.path.expanduser(sys.argv[1])))" "$PETSC_DIR"` == $PETSC_DIR ]] \ - || echo " ~~> "`python -c "import os,sys; print(os.path.realpath(os.path.expanduser(sys.argv[1])))" "$PETSC_DIR"` + [[ $(python -c "import os,sys; print(os.path.realpath(os.path.expanduser(sys.argv[1])))" "$PETSC_DIR") == $PETSC_DIR ]] \ + || echo " ~~> "$(python -c "import os,sys; print(os.path.realpath(os.path.expanduser(sys.argv[1])))" "$PETSC_DIR") fi - [[ "x$PETSC_ARCH" != "x" ]] && echo "PETSc architecture $PETSC_ARCH" + [[ "x$PETSC_ARCH" == "x" ]] \ + || echo "PETSc architecture $PETSC_ARCH" echo "MSC.Marc/Mentat $MSC_ROOT" echo - echo -n "heap size/MiB "; echo "`ulimit -d`/1024" | bc - echo -n "stack size/MiB "; echo "`ulimit -s`/1024" | bc + echo -n "heap size " + [[ "$(ulimit -d)" == "unlimited" ]] \ + && echo "unlimited" \ + || echo $(python -c "import math; size=$(( 1024*$(ulimit -d) )); print '{:.4g} {}'.format(size / (1 << ((int(math.log(size,2) / 10) if size else 0) * 10)), ['bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'EiB', 'ZiB'][int(math.log(size,2) / 10) if size else 0])") + echo -n "stack size " + [[ "$(ulimit -s)" == "unlimited" ]] \ + && echo "unlimited" \ + || echo $(python -c "import math; size=$(( 1024*$(ulimit -s) )); print '{:.4g} {}'.format(size / (1 << ((int(math.log(size,2) / 10) if size else 0) * 10)), ['bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'EiB', 'ZiB'][int(math.log(size,2) / 10) if size else 0])") fi export DAMASK_NUM_THREADS diff --git a/DAMASK_env.zsh b/DAMASK_env.zsh index e434a97cf..082fa8007 100644 --- a/DAMASK_env.zsh +++ b/DAMASK_env.zsh @@ -1,12 +1,7 @@ # sets up an environment for DAMASK on zsh # usage: source DAMASK_env.zsh - -if [ "$OSTYPE" = "linux-gnu" ] || [ "$OSTYPE" = 'linux' ]; then - DAMASK_ROOT=$(readlink -f "`dirname ${(%):-%N}`") -else - print 'Not done yet' -fi +DAMASK_ROOT=${0:a:h} # defining set() allows to source the same file for tcsh and zsh, with and without space around = set() { @@ -15,45 +10,36 @@ set() { source $DAMASK_ROOT/CONFIG unset -f set -# if DAMASK_BIN is present and not in $PATH, add it +# add DAMASK_BIN if present but not yet in $PATH MATCH=`echo ":$PATH:" | grep $DAMASK_BIN:` if [[ ( "x$DAMASK_BIN" != "x" ) && ( "x$MATCH" = "x" ) ]]; then export PATH=$DAMASK_BIN:$PATH fi SOLVER=`which DAMASK_spectral 2>/dev/null` -if [ "x$SOLVER" = "x" ]; then - export SOLVER='Not found!' -fi PROCESSING=`which postResults 2>/dev/null` -if [ "x$PROCESSING" = "x" ]; then - export PROCESSING='Not found!' -fi if [ "x$DAMASK_NUM_THREADS" = "x" ]; then DAMASK_NUM_THREADS=1 fi # according to http://software.intel.com/en-us/forums/topic/501500 # this seems to make sense for the stack size -FREE=`which free 2>/dev/null` -if [ "x$FREE" != "x" ]; then +if [ "`which free 2>/dev/null`" != "free not found" ]; then freeMem=`free -k | grep -E '(Mem|Speicher):' | awk '{print $4;}'` - heap=`expr $freeMem / 2` - stack=`expr $freeMem / 2` # http://superuser.com/questions/220059/what-parameters-has-ulimit - ulimit -s $stack 2>/dev/null # maximum stack size (kB) - ulimit -d $heap 2>/dev/null # maximum heap size (kB) + ulimit -s `expr $freeMem / $DAMASK_NUM_THREADS / 2` 2>/dev/null # maximum stack size (kB) + ulimit -d `expr $freeMem / 2` 2>/dev/null # maximum heap size (kB) fi -ulimit -c 2000 2>/dev/null # core file size (512-byte blocks) +ulimit -c 0 2>/dev/null # core file size (512-byte blocks) ulimit -v unlimited 2>/dev/null # maximum virtual memory size ulimit -m unlimited 2>/dev/null # maximum physical memory size # disable output in case of scp if [ ! -z "$PS1" ]; then echo - echo Düsseldorf Advanced Materials Simulation Kit - DAMASK - echo Max-Planck-Institut für Eisenforschung, Düsseldorf + echo Düsseldorf Advanced Materials Simulation Kit --- DAMASK + echo Max-Planck-Institut für Eisenforschung GmbH, Düsseldorf echo https://damask.mpie.de echo echo Using environment with ... @@ -63,13 +49,21 @@ if [ ! -z "$PS1" ]; then echo "Multithreading DAMASK_NUM_THREADS=$DAMASK_NUM_THREADS" if [ "x$PETSC_DIR" != "x" ]; then echo "PETSc location $PETSC_DIR" - [[ `readlink -f $PETSC_DIR` == $PETSC_DIR ]] || echo " ~~> "`readlink -f $PETSC_DIR` + [[ $(python -c "import os,sys; print(os.path.realpath(os.path.expanduser(sys.argv[1])))" "$PETSC_DIR") == $PETSC_DIR ]] \ + || echo " ~~> "$(python -c "import os,sys; print(os.path.realpath(os.path.expanduser(sys.argv[1])))" "$PETSC_DIR") fi - [[ "x$PETSC_ARCH" != "x" ]] && echo "PETSc architecture $PETSC_ARCH" + [[ "x$PETSC_ARCH" == "x" ]] \ + || echo "PETSc architecture $PETSC_ARCH" echo "MSC.Marc/Mentat $MSC_ROOT" echo - echo -n "heap size/MiB "; echo "`ulimit -d`/1024" | bc - echo -n "stack size/MiB "; echo "`ulimit -s`/1024" | bc + echo -n "heap size " + [[ "$(ulimit -d)" == "unlimited" ]] \ + && echo "unlimited" \ + || echo $(python -c "import math; size=$(( 1024*$(ulimit -d) )); print '{:.4g} {}'.format(size / (1 << ((int(math.log(size,2) / 10) if size else 0) * 10)), ['bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'EiB', 'ZiB'][int(math.log(size,2) / 10) if size else 0])") + echo -n "stack size " + [[ "$(ulimit -s)" == "unlimited" ]] \ + && echo "unlimited" \ + || echo $(python -c "import math; size=$(( 1024*$(ulimit -s) )); print '{:.4g} {}'.format(size / (1 << ((int(math.log(size,2) / 10) if size else 0) * 10)), ['bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'EiB', 'ZiB'][int(math.log(size,2) / 10) if size else 0])") fi export DAMASK_NUM_THREADS