Merge remote-tracking branch 'origin/development' into export_DAMASK_to_DREAM3D
This commit is contained in:
commit
b5e34e7949
|
@ -2,7 +2,7 @@ name: Grid and Mesh Solver
|
|||
on: [push]
|
||||
|
||||
env:
|
||||
PETSC_VERSION: '3.18.4'
|
||||
PETSC_VERSION: '3.20.1'
|
||||
HOMEBREW_NO_ANALYTICS: 'ON' # Make Homebrew installation a little quicker
|
||||
HOMEBREW_NO_AUTO_UPDATE: 'ON'
|
||||
HOMEBREW_NO_BOTTLE_SOURCE_FALLBACK: 'ON'
|
||||
|
@ -17,7 +17,7 @@ jobs:
|
|||
|
||||
strategy:
|
||||
matrix:
|
||||
gcc_v: [9, 10, 11, 12]
|
||||
gcc_v: [9, 10, 11, 12, 13]
|
||||
fail-fast: false
|
||||
|
||||
env:
|
||||
|
@ -47,7 +47,7 @@ jobs:
|
|||
- name: PETSc - Download
|
||||
if: steps.petsc-download.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
wget -q https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-${PETSC_VERSION}.tar.gz -P download
|
||||
wget -q https://web.cels.anl.gov/projects/petsc/download/release-snapshots/petsc-${PETSC_VERSION}.tar.gz -P download
|
||||
|
||||
- name: PETSc - Prepare
|
||||
run: |
|
||||
|
@ -88,31 +88,22 @@ jobs:
|
|||
|
||||
intel:
|
||||
|
||||
runs-on: [ubuntu-22.04]
|
||||
runs-on: ubuntu-22.04
|
||||
container:
|
||||
image: intel/oneapi-hpckit:latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
intel_v: [classic, llvm] # Variant of Intel compilers
|
||||
fail-fast: false
|
||||
|
||||
env:
|
||||
INTEL_V: ${{ matrix.intel_v }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Intel - Install
|
||||
run: |
|
||||
wget -q https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
|
||||
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
|
||||
rm GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
|
||||
echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
|
||||
sudo apt-get update
|
||||
sudo apt-get install \
|
||||
intel-basekit \
|
||||
intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic intel-oneapi-compiler-fortran \
|
||||
intel-oneapi-openmp intel-oneapi-mkl-devel
|
||||
source /opt/intel/oneapi/setvars.sh
|
||||
apt-get update --allow-insecure-repositories
|
||||
apt-get install --allow-unauthenticated -y \
|
||||
cmake build-essential autoconf libtool \
|
||||
zlib1g-dev
|
||||
printenv >> $GITHUB_ENV
|
||||
|
||||
- name: PETSc - Cache download
|
||||
|
@ -125,15 +116,15 @@ jobs:
|
|||
- name: PETSc - Download
|
||||
if: steps.petsc-download.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
wget -q https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-${PETSC_VERSION}.tar.gz -P download
|
||||
wget -q https://web.cels.anl.gov/projects/petsc/download/release-snapshots/petsc-${PETSC_VERSION}.tar.gz -P download
|
||||
|
||||
- name: PETSc - Prepare
|
||||
run: |
|
||||
tar -xf download/petsc-${PETSC_VERSION}.tar.gz -C .
|
||||
sed -i "1719s/if not os.path.isfile(os.path.join(self.packageDir,'configure')):/if True:/g" \
|
||||
sed -i "1805s/if not os.path.isfile(os.path.join(self.packageDir,self.configureName)):/if True:/g" \
|
||||
./petsc-${PETSC_VERSION}/config/BuildSystem/config/package.py
|
||||
export PETSC_DIR=${PWD}/petsc-${PETSC_VERSION}
|
||||
export PETSC_ARCH=intel-${INTEL_V}
|
||||
export PETSC_ARCH=intel
|
||||
printenv >> $GITHUB_ENV
|
||||
|
||||
- name: PETSc - Cache installation
|
||||
|
@ -141,21 +132,9 @@ jobs:
|
|||
uses: actions/cache@v3
|
||||
with:
|
||||
path: petsc-${{ env.PETSC_VERSION }}
|
||||
key: petsc-${{ env.PETSC_VERSION }}-intel-${{ matrix.intel_v }}-${{ hashFiles('**/petscversion.h') }}
|
||||
key: petsc-${{ env.PETSC_VERSION }}-intel-${{ hashFiles('**/petscversion.h') }}
|
||||
|
||||
- name: PETSc - Install (classic)
|
||||
if: contains( matrix.intel_v, 'classic')
|
||||
run: |
|
||||
cd petsc-${PETSC_VERSION}
|
||||
./configure \
|
||||
--with-fc='mpiifort -fc=ifort -diag-disable=10441' \
|
||||
--with-cc='mpiicc -cc=icc -diag-disable=10441' \
|
||||
--with-cxx='mpiicpc -cxx=icpc -diag-disable=10441' \
|
||||
--download-fftw --download-hdf5 --download-hdf5-fortran-bindings=1 --download-zlib
|
||||
make all
|
||||
|
||||
- name: PETSc - Install (LLVM)
|
||||
if: contains( matrix.intel_v, 'llvm')
|
||||
- name: PETSc - Install
|
||||
run: |
|
||||
cd petsc-${PETSC_VERSION}
|
||||
./configure \
|
||||
|
@ -166,7 +145,6 @@ jobs:
|
|||
make all
|
||||
|
||||
- name: DAMASK - Compile
|
||||
if: contains( matrix.intel_v, 'classic')
|
||||
run: |
|
||||
cmake -B build/grid -DDAMASK_SOLVER=grid -DCMAKE_INSTALL_PREFIX=${PWD}
|
||||
cmake --build build/grid --parallel
|
||||
|
@ -175,18 +153,6 @@ jobs:
|
|||
cmake --build build/mesh --parallel
|
||||
cmake --install build/mesh
|
||||
|
||||
# ifx has issue with openMP
|
||||
# https://community.intel.com/t5/Intel-Fortran-Compiler/ifx-ICE-and-SEGFAULT/m-p/1459877
|
||||
- name: DAMASK - Compile
|
||||
if: contains( matrix.intel_v, 'llvm')
|
||||
run: |
|
||||
cmake -B build/grid -DDAMASK_SOLVER=grid -DCMAKE_INSTALL_PREFIX=${PWD} -DOPENMP=OFF
|
||||
cmake --build build/grid --parallel
|
||||
cmake --install build/grid
|
||||
cmake -B build/mesh -DDAMASK_SOLVER=mesh -DCMAKE_INSTALL_PREFIX=${PWD} -DOPENMP=OFF
|
||||
cmake --build build/mesh --parallel
|
||||
cmake --install build/mesh
|
||||
|
||||
- name: DAMASK - Run
|
||||
run: |
|
||||
./bin/DAMASK_grid -l tensionX.yaml -g 20grains16x16x16.vti -m material.yaml -w examples/grid
|
||||
|
|
|
@ -9,7 +9,7 @@ jobs:
|
|||
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ['3.8', '3.9', '3.10', '3.11']
|
||||
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
fail-fast: false
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ variables:
|
|||
PETSC_INTELLLVM: "Libraries/PETSc/3.16.3/oneAPI-2022.0.1-IntelMPI-2021.5.0"
|
||||
PETSC_INTEL: "Libraries/PETSc/3.16.5/Intel-2022.0.1-IntelMPI-2021.5.0"
|
||||
# ++++++++++++ MSC Marc +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
MSC: "FEM/MSC/2023.1"
|
||||
MSC: "FEM/MSC/2023.3"
|
||||
IntelMarc: "Compiler/Intel/19.1.2 Libraries/IMKL/2020"
|
||||
HDF5Marc: "HDF5/1.12.2/Intel-19.1.2"
|
||||
|
||||
|
|
|
@ -130,7 +130,10 @@ set(CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${CMAKE_Fortran_FLAGS_${CMAKE_BUILD
|
|||
set(CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -L${PETSC_LIBRARY_DIRS} -lpetsc ${PETSC_EXTERNAL_LIB} -lz")
|
||||
|
||||
if(fYAML_FOUND STREQUAL "1")
|
||||
set(CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} -L${fYAML_LIBRARY_DIRS} -l${fYAML_LIBRARIES}")
|
||||
set(CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} -L${fYAML_LIBRARY_DIRS}")
|
||||
foreach(fYAML_LIBRARY ${fYAML_LIBRARIES})
|
||||
set(CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} -L${fYAML_LIBRARY_DIRS} -l${fYAML_LIBRARY}")
|
||||
endforeach()
|
||||
add_definitions(-DFYAML)
|
||||
pkg_get_variable(fYAML_INCLUDE_DIR libfyaml includedir) # fYAML_INCLUDE_DIRS and fYAML_CFLAGS are not working
|
||||
set(CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}} -I${fYAML_INCLUDE_DIR}")
|
||||
|
|
|
@ -88,7 +88,7 @@ done
|
|||
secondLevel "Details on $DEFAULT_PYTHON:"
|
||||
echo $(ls -la $(which $DEFAULT_PYTHON))
|
||||
for MODULE in numpy scipy pandas matplotlib yaml h5py;do
|
||||
thirdLevel $module
|
||||
thirdLevel $MODULE
|
||||
$DEFAULT_PYTHON -c "import $MODULE; \
|
||||
print('Version: {}'.format($MODULE.__version__)); \
|
||||
print('Location: {}'.format($MODULE.__file__))"
|
||||
|
|
2
PRIVATE
2
PRIVATE
|
@ -1 +1 @@
|
|||
Subproject commit 9d2a98d72d9bf547dd697124cb795cf6a9668d30
|
||||
Subproject commit bc2c8e3b8f405fdda0d69a2900d9b94c7cc0936f
|
24
README.md
24
README.md
|
@ -1,6 +1,23 @@
|
|||
# DAMASK - The Düsseldorf Advanced Material Simulation Kit
|
||||
|
||||
Visit [damask.mpie.de](https://damask.mpie.de) for installation and usage instructions
|
||||
- Usage, installation, and support: https://damask.mpie.de
|
||||
- Code development: https://git.damask.mpie.de
|
||||
- General inquiries: damask@mpie.de
|
||||
|
||||
|
||||
## Repository Locations
|
||||
|
||||
### [git.damask.mpie.de](https://git.damask.mpie.de)
|
||||
|
||||
All code development is centralized in the principal DAMASK code repository hosted at [git.damask.mpie.de](https://git.damask.mpie.de).
|
||||
Access to this GitLab instance requires registration and is granted to anyone with an interest in actively supporting the development of DAMASK.
|
||||
|
||||
### [github.com](https://github.com)
|
||||
|
||||
GitHub hosts the publicly accessible, but read-only, mirror of the principal DAMASK code repository and replicates its three top-level branches from [git.damask.mpie.de](https://git.damask.mpie.de).
|
||||
|
||||
The site is primarily meant to provide a forum for [Discussions](https://github.com/eisenforschung/DAMASK/discussions) and [Issues](https://github.com/eisenforschung/DAMASK/issues).
|
||||
|
||||
|
||||
## Contact Information
|
||||
|
||||
|
@ -8,8 +25,3 @@ Max-Planck-Institut für Eisenforschung GmbH
|
|||
Max-Planck-Str. 1
|
||||
40237 Düsseldorf
|
||||
Germany
|
||||
|
||||
damask@mpie.de
|
||||
https://damask.mpie.de
|
||||
https://git.damask.mpie.de
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
type: Hooke
|
||||
|
||||
references:
|
||||
- R.A. Ayres et al.,
|
||||
Journal of Applied Physics 46:1526-1530, 1975,
|
||||
https://doi.org/10.1063/1.321804,
|
||||
fit to Table IV (T_min=100K, T_max=300K)
|
||||
|
||||
C_11: 524.6e+9
|
||||
C_11,T: -5.783e+07
|
||||
C_11,T^2: -1.355e+05
|
||||
|
||||
C_12: 219.0e+9
|
||||
C_12,T: 1.940e+07
|
||||
C_12,T^2: 7.634e+04
|
||||
|
||||
C_44: 168.7e+9
|
||||
C_44,T: -2.048e+07
|
||||
C_44,T^2: -5.478e+04
|
||||
|
||||
T_ref: 293.15
|
|
@ -0,0 +1,21 @@
|
|||
type: Hooke
|
||||
|
||||
references:
|
||||
- R.A. Ayres et al.,
|
||||
Journal of Applied Physics 46:1526-1530, 1975,
|
||||
https://doi.org/10.1063/1.321804,
|
||||
fit to Table IV (T_min=100K, T_max=300K)
|
||||
|
||||
C_11: 535.1e+9
|
||||
C_11,T: -6.459e+07
|
||||
C_11,T^2: -1.664e+05
|
||||
|
||||
C_12: 216.1e+9
|
||||
C_12,T: 2.357e+07
|
||||
C_12,T^2: 5.186e+04
|
||||
|
||||
C_44: 161.1e+9
|
||||
C_44,T: -1.498e+07
|
||||
C_44,T^2: -3.234e+04
|
||||
|
||||
T_ref: 293.15
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
+++
|
||||
@@ -6,18 +6,27 @@
|
||||
DIR=$1
|
||||
user=$3
|
||||
program=$4
|
||||
+usernoext=$user
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
+
|
||||
+# add BLAS options for linking
|
||||
+ BLAS="%BLAS%"
|
||||
+
|
||||
. $DIR/tools/include
|
||||
DIRJOB=$2
|
||||
cd $DIRJOB
|
||||
-echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
+echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
echo "program: $program"
|
||||
- $FORTRAN $user.f || \
|
||||
+ $DFORTHIGHMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- userobj=$user.o
|
||||
+ userobj=$usernoext.o
|
||||
|
||||
|
||||
$LOAD ${program} $DIR/lib/main.o\
|
||||
@@ -33,9 +42,13 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $BLAS \
|
||||
$SYSLIBS || \
|
||||
{
|
||||
- echo "$0: link failed for $user.o on host `hostname`"
|
||||
+ echo "$0: link failed for $usernoext.o on host `hostname`"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $userobj
|
||||
+ /bin/rm $DIRJOB/*.mod
|
||||
+ /bin/rm $DIRJOB/*.smod
|
||||
+ /bin/rm $DIRJOB/*_genmod.f90
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
+++
|
||||
@@ -6,18 +6,27 @@
|
||||
DIR=$1
|
||||
user=$3
|
||||
program=$4
|
||||
+usernoext=$user
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
+
|
||||
+# add BLAS options for linking
|
||||
+ BLAS="%BLAS%"
|
||||
+
|
||||
. $DIR/tools/include
|
||||
DIRJOB=$2
|
||||
cd $DIRJOB
|
||||
-echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
+echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
echo "program: $program"
|
||||
- $FORTRAN $user.f || \
|
||||
+ $DFORTRANLOWMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- userobj=$user.o
|
||||
+ userobj=$usernoext.o
|
||||
|
||||
|
||||
$LOAD ${program} $DIR/lib/main.o\
|
||||
@@ -33,9 +42,13 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $BLAS \
|
||||
$SYSLIBS || \
|
||||
{
|
||||
- echo "$0: link failed for $user.o on host `hostname`"
|
||||
+ echo "$0: link failed for $usernoext.o on host `hostname`"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $userobj
|
||||
+ /bin/rm $DIRJOB/*.mod
|
||||
+ /bin/rm $DIRJOB/*.smod
|
||||
+ /bin/rm $DIRJOB/*_genmod.f90
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
+++
|
||||
@@ -6,18 +6,27 @@
|
||||
DIR=$1
|
||||
user=$3
|
||||
program=$4
|
||||
+usernoext=$user
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
+
|
||||
+# add BLAS options for linking
|
||||
+ BLAS="%BLAS%"
|
||||
+
|
||||
. $DIR/tools/include
|
||||
DIRJOB=$2
|
||||
cd $DIRJOB
|
||||
-echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
+echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
echo "program: $program"
|
||||
- $FORTRAN $user.f || \
|
||||
+ $DFORTRANMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- userobj=$user.o
|
||||
+ userobj=$usernoext.o
|
||||
|
||||
|
||||
$LOAD ${program} $DIR/lib/main.o\
|
||||
@@ -33,9 +42,13 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $BLAS \
|
||||
$SYSLIBS || \
|
||||
{
|
||||
- echo "$0: link failed for $user.o on host `hostname`"
|
||||
+ echo "$0: link failed for $usernoext.o on host `hostname`"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $userobj
|
||||
+ /bin/rm $DIRJOB/*.mod
|
||||
+ /bin/rm $DIRJOB/*.smod
|
||||
+ /bin/rm $DIRJOB/*_genmod.f90
|
|
@ -0,0 +1,75 @@
|
|||
---
|
||||
+++
|
||||
@@ -172,6 +178,15 @@
|
||||
MARC_COSIM_LIB="$MSCCOSIM_HOME/CoSim$MSCCOSIM_VERSION/Dcosim$MSCCOSIM_VERSION/lib"
|
||||
fi
|
||||
|
||||
+# DAMASK uses the HDF5 compiler wrapper around the Intel compiler
|
||||
+H5FC=$(h5fc -shlib -show)
|
||||
+if [[ "$H5FC" == *"$dir is"* ]]; then
|
||||
+ H5FC=$(echo $(echo "$H5FC" | tail -n1) | sed -e "s/\-shlib/-fPIC -qopenmp/g")
|
||||
+ H5FC=${H5FC%-lmpifort*}
|
||||
+fi
|
||||
+HDF5_LIB=${H5FC//*ifort/}
|
||||
+FCOMP="$H5FC"
|
||||
+
|
||||
# AEM
|
||||
if test "$MARCDLLOUTDIR" = ""; then
|
||||
DLLOUTDIR="$MARC_LIB"
|
||||
@@ -599,7 +609,7 @@
|
||||
PROFILE=" $PROFILE -pg"
|
||||
fi
|
||||
|
||||
-FORT_OPT="-c -assume byterecl -safe-cray-ptr -mp1 -WB -fp-model source"
|
||||
+FORT_OPT="-c -implicitnone -stand f18 -standard-semantics -assume nostd_mod_proc_name -safe-cray-ptr -mp1 -WB -fp-model source"
|
||||
if test "$MTHREAD" = "OPENMP"
|
||||
then
|
||||
FORT_OPT=" $FORT_OPT -qopenmp"
|
||||
@@ -612,7 +621,7 @@
|
||||
FORT_OPT=" $FORT_OPT -save -zero"
|
||||
fi
|
||||
if test "$MARCHDF_HDF" = "HDF"; then
|
||||
- FORT_OPT="$FORT_OPT -DMARCHDF_HDF=$MARCHDF_HDF $HDF_INCLUDE"
|
||||
+ FORT_OPT="$FORT_OPT -DMARCHDF=$MARCHDF_HDF"
|
||||
fi
|
||||
|
||||
FORTLOW="$FCOMP $FORT_OPT $PROFILE -O0 $I8FFLAGS -I$MARC_SOURCE/common \
|
||||
@@ -626,6 +635,29 @@
|
||||
# for compiling free form f90 files. high opt, integer(4)
|
||||
FORTF90="$FCOMP -c -O3"
|
||||
|
||||
+# determine DAMASK version
|
||||
+if test -n "$DAMASK_USER"; then
|
||||
+ DAMASKROOT=`dirname $DAMASK_USER`/../..
|
||||
+ read DAMASKVERSION < $DAMASKROOT/VERSION
|
||||
+ DAMASKVERSION="'"$DAMASKVERSION"'"
|
||||
+else
|
||||
+ DAMASKVERSION="'N/A'"
|
||||
+fi
|
||||
+
|
||||
+# DAMASK compiler calls
|
||||
+DFORTLOWMP="$FCOMP -c -O0 -qno-offload -implicitnone -stand f18 -standard-semantics -assume nostd_mod_proc_name -safe-cray-ptr $PROFILE -zero -mp1 -WB $I8FFLAGS -I$MARC_SOURCE/common \
|
||||
+ -fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMARC4DAMASK=2023.2 -DDAMASKVERSION=$DAMASKVERSION \
|
||||
+ -qopenmp -qopenmp-threadprivate=compat\
|
||||
+ $MUMPS_INCLUDE $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS -I$KDTREE2_MOD -I$MARC_MOD"
|
||||
+DFORTRANMP="$FCOMP -c -O1 -qno-offload -implicitnone -stand f18 -standard-semantics -assume nostd_mod_proc_name -safe-cray-ptr $PROFILE -zero -mp1 -WB $I8FFLAGS -I$MARC_SOURCE/common \
|
||||
+ -fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMARC4DAMASK=2023.2 -DDAMASKVERSION=$DAMASKVERSION \
|
||||
+ -qopenmp -qopenmp-threadprivate=compat\
|
||||
+ $MUMPS_INCLUDE $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS -I$KDTREE2_MOD -I$MARC_MOD"
|
||||
+DFORTHIGHMP="$FCOMP -c -O3 -qno-offload -implicitnone -stand f18 -standard-semantics -assume nostd_mod_proc_name -safe-cray-ptr $PROFILE -zero -mp1 -WB $I8FFLAGS -I$MARC_SOURCE/common \
|
||||
+ -fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMARC4DAMASK=2023.2 -DDAMASKVERSION=$DAMASKVERSION \
|
||||
+ -qopenmp -qopenmp-threadprivate=compat\
|
||||
+ $MUMPS_INCLUDE $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS -I$KDTREE2_MOD -I$MARC_MOD"
|
||||
+
|
||||
if test "$MARCDEBUG" = "ON"
|
||||
then
|
||||
FORTLOW="$FCOMP $FORT_OPT $PROFILE $I8FFLAGS -I$MARC_SOURCE/common \
|
||||
@@ -783,7 +815,7 @@
|
||||
|
||||
SOLVERLIBS="${BCSSOLVERLIBS} ${VKISOLVERLIBS} ${CASISOLVERLIBS} ${MF2SOLVERLIBS} \
|
||||
-L$MARC_MKL \
|
||||
- $MARC_LIB/blas_src.a ${ACSI_LIB}/ACSI_MarcLib.a $KDTREE2_LIB/libkdtree2.a $MARC_LIB/libtetmeshinterface.a $MARC_LIB/libcaefatigueinterface.a -L$MARC_LIB -lmkl_blacs_intelmpi_ilp64 -lmkl_scalapack_ilp64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -ltetmesh -ltetadapt -lmeshgems -lmg-tetra -lmeshgems_stubs -lCATMshMesherCore -lCATMshCVMforCSM -lmg-hybrid -lmg-cadsurf -lmg-hexa $HDF_LIBS $SOLVER2LIBS $RTREE_LIB/librtree_lib.a $SFGEO_LIB/libgeo_lib.a"
|
||||
+ $MARC_LIB/blas_src.a ${ACSI_LIB}/ACSI_MarcLib.a $KDTREE2_LIB/libkdtree2.a $MARC_LIB/libtetmeshinterface.a $MARC_LIB/libcaefatigueinterface.a -L$MARC_LIB -lmkl_blacs_intelmpi_ilp64 -lmkl_scalapack_ilp64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -ltetmesh -ltetadapt -lmeshgems -lmg-tetra -lmeshgems_stubs -lCATMshMesherCore -lCATMshCVMforCSM -lmg-hybrid -lmg-cadsurf -lmg-hexa $HDF5_LIB $SOLVER2LIBS $RTREE_LIB/librtree_lib.a $SFGEO_LIB/libgeo_lib.a"
|
||||
|
||||
SOLVERLIBS_DLL=${SOLVERLIBS}
|
||||
if test "$AEM_DLL" -eq 1
|
|
@ -0,0 +1,517 @@
|
|||
---
|
||||
+++
|
||||
@@ -136,6 +136,11 @@
|
||||
# is created. For job running in the background, the log #
|
||||
# file is always created. Default is "yes" #
|
||||
##############################################################################
|
||||
+# remove all Mentat paths from LD_LIBRARY_PATH
|
||||
+LD_LIBRARY_PATH=:$LD_LIBRARY_PATH:
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([!(:)])mentat2023.2+([!(:)])/:}
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([(:)])/:}
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH#:}; LD_LIBRARY_PATH=${LD_LIBRARY_PATH%:}
|
||||
# set DIR to the directory in which this script is
|
||||
REALCOM="`/bin/ls -l $0 |awk '{ print $NF; }'`"
|
||||
DIR=`dirname $REALCOM`
|
||||
@@ -302,7 +307,23 @@
|
||||
|
||||
. "$DIR/getarch"
|
||||
|
||||
+
|
||||
+# getting user subroutine file name
|
||||
+found=0
|
||||
+for i in "$@"; do
|
||||
+ if test $found = 1; then
|
||||
+ DAMASK_USER=$i
|
||||
+ found=0
|
||||
+ fi
|
||||
+ case $i in
|
||||
+ -u* | -U*)
|
||||
+ found=1
|
||||
+ ;;
|
||||
+ esac
|
||||
+done
|
||||
+# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||
. $MARC_INCLUDE
|
||||
+
|
||||
#
|
||||
|
||||
#
|
||||
@@ -405,7 +426,7 @@
|
||||
did=
|
||||
vid=
|
||||
user=
|
||||
-usersubname=
|
||||
+usernoext=
|
||||
objs=
|
||||
qid=background
|
||||
cpu=
|
||||
@@ -676,50 +697,19 @@
|
||||
esac
|
||||
;;
|
||||
-u* | -U*)
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user
|
||||
- basefile=`$BASENAME $value`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user.f
|
||||
- elif test ${basefile##*.} = F
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F`
|
||||
- usersubname=$user.F
|
||||
- elif test ${basefile##*.} = f90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f90`
|
||||
- usersubname=$user.f90
|
||||
- elif test ${basefile##*.} = F90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F90`
|
||||
- usersubname=$user.F90
|
||||
- fi
|
||||
+ user=$value
|
||||
case $user in
|
||||
\/*)
|
||||
;;
|
||||
*)
|
||||
user=`pwd`/$user
|
||||
- usersubname=`pwd`/$usersubname
|
||||
;;
|
||||
esac
|
||||
- if test ! -f $usersubname
|
||||
- then
|
||||
- if test -f $usersubname.f
|
||||
- then
|
||||
- usersubname=$usersubname.f
|
||||
- elif test -f $usersubname.F
|
||||
- then
|
||||
- usersubname=$usersubname.F
|
||||
- elif test -f $usersubname.f90
|
||||
- then
|
||||
- usersubname=$usersubname.f90
|
||||
- elif test -f $usersubname.F90
|
||||
- then
|
||||
- usersubname=$usersubname.F90
|
||||
- fi
|
||||
- fi
|
||||
+ usernoext=$user
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
;;
|
||||
-obj | -OBJ)
|
||||
objs="$value"
|
||||
@@ -1207,12 +1197,12 @@
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
- if test "$usersubname"
|
||||
+ if test "$user"
|
||||
then
|
||||
- if test ! -f $usersubname
|
||||
+ if test ! -f $user
|
||||
then
|
||||
error="$error
|
||||
-user subroutine file $usersubname not accessible"
|
||||
+user subroutine file $user not accessible"
|
||||
fi
|
||||
fi
|
||||
if test "$objs"
|
||||
@@ -1531,7 +1521,7 @@
|
||||
Marc shared lib : $progdll
|
||||
Version type : $mode
|
||||
Job ID : $DIRJID/$jid$extra_job_info
|
||||
-User subroutine name : $usersubname
|
||||
+User subroutine name : $user
|
||||
User objects/libs : $objs
|
||||
Restart file job ID : $rid
|
||||
Substructure file ID : $sid
|
||||
@@ -1564,7 +1554,7 @@
|
||||
Marc shared lib : $progdll
|
||||
Version type : $mode
|
||||
Job ID : $DIRJID/$jid$extra_job_info
|
||||
-User subroutine name : $usersubname
|
||||
+User subroutine name : $user
|
||||
User objects/libs : $objs
|
||||
Restart file job ID : $rid
|
||||
Substructure file ID : $sid
|
||||
@@ -1687,7 +1677,7 @@
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
- $ECHO "User subroutine name ($usersubname)? $ECHOTXT"
|
||||
+ $ECHO "User subroutine name ($user)? $ECHOTXT"
|
||||
read value
|
||||
if test "$value"
|
||||
then
|
||||
@@ -1696,50 +1686,19 @@
|
||||
user=
|
||||
;;
|
||||
*)
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user
|
||||
- basefile=`$BASENAME $value`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user.f
|
||||
- elif test ${basefile##*.} = F
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F`
|
||||
- usersubname=$user.F
|
||||
- elif test ${basefile##*.} = f90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f90`
|
||||
- usersubname=$user.f90
|
||||
- elif test ${basefile##*.} = F90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F90`
|
||||
- usersubname=$user.F90
|
||||
- fi
|
||||
+ user=$value
|
||||
case $user in
|
||||
\/*)
|
||||
;;
|
||||
*)
|
||||
user=`pwd`/$user
|
||||
- usersubname=`pwd`/$usersubname
|
||||
;;
|
||||
esac
|
||||
- if test ! -f $usersubname
|
||||
- then
|
||||
- if test -f $usersubname.f
|
||||
- then
|
||||
- usersubname=$usersubname.f
|
||||
- elif test -f $usersubname.F
|
||||
- then
|
||||
- usersubname=$usersubname.F
|
||||
- elif test -f $usersubname.f90
|
||||
- then
|
||||
- usersubname=$usersubname.f90
|
||||
- elif test -f $usersubname.F90
|
||||
- then
|
||||
- usersubname=$usersubname.F90
|
||||
- fi
|
||||
- fi
|
||||
+ usernoext=$user
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -2274,11 +2233,12 @@
|
||||
#
|
||||
# user subroutine used
|
||||
#
|
||||
+# add DAMASK options for linking
|
||||
+ DAMASK="-lstdc++"
|
||||
|
||||
if test "$user"
|
||||
then
|
||||
-# program=$user.marc
|
||||
- program=$DIRJOB/`$BASENAME $user .f`.marc
|
||||
+ program=$usernoext.marc
|
||||
case $program in
|
||||
\/* | \.\/*)
|
||||
bd=
|
||||
@@ -2391,7 +2351,7 @@
|
||||
fi
|
||||
if test "$user"
|
||||
then
|
||||
- execpath=$DIRJOB/`$BASENAME $user .f`.marc
|
||||
+ execpath=$usernoext.marc
|
||||
usersub=1
|
||||
fi
|
||||
export execpath
|
||||
@@ -3274,44 +3234,27 @@
|
||||
echo
|
||||
if test "$user"
|
||||
then
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
- fi
|
||||
-
|
||||
+ userobj=$usernoext.o
|
||||
fi
|
||||
cat > $jid.runmarcscript << END4
|
||||
if test "$user"
|
||||
then
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- fi
|
||||
if test $MACHINENAME = "CRAY"
|
||||
then
|
||||
- $FORTRAN $usersub || \
|
||||
+ $DFORTHIGHMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
else
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTHIGHMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
fi
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -3332,6 +3275,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -3345,6 +3289,9 @@
|
||||
prgsav=yes
|
||||
fi
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
|
||||
#
|
||||
# run marc
|
||||
@@ -3391,7 +3338,7 @@
|
||||
fi
|
||||
else
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes
|
||||
@@ -3557,7 +3504,7 @@
|
||||
# first copy over the user sub if local directories
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RCP $user.f $i:$DIR1/
|
||||
+ $RCP $user $i:$DIR1/
|
||||
fi
|
||||
# do the compilation on the other machine
|
||||
if test ${dirstatus[$counter]} = "shared"
|
||||
@@ -3570,21 +3517,21 @@
|
||||
remoteuser=$DIR1/`$BASENAME $user`
|
||||
$RSH $i /bin/rm $remoteprog 2> /dev/null
|
||||
echo
|
||||
- $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
+ $RSH $i $DIR2/tools/comp_damask_hmp $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
# check if successful, the new executable should be there
|
||||
line=`$RSH $i /bin/ls $remoteprog 2> /dev/null`
|
||||
if test "$line"
|
||||
then
|
||||
echo compilation and linking successful on host $i
|
||||
else
|
||||
- echo "$0: compile failed for $user.f on host $i"
|
||||
+ echo "$0: compile failed for $user on host $i"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
fi
|
||||
# remove the user subroutine on remote machine
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RSH $i /bin/rm $remoteuser.f 2> /dev/null
|
||||
+ $RSH $i /bin/rm $remoteuser 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -3594,39 +3541,27 @@
|
||||
if test "$userhost"
|
||||
then
|
||||
echo
|
||||
- echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
- fi
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
+ echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
fi
|
||||
+ userobj=$usernoext.o
|
||||
if test $MACHINENAME = "CRAY"
|
||||
then
|
||||
- $FORTRAN $usersub || \
|
||||
+ $DFORTHIGHMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
else
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTHIGHMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
fi
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi # if test $user
|
||||
|
||||
|
||||
@@ -3647,6 +3582,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -3688,6 +3624,9 @@
|
||||
prgsav=yes
|
||||
fi # if test $link
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
|
||||
#
|
||||
# run marc
|
||||
@@ -3781,7 +3720,7 @@
|
||||
else
|
||||
#dllrun >0
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes;then
|
||||
@@ -3906,7 +3845,7 @@
|
||||
# first copy over the user sub if local directories
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RCP $user.f $i:$DIR1/
|
||||
+ $RCP $user $i:$DIR1/
|
||||
fi
|
||||
# do the compilation on the other machine
|
||||
if test ${dirstatus[$counter]} = "shared"
|
||||
@@ -3919,20 +3858,20 @@
|
||||
remoteuser=$DIR1/`$BASENAME $user`
|
||||
$RSH $i /bin/rm $remoteprog 2> /dev/null
|
||||
echo
|
||||
- $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
+ $RSH $i $DIR2/tools/comp_damask_hmp $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
# check if successful, the new executable should be there
|
||||
line=`$RSH $i /bin/ls $remoteprog 2> /dev/null`
|
||||
if test "$line"
|
||||
then
|
||||
echo compilation and linking successful on host $i
|
||||
else
|
||||
- echo "$0: compile failed for $user.f on host $i"
|
||||
+ echo "$0: compile failed for $user on host $i"
|
||||
exit 1
|
||||
fi
|
||||
# remove the user subroutine on remote machine
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RSH $i /bin/rm $remoteuser.f 2> /dev/null
|
||||
+ $RSH $i /bin/rm $remoteuser 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -3942,37 +3881,25 @@
|
||||
if test "$userhost"
|
||||
then
|
||||
echo
|
||||
- echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
- fi
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
+ echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
fi
|
||||
+ userobj=$usernoext.o
|
||||
if test $MACHINENAME = "CRAY"
|
||||
then
|
||||
- $FORTRAN $usersub || \
|
||||
+ $DFORTHIGHMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
else
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTHIGHMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
fi
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi # if test $user
|
||||
|
||||
|
||||
@@ -3993,6 +3920,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -4033,7 +3961,9 @@
|
||||
prgsav=yes
|
||||
fi # if test $link
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
-
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
# done if no job id given
|
||||
if test -z "$jid"
|
||||
then
|
||||
@@ -4152,7 +4082,7 @@
|
||||
else
|
||||
#dllrun >0
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes;then
|
|
@ -0,0 +1,517 @@
|
|||
---
|
||||
+++
|
||||
@@ -136,6 +136,11 @@
|
||||
# is created. For job running in the background, the log #
|
||||
# file is always created. Default is "yes" #
|
||||
##############################################################################
|
||||
+# remove all Mentat paths from LD_LIBRARY_PATH
|
||||
+LD_LIBRARY_PATH=:$LD_LIBRARY_PATH:
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([!(:)])mentat2023.2+([!(:)])/:}
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([(:)])/:}
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH#:}; LD_LIBRARY_PATH=${LD_LIBRARY_PATH%:}
|
||||
# set DIR to the directory in which this script is
|
||||
REALCOM="`/bin/ls -l $0 |awk '{ print $NF; }'`"
|
||||
DIR=`dirname $REALCOM`
|
||||
@@ -302,7 +307,23 @@
|
||||
|
||||
. "$DIR/getarch"
|
||||
|
||||
+
|
||||
+# getting user subroutine file name
|
||||
+found=0
|
||||
+for i in "$@"; do
|
||||
+ if test $found = 1; then
|
||||
+ DAMASK_USER=$i
|
||||
+ found=0
|
||||
+ fi
|
||||
+ case $i in
|
||||
+ -u* | -U*)
|
||||
+ found=1
|
||||
+ ;;
|
||||
+ esac
|
||||
+done
|
||||
+# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||
. $MARC_INCLUDE
|
||||
+
|
||||
#
|
||||
|
||||
#
|
||||
@@ -405,7 +426,7 @@
|
||||
did=
|
||||
vid=
|
||||
user=
|
||||
-usersubname=
|
||||
+usernoext=
|
||||
objs=
|
||||
qid=background
|
||||
cpu=
|
||||
@@ -676,50 +697,19 @@
|
||||
esac
|
||||
;;
|
||||
-u* | -U*)
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user
|
||||
- basefile=`$BASENAME $value`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user.f
|
||||
- elif test ${basefile##*.} = F
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F`
|
||||
- usersubname=$user.F
|
||||
- elif test ${basefile##*.} = f90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f90`
|
||||
- usersubname=$user.f90
|
||||
- elif test ${basefile##*.} = F90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F90`
|
||||
- usersubname=$user.F90
|
||||
- fi
|
||||
+ user=$value
|
||||
case $user in
|
||||
\/*)
|
||||
;;
|
||||
*)
|
||||
user=`pwd`/$user
|
||||
- usersubname=`pwd`/$usersubname
|
||||
;;
|
||||
esac
|
||||
- if test ! -f $usersubname
|
||||
- then
|
||||
- if test -f $usersubname.f
|
||||
- then
|
||||
- usersubname=$usersubname.f
|
||||
- elif test -f $usersubname.F
|
||||
- then
|
||||
- usersubname=$usersubname.F
|
||||
- elif test -f $usersubname.f90
|
||||
- then
|
||||
- usersubname=$usersubname.f90
|
||||
- elif test -f $usersubname.F90
|
||||
- then
|
||||
- usersubname=$usersubname.F90
|
||||
- fi
|
||||
- fi
|
||||
+ usernoext=$user
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
;;
|
||||
-obj | -OBJ)
|
||||
objs="$value"
|
||||
@@ -1207,12 +1197,12 @@
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
- if test "$usersubname"
|
||||
+ if test "$user"
|
||||
then
|
||||
- if test ! -f $usersubname
|
||||
+ if test ! -f $user
|
||||
then
|
||||
error="$error
|
||||
-user subroutine file $usersubname not accessible"
|
||||
+user subroutine file $user not accessible"
|
||||
fi
|
||||
fi
|
||||
if test "$objs"
|
||||
@@ -1531,7 +1521,7 @@
|
||||
Marc shared lib : $progdll
|
||||
Version type : $mode
|
||||
Job ID : $DIRJID/$jid$extra_job_info
|
||||
-User subroutine name : $usersubname
|
||||
+User subroutine name : $user
|
||||
User objects/libs : $objs
|
||||
Restart file job ID : $rid
|
||||
Substructure file ID : $sid
|
||||
@@ -1564,7 +1554,7 @@
|
||||
Marc shared lib : $progdll
|
||||
Version type : $mode
|
||||
Job ID : $DIRJID/$jid$extra_job_info
|
||||
-User subroutine name : $usersubname
|
||||
+User subroutine name : $user
|
||||
User objects/libs : $objs
|
||||
Restart file job ID : $rid
|
||||
Substructure file ID : $sid
|
||||
@@ -1687,7 +1677,7 @@
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
- $ECHO "User subroutine name ($usersubname)? $ECHOTXT"
|
||||
+ $ECHO "User subroutine name ($user)? $ECHOTXT"
|
||||
read value
|
||||
if test "$value"
|
||||
then
|
||||
@@ -1696,50 +1686,19 @@
|
||||
user=
|
||||
;;
|
||||
*)
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user
|
||||
- basefile=`$BASENAME $value`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user.f
|
||||
- elif test ${basefile##*.} = F
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F`
|
||||
- usersubname=$user.F
|
||||
- elif test ${basefile##*.} = f90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f90`
|
||||
- usersubname=$user.f90
|
||||
- elif test ${basefile##*.} = F90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F90`
|
||||
- usersubname=$user.F90
|
||||
- fi
|
||||
+ user=$value
|
||||
case $user in
|
||||
\/*)
|
||||
;;
|
||||
*)
|
||||
user=`pwd`/$user
|
||||
- usersubname=`pwd`/$usersubname
|
||||
;;
|
||||
esac
|
||||
- if test ! -f $usersubname
|
||||
- then
|
||||
- if test -f $usersubname.f
|
||||
- then
|
||||
- usersubname=$usersubname.f
|
||||
- elif test -f $usersubname.F
|
||||
- then
|
||||
- usersubname=$usersubname.F
|
||||
- elif test -f $usersubname.f90
|
||||
- then
|
||||
- usersubname=$usersubname.f90
|
||||
- elif test -f $usersubname.F90
|
||||
- then
|
||||
- usersubname=$usersubname.F90
|
||||
- fi
|
||||
- fi
|
||||
+ usernoext=$user
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -2274,11 +2233,12 @@
|
||||
#
|
||||
# user subroutine used
|
||||
#
|
||||
+# add DAMASK options for linking
|
||||
+ DAMASK="-lstdc++"
|
||||
|
||||
if test "$user"
|
||||
then
|
||||
-# program=$user.marc
|
||||
- program=$DIRJOB/`$BASENAME $user .f`.marc
|
||||
+ program=$usernoext.marc
|
||||
case $program in
|
||||
\/* | \.\/*)
|
||||
bd=
|
||||
@@ -2391,7 +2351,7 @@
|
||||
fi
|
||||
if test "$user"
|
||||
then
|
||||
- execpath=$DIRJOB/`$BASENAME $user .f`.marc
|
||||
+ execpath=$usernoext.marc
|
||||
usersub=1
|
||||
fi
|
||||
export execpath
|
||||
@@ -3274,44 +3234,27 @@
|
||||
echo
|
||||
if test "$user"
|
||||
then
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
- fi
|
||||
-
|
||||
+ userobj=$usernoext.o
|
||||
fi
|
||||
cat > $jid.runmarcscript << END4
|
||||
if test "$user"
|
||||
then
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- fi
|
||||
if test $MACHINENAME = "CRAY"
|
||||
then
|
||||
- $FORTRAN $usersub || \
|
||||
+ $DFORTLOWMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
else
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTLOWMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
fi
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -3332,6 +3275,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -3345,6 +3289,9 @@
|
||||
prgsav=yes
|
||||
fi
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
|
||||
#
|
||||
# run marc
|
||||
@@ -3391,7 +3338,7 @@
|
||||
fi
|
||||
else
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes
|
||||
@@ -3557,7 +3504,7 @@
|
||||
# first copy over the user sub if local directories
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RCP $user.f $i:$DIR1/
|
||||
+ $RCP $user $i:$DIR1/
|
||||
fi
|
||||
# do the compilation on the other machine
|
||||
if test ${dirstatus[$counter]} = "shared"
|
||||
@@ -3570,21 +3517,21 @@
|
||||
remoteuser=$DIR1/`$BASENAME $user`
|
||||
$RSH $i /bin/rm $remoteprog 2> /dev/null
|
||||
echo
|
||||
- $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
+ $RSH $i $DIR2/tools/comp_damask_lmp $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
# check if successful, the new executable should be there
|
||||
line=`$RSH $i /bin/ls $remoteprog 2> /dev/null`
|
||||
if test "$line"
|
||||
then
|
||||
echo compilation and linking successful on host $i
|
||||
else
|
||||
- echo "$0: compile failed for $user.f on host $i"
|
||||
+ echo "$0: compile failed for $user on host $i"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
fi
|
||||
# remove the user subroutine on remote machine
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RSH $i /bin/rm $remoteuser.f 2> /dev/null
|
||||
+ $RSH $i /bin/rm $remoteuser 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -3594,39 +3541,27 @@
|
||||
if test "$userhost"
|
||||
then
|
||||
echo
|
||||
- echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
- fi
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
+ echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
fi
|
||||
+ userobj=$usernoext.o
|
||||
if test $MACHINENAME = "CRAY"
|
||||
then
|
||||
- $FORTRAN $usersub || \
|
||||
+ $DFORTLOWMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
else
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTLOWMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
fi
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi # if test $user
|
||||
|
||||
|
||||
@@ -3647,6 +3582,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -3688,6 +3624,9 @@
|
||||
prgsav=yes
|
||||
fi # if test $link
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
|
||||
#
|
||||
# run marc
|
||||
@@ -3781,7 +3720,7 @@
|
||||
else
|
||||
#dllrun >0
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes;then
|
||||
@@ -3906,7 +3845,7 @@
|
||||
# first copy over the user sub if local directories
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RCP $user.f $i:$DIR1/
|
||||
+ $RCP $user $i:$DIR1/
|
||||
fi
|
||||
# do the compilation on the other machine
|
||||
if test ${dirstatus[$counter]} = "shared"
|
||||
@@ -3919,20 +3858,20 @@
|
||||
remoteuser=$DIR1/`$BASENAME $user`
|
||||
$RSH $i /bin/rm $remoteprog 2> /dev/null
|
||||
echo
|
||||
- $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
+ $RSH $i $DIR2/tools/comp_damask_lmp $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
# check if successful, the new executable should be there
|
||||
line=`$RSH $i /bin/ls $remoteprog 2> /dev/null`
|
||||
if test "$line"
|
||||
then
|
||||
echo compilation and linking successful on host $i
|
||||
else
|
||||
- echo "$0: compile failed for $user.f on host $i"
|
||||
+ echo "$0: compile failed for $user on host $i"
|
||||
exit 1
|
||||
fi
|
||||
# remove the user subroutine on remote machine
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RSH $i /bin/rm $remoteuser.f 2> /dev/null
|
||||
+ $RSH $i /bin/rm $remoteuser 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -3942,37 +3881,25 @@
|
||||
if test "$userhost"
|
||||
then
|
||||
echo
|
||||
- echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
- fi
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
+ echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
fi
|
||||
+ userobj=$usernoext.o
|
||||
if test $MACHINENAME = "CRAY"
|
||||
then
|
||||
- $FORTRAN $usersub || \
|
||||
+ $DFORTLOWMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
else
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTLOWMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
fi
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi # if test $user
|
||||
|
||||
|
||||
@@ -3993,6 +3920,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -4033,7 +3961,9 @@
|
||||
prgsav=yes
|
||||
fi # if test $link
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
-
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
# done if no job id given
|
||||
if test -z "$jid"
|
||||
then
|
||||
@@ -4152,7 +4082,7 @@
|
||||
else
|
||||
#dllrun >0
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes;then
|
|
@ -0,0 +1,517 @@
|
|||
---
|
||||
+++
|
||||
@@ -136,6 +136,11 @@
|
||||
# is created. For job running in the background, the log #
|
||||
# file is always created. Default is "yes" #
|
||||
##############################################################################
|
||||
+# remove all Mentat paths from LD_LIBRARY_PATH
|
||||
+LD_LIBRARY_PATH=:$LD_LIBRARY_PATH:
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([!(:)])mentat2023.2+([!(:)])/:}
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([(:)])/:}
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH#:}; LD_LIBRARY_PATH=${LD_LIBRARY_PATH%:}
|
||||
# set DIR to the directory in which this script is
|
||||
REALCOM="`/bin/ls -l $0 |awk '{ print $NF; }'`"
|
||||
DIR=`dirname $REALCOM`
|
||||
@@ -302,7 +307,23 @@
|
||||
|
||||
. "$DIR/getarch"
|
||||
|
||||
+
|
||||
+# getting user subroutine file name
|
||||
+found=0
|
||||
+for i in "$@"; do
|
||||
+ if test $found = 1; then
|
||||
+ DAMASK_USER=$i
|
||||
+ found=0
|
||||
+ fi
|
||||
+ case $i in
|
||||
+ -u* | -U*)
|
||||
+ found=1
|
||||
+ ;;
|
||||
+ esac
|
||||
+done
|
||||
+# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||
. $MARC_INCLUDE
|
||||
+
|
||||
#
|
||||
|
||||
#
|
||||
@@ -405,7 +426,7 @@
|
||||
did=
|
||||
vid=
|
||||
user=
|
||||
-usersubname=
|
||||
+usernoext=
|
||||
objs=
|
||||
qid=background
|
||||
cpu=
|
||||
@@ -676,50 +697,19 @@
|
||||
esac
|
||||
;;
|
||||
-u* | -U*)
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user
|
||||
- basefile=`$BASENAME $value`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user.f
|
||||
- elif test ${basefile##*.} = F
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F`
|
||||
- usersubname=$user.F
|
||||
- elif test ${basefile##*.} = f90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f90`
|
||||
- usersubname=$user.f90
|
||||
- elif test ${basefile##*.} = F90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F90`
|
||||
- usersubname=$user.F90
|
||||
- fi
|
||||
+ user=$value
|
||||
case $user in
|
||||
\/*)
|
||||
;;
|
||||
*)
|
||||
user=`pwd`/$user
|
||||
- usersubname=`pwd`/$usersubname
|
||||
;;
|
||||
esac
|
||||
- if test ! -f $usersubname
|
||||
- then
|
||||
- if test -f $usersubname.f
|
||||
- then
|
||||
- usersubname=$usersubname.f
|
||||
- elif test -f $usersubname.F
|
||||
- then
|
||||
- usersubname=$usersubname.F
|
||||
- elif test -f $usersubname.f90
|
||||
- then
|
||||
- usersubname=$usersubname.f90
|
||||
- elif test -f $usersubname.F90
|
||||
- then
|
||||
- usersubname=$usersubname.F90
|
||||
- fi
|
||||
- fi
|
||||
+ usernoext=$user
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
;;
|
||||
-obj | -OBJ)
|
||||
objs="$value"
|
||||
@@ -1207,12 +1197,12 @@
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
- if test "$usersubname"
|
||||
+ if test "$user"
|
||||
then
|
||||
- if test ! -f $usersubname
|
||||
+ if test ! -f $user
|
||||
then
|
||||
error="$error
|
||||
-user subroutine file $usersubname not accessible"
|
||||
+user subroutine file $user not accessible"
|
||||
fi
|
||||
fi
|
||||
if test "$objs"
|
||||
@@ -1531,7 +1521,7 @@
|
||||
Marc shared lib : $progdll
|
||||
Version type : $mode
|
||||
Job ID : $DIRJID/$jid$extra_job_info
|
||||
-User subroutine name : $usersubname
|
||||
+User subroutine name : $user
|
||||
User objects/libs : $objs
|
||||
Restart file job ID : $rid
|
||||
Substructure file ID : $sid
|
||||
@@ -1564,7 +1554,7 @@
|
||||
Marc shared lib : $progdll
|
||||
Version type : $mode
|
||||
Job ID : $DIRJID/$jid$extra_job_info
|
||||
-User subroutine name : $usersubname
|
||||
+User subroutine name : $user
|
||||
User objects/libs : $objs
|
||||
Restart file job ID : $rid
|
||||
Substructure file ID : $sid
|
||||
@@ -1687,7 +1677,7 @@
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
- $ECHO "User subroutine name ($usersubname)? $ECHOTXT"
|
||||
+ $ECHO "User subroutine name ($user)? $ECHOTXT"
|
||||
read value
|
||||
if test "$value"
|
||||
then
|
||||
@@ -1696,50 +1686,19 @@
|
||||
user=
|
||||
;;
|
||||
*)
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user
|
||||
- basefile=`$BASENAME $value`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user.f
|
||||
- elif test ${basefile##*.} = F
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F`
|
||||
- usersubname=$user.F
|
||||
- elif test ${basefile##*.} = f90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f90`
|
||||
- usersubname=$user.f90
|
||||
- elif test ${basefile##*.} = F90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F90`
|
||||
- usersubname=$user.F90
|
||||
- fi
|
||||
+ user=$value
|
||||
case $user in
|
||||
\/*)
|
||||
;;
|
||||
*)
|
||||
user=`pwd`/$user
|
||||
- usersubname=`pwd`/$usersubname
|
||||
;;
|
||||
esac
|
||||
- if test ! -f $usersubname
|
||||
- then
|
||||
- if test -f $usersubname.f
|
||||
- then
|
||||
- usersubname=$usersubname.f
|
||||
- elif test -f $usersubname.F
|
||||
- then
|
||||
- usersubname=$usersubname.F
|
||||
- elif test -f $usersubname.f90
|
||||
- then
|
||||
- usersubname=$usersubname.f90
|
||||
- elif test -f $usersubname.F90
|
||||
- then
|
||||
- usersubname=$usersubname.F90
|
||||
- fi
|
||||
- fi
|
||||
+ usernoext=$user
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -2274,11 +2233,12 @@
|
||||
#
|
||||
# user subroutine used
|
||||
#
|
||||
+# add DAMASK options for linking
|
||||
+ DAMASK="-lstdc++"
|
||||
|
||||
if test "$user"
|
||||
then
|
||||
-# program=$user.marc
|
||||
- program=$DIRJOB/`$BASENAME $user .f`.marc
|
||||
+ program=$usernoext.marc
|
||||
case $program in
|
||||
\/* | \.\/*)
|
||||
bd=
|
||||
@@ -2391,7 +2351,7 @@
|
||||
fi
|
||||
if test "$user"
|
||||
then
|
||||
- execpath=$DIRJOB/`$BASENAME $user .f`.marc
|
||||
+ execpath=$usernoext.marc
|
||||
usersub=1
|
||||
fi
|
||||
export execpath
|
||||
@@ -3274,44 +3234,27 @@
|
||||
echo
|
||||
if test "$user"
|
||||
then
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
- fi
|
||||
-
|
||||
+ userobj=$usernoext.o
|
||||
fi
|
||||
cat > $jid.runmarcscript << END4
|
||||
if test "$user"
|
||||
then
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- fi
|
||||
if test $MACHINENAME = "CRAY"
|
||||
then
|
||||
- $FORTRAN $usersub || \
|
||||
+ $DFORTRANMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
else
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTRANMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
fi
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -3332,6 +3275,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -3345,6 +3289,9 @@
|
||||
prgsav=yes
|
||||
fi
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
|
||||
#
|
||||
# run marc
|
||||
@@ -3391,7 +3338,7 @@
|
||||
fi
|
||||
else
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes
|
||||
@@ -3557,7 +3504,7 @@
|
||||
# first copy over the user sub if local directories
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RCP $user.f $i:$DIR1/
|
||||
+ $RCP $user $i:$DIR1/
|
||||
fi
|
||||
# do the compilation on the other machine
|
||||
if test ${dirstatus[$counter]} = "shared"
|
||||
@@ -3570,21 +3517,21 @@
|
||||
remoteuser=$DIR1/`$BASENAME $user`
|
||||
$RSH $i /bin/rm $remoteprog 2> /dev/null
|
||||
echo
|
||||
- $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
+ $RSH $i $DIR2/tools/comp_damask_mp $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
# check if successful, the new executable should be there
|
||||
line=`$RSH $i /bin/ls $remoteprog 2> /dev/null`
|
||||
if test "$line"
|
||||
then
|
||||
echo compilation and linking successful on host $i
|
||||
else
|
||||
- echo "$0: compile failed for $user.f on host $i"
|
||||
+ echo "$0: compile failed for $user on host $i"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
fi
|
||||
# remove the user subroutine on remote machine
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RSH $i /bin/rm $remoteuser.f 2> /dev/null
|
||||
+ $RSH $i /bin/rm $remoteuser 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -3594,39 +3541,27 @@
|
||||
if test "$userhost"
|
||||
then
|
||||
echo
|
||||
- echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
- fi
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
+ echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
fi
|
||||
+ userobj=$usernoext.o
|
||||
if test $MACHINENAME = "CRAY"
|
||||
then
|
||||
- $FORTRAN $usersub || \
|
||||
+ $DFORTRANMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
else
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTRANMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
fi
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi # if test $user
|
||||
|
||||
|
||||
@@ -3647,6 +3582,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -3688,6 +3624,9 @@
|
||||
prgsav=yes
|
||||
fi # if test $link
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
|
||||
#
|
||||
# run marc
|
||||
@@ -3781,7 +3720,7 @@
|
||||
else
|
||||
#dllrun >0
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes;then
|
||||
@@ -3906,7 +3845,7 @@
|
||||
# first copy over the user sub if local directories
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RCP $user.f $i:$DIR1/
|
||||
+ $RCP $user $i:$DIR1/
|
||||
fi
|
||||
# do the compilation on the other machine
|
||||
if test ${dirstatus[$counter]} = "shared"
|
||||
@@ -3919,20 +3858,20 @@
|
||||
remoteuser=$DIR1/`$BASENAME $user`
|
||||
$RSH $i /bin/rm $remoteprog 2> /dev/null
|
||||
echo
|
||||
- $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
+ $RSH $i $DIR2/tools/comp_damask_mp $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
# check if successful, the new executable should be there
|
||||
line=`$RSH $i /bin/ls $remoteprog 2> /dev/null`
|
||||
if test "$line"
|
||||
then
|
||||
echo compilation and linking successful on host $i
|
||||
else
|
||||
- echo "$0: compile failed for $user.f on host $i"
|
||||
+ echo "$0: compile failed for $user on host $i"
|
||||
exit 1
|
||||
fi
|
||||
# remove the user subroutine on remote machine
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RSH $i /bin/rm $remoteuser.f 2> /dev/null
|
||||
+ $RSH $i /bin/rm $remoteuser 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -3942,37 +3881,25 @@
|
||||
if test "$userhost"
|
||||
then
|
||||
echo
|
||||
- echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
- fi
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
+ echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
fi
|
||||
+ userobj=$usernoext.o
|
||||
if test $MACHINENAME = "CRAY"
|
||||
then
|
||||
- $FORTRAN $usersub || \
|
||||
+ $DFORTRANMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
else
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTRANMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
fi
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi # if test $user
|
||||
|
||||
|
||||
@@ -3993,6 +3920,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -4033,7 +3961,9 @@
|
||||
prgsav=yes
|
||||
fi # if test $link
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
-
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
# done if no job id given
|
||||
if test -z "$jid"
|
||||
then
|
||||
@@ -4152,7 +4082,7 @@
|
||||
else
|
||||
#dllrun >0
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes;then
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
+++
|
||||
@@ -1,18 +1,5 @@
|
||||
#!/bin/sh
|
||||
-# This script opens a window running an editor. The default window is an
|
||||
-# xterm, and the default editor is vi. These may be customized.
|
||||
+# This script opens a window running an editor.
|
||||
+# The command to invoke the editor is specified during DAMASK installation
|
||||
|
||||
-dir=
|
||||
-for d in /usr/bin /usr/bin/X11; do
|
||||
- if test -x "$d/xterm"; then
|
||||
- dir="$d"
|
||||
- break
|
||||
- fi
|
||||
-done
|
||||
-
|
||||
-if test -z "$dir"; then
|
||||
- echo "$0: Could not find xterm"
|
||||
- exit 1
|
||||
-fi
|
||||
-
|
||||
-"$dir/xterm" -T "vi $*" -n "vi $*" -e vi $*
|
||||
+%EDITOR% $*
|
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
+++
|
||||
@@ -63,10 +63,10 @@
|
||||
if [ "$slv" != "" -a "$slv" != "marc" -a "$slv" != "datfit" ]; then
|
||||
slv="-iam sfm"
|
||||
fi
|
||||
-if [ "$slv" == "marc" ]; then
|
||||
+if [ "$slv" = "marc" ]; then
|
||||
slv=""
|
||||
fi
|
||||
-if [ "$slv" == "datfit" ]; then
|
||||
+if [ "$slv" = "datfit" ]; then
|
||||
slv="-iam datfit"
|
||||
fi
|
||||
|
||||
@@ -91,6 +91,7 @@
|
||||
srcfile="-u $srcfile -save y"
|
||||
;;
|
||||
runsaved)
|
||||
+ srcfile=${srcfile%.*}".marc"
|
||||
srcfile="-prog $srcfile"
|
||||
;;
|
||||
esac
|
||||
@@ -189,12 +190,12 @@
|
||||
unset PYTHONPATH
|
||||
|
||||
if [ "$doe_first" = "-" ]; then # submit of regular Marc job
|
||||
- "${DIR}/tools/run_marc" $slv -j $job -v n -b y $nprocds $nprocd \
|
||||
+ "${DIR}/tools/run_damask_hmp" $slv -j $job -v n -b y $nprocds $nprocd \
|
||||
$srcfile $restart $postfile $viewfactorsfile $hostfile \
|
||||
$compat $copy_datfile $copy_postfile $scr_dir $dcoup \
|
||||
$assem_recov_nthread $nthread $nsolver $mode $gpu > /dev/null 2>&1
|
||||
else # submit of a DoE Marc job
|
||||
- "${DIR}/tools/run_marc" $slv -j $job -v n -b n $nprocds $nprocd \
|
||||
+ "${DIR}/tools/run_damask_hmp" $slv -j $job -v n -b n $nprocds $nprocd \
|
||||
$srcfile $restart $postfile $viewfactorsfile $hostfile \
|
||||
$compat $copy_datfile $copy_postfile $scr_dir $dcoup \
|
||||
$assem_recov_nthread $nthread $nsolver $mode $gpu
|
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
+++
|
||||
@@ -63,10 +63,10 @@
|
||||
if [ "$slv" != "" -a "$slv" != "marc" -a "$slv" != "datfit" ]; then
|
||||
slv="-iam sfm"
|
||||
fi
|
||||
-if [ "$slv" == "marc" ]; then
|
||||
+if [ "$slv" = "marc" ]; then
|
||||
slv=""
|
||||
fi
|
||||
-if [ "$slv" == "datfit" ]; then
|
||||
+if [ "$slv" = "datfit" ]; then
|
||||
slv="-iam datfit"
|
||||
fi
|
||||
|
||||
@@ -91,6 +91,7 @@
|
||||
srcfile="-u $srcfile -save y"
|
||||
;;
|
||||
runsaved)
|
||||
+ srcfile=${srcfile%.*}".marc"
|
||||
srcfile="-prog $srcfile"
|
||||
;;
|
||||
esac
|
||||
@@ -189,12 +190,12 @@
|
||||
unset PYTHONPATH
|
||||
|
||||
if [ "$doe_first" = "-" ]; then # submit of regular Marc job
|
||||
- "${DIR}/tools/run_marc" $slv -j $job -v n -b y $nprocds $nprocd \
|
||||
+ "${DIR}/tools/run_damask_mp" $slv -j $job -v n -b y $nprocds $nprocd \
|
||||
$srcfile $restart $postfile $viewfactorsfile $hostfile \
|
||||
$compat $copy_datfile $copy_postfile $scr_dir $dcoup \
|
||||
$assem_recov_nthread $nthread $nsolver $mode $gpu > /dev/null 2>&1
|
||||
else # submit of a DoE Marc job
|
||||
- "${DIR}/tools/run_marc" $slv -j $job -v n -b n $nprocds $nprocd \
|
||||
+ "${DIR}/tools/run_damask_mp" $slv -j $job -v n -b n $nprocds $nprocd \
|
||||
$srcfile $restart $postfile $viewfactorsfile $hostfile \
|
||||
$compat $copy_datfile $copy_postfile $scr_dir $dcoup \
|
||||
$assem_recov_nthread $nthread $nsolver $mode $gpu
|
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
+++
|
||||
@@ -63,10 +63,10 @@
|
||||
if [ "$slv" != "" -a "$slv" != "marc" -a "$slv" != "datfit" ]; then
|
||||
slv="-iam sfm"
|
||||
fi
|
||||
-if [ "$slv" == "marc" ]; then
|
||||
+if [ "$slv" = "marc" ]; then
|
||||
slv=""
|
||||
fi
|
||||
-if [ "$slv" == "datfit" ]; then
|
||||
+if [ "$slv" = "datfit" ]; then
|
||||
slv="-iam datfit"
|
||||
fi
|
||||
|
||||
@@ -91,6 +91,7 @@
|
||||
srcfile="-u $srcfile -save y"
|
||||
;;
|
||||
runsaved)
|
||||
+ srcfile=${srcfile%.*}".marc"
|
||||
srcfile="-prog $srcfile"
|
||||
;;
|
||||
esac
|
||||
@@ -189,12 +190,12 @@
|
||||
unset PYTHONPATH
|
||||
|
||||
if [ "$doe_first" = "-" ]; then # submit of regular Marc job
|
||||
- "${DIR}/tools/run_marc" $slv -j $job -v n -b y $nprocds $nprocd \
|
||||
+ "${DIR}/tools/run_damask_lmp" $slv -j $job -v n -b y $nprocds $nprocd \
|
||||
$srcfile $restart $postfile $viewfactorsfile $hostfile \
|
||||
$compat $copy_datfile $copy_postfile $scr_dir $dcoup \
|
||||
$assem_recov_nthread $nthread $nsolver $mode $gpu > /dev/null 2>&1
|
||||
else # submit of a DoE Marc job
|
||||
- "${DIR}/tools/run_marc" $slv -j $job -v n -b n $nprocds $nprocd \
|
||||
+ "${DIR}/tools/run_damask_lmp" $slv -j $job -v n -b n $nprocds $nprocd \
|
||||
$srcfile $restart $postfile $viewfactorsfile $hostfile \
|
||||
$compat $copy_datfile $copy_postfile $scr_dir $dcoup \
|
||||
$assem_recov_nthread $nthread $nsolver $mode $gpu
|
|
@ -0,0 +1,158 @@
|
|||
---
|
||||
+++
|
||||
@@ -362,11 +362,18 @@
|
||||
}
|
||||
button {
|
||||
position +25 =
|
||||
- size 25 4
|
||||
+ size 18 4
|
||||
text "ADVANCED JOB SUBMISSION"
|
||||
help "job_run#Job Submission And Control"
|
||||
popmenu job_submit_adv_pm
|
||||
}
|
||||
+ button {
|
||||
+ position +18 =
|
||||
+ size 7 4
|
||||
+ text "DAMASK"
|
||||
+ help "damask_run#Job Submission And Control"
|
||||
+ popmenu damask
|
||||
+ }
|
||||
button {
|
||||
position 0 +4
|
||||
size 16 4
|
||||
@@ -1307,6 +1314,135 @@
|
||||
}
|
||||
|
||||
|
||||
+#--------------------------------------------------------------------------------------------------
|
||||
+popmenu damask {
|
||||
+
|
||||
+#ifdef QT_MENTAT
|
||||
+ text "DAMASK.MPIE.DE"
|
||||
+#endif
|
||||
+
|
||||
+ group {
|
||||
+#ifndef QT_MENTAT
|
||||
+ label {
|
||||
+ position 0 0
|
||||
+ size 50 4
|
||||
+ text "DAMASK.MPIE.DE"
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ label {
|
||||
+ position 1 6
|
||||
+ size 13 6
|
||||
+ text "Optimzation"
|
||||
+ border_width 1
|
||||
+ border_color black
|
||||
+ }
|
||||
+
|
||||
+ label {
|
||||
+ position +13 =
|
||||
+ size 20 6
|
||||
+ text "write Input"
|
||||
+ border_width 1
|
||||
+ border_color black
|
||||
+ }
|
||||
+
|
||||
+ label {
|
||||
+ position +18 =
|
||||
+ size 30 6
|
||||
+ text "do not write Inp."
|
||||
+ border_width 1
|
||||
+ border_color black
|
||||
+ }
|
||||
+
|
||||
+ label {
|
||||
+ position -32 +6
|
||||
+ size 12 6
|
||||
+ text "O3 / OpenMP"
|
||||
+ border_width 1
|
||||
+ border_color black
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position +12 =
|
||||
+ size 20 6
|
||||
+ text "Submit"
|
||||
+ command "*submit_job 4 *monitor_job"
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position +20 =
|
||||
+ size 20 6
|
||||
+ text "Execute"
|
||||
+ command "*execute_job 4 *monitor_job"
|
||||
+ }
|
||||
+
|
||||
+ label {
|
||||
+ position -32 +6
|
||||
+ size 12 6
|
||||
+ text "O1 / OpenMP"
|
||||
+ border_width 1
|
||||
+ border_color black
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position +12 =
|
||||
+ size 20 6
|
||||
+ text "Submit"
|
||||
+ command "*submit_job 5 *monitor_job"
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position +20 =
|
||||
+ size 20 6
|
||||
+ text "Execute"
|
||||
+ command "*execute_job 5 *monitor_job"
|
||||
+ }
|
||||
+
|
||||
+ label {
|
||||
+ position -32 +6
|
||||
+ size 12 6
|
||||
+ text "O0 / OpenMP"
|
||||
+ border_width 1
|
||||
+ border_color black
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position +12 =
|
||||
+ size 20 6
|
||||
+ text "Submit"
|
||||
+ command "*submit_job 6 *monitor_job"
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position +20 =
|
||||
+ size 20 6
|
||||
+ text "Execute"
|
||||
+ command "*execute_job 6 *monitor_job"
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position 19 +8
|
||||
+ size 12 8
|
||||
+ text "CANCEL"
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+ window {
|
||||
+ parent mentat
|
||||
+ origin 38 8
|
||||
+#ifdef DCOM
|
||||
+ size 50 100
|
||||
+#else
|
||||
+ size 50 94
|
||||
+#endif
|
||||
+ background_color body
|
||||
+ border_width 1
|
||||
+ border_color border
|
||||
+ buffering single
|
||||
+ }
|
||||
+ mode permanent
|
||||
+}
|
||||
+
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
popmenu job_exit_msg_pm {
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
+++
|
||||
@@ -6,18 +6,27 @@
|
||||
DIR=$1
|
||||
user=$3
|
||||
program=$4
|
||||
+usernoext=$user
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
+
|
||||
+# add BLAS options for linking
|
||||
+ BLAS="%BLAS%"
|
||||
+
|
||||
. $DIR/tools/include
|
||||
DIRJOB=$2
|
||||
cd $DIRJOB
|
||||
-echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
+echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
echo "program: $program"
|
||||
- $FORTRAN $user.f || \
|
||||
+ $DFORTHIGHMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- userobj=$user.o
|
||||
+ userobj=$usernoext.o
|
||||
|
||||
|
||||
$LOAD ${program} $DIR/lib/main.o\
|
||||
@@ -33,9 +42,13 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $BLAS \
|
||||
$SYSLIBS || \
|
||||
{
|
||||
- echo "$0: link failed for $user.o on host `hostname`"
|
||||
+ echo "$0: link failed for $usernoext.o on host `hostname`"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $userobj
|
||||
+ /bin/rm $DIRJOB/*.mod
|
||||
+ /bin/rm $DIRJOB/*.smod
|
||||
+ /bin/rm $DIRJOB/*_genmod.f90
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
+++
|
||||
@@ -6,18 +6,27 @@
|
||||
DIR=$1
|
||||
user=$3
|
||||
program=$4
|
||||
+usernoext=$user
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
+
|
||||
+# add BLAS options for linking
|
||||
+ BLAS="%BLAS%"
|
||||
+
|
||||
. $DIR/tools/include
|
||||
DIRJOB=$2
|
||||
cd $DIRJOB
|
||||
-echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
+echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
echo "program: $program"
|
||||
- $FORTRAN $user.f || \
|
||||
+ $DFORTRANLOWMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- userobj=$user.o
|
||||
+ userobj=$usernoext.o
|
||||
|
||||
|
||||
$LOAD ${program} $DIR/lib/main.o\
|
||||
@@ -33,9 +42,13 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $BLAS \
|
||||
$SYSLIBS || \
|
||||
{
|
||||
- echo "$0: link failed for $user.o on host `hostname`"
|
||||
+ echo "$0: link failed for $usernoext.o on host `hostname`"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $userobj
|
||||
+ /bin/rm $DIRJOB/*.mod
|
||||
+ /bin/rm $DIRJOB/*.smod
|
||||
+ /bin/rm $DIRJOB/*_genmod.f90
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
+++
|
||||
@@ -6,18 +6,27 @@
|
||||
DIR=$1
|
||||
user=$3
|
||||
program=$4
|
||||
+usernoext=$user
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
+
|
||||
+# add BLAS options for linking
|
||||
+ BLAS="%BLAS%"
|
||||
+
|
||||
. $DIR/tools/include
|
||||
DIRJOB=$2
|
||||
cd $DIRJOB
|
||||
-echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
+echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
echo "program: $program"
|
||||
- $FORTRAN $user.f || \
|
||||
+ $DFORTRANMP $user || \
|
||||
{
|
||||
- echo "$0: compile failed for $user.f"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- userobj=$user.o
|
||||
+ userobj=$usernoext.o
|
||||
|
||||
|
||||
$LOAD ${program} $DIR/lib/main.o\
|
||||
@@ -33,9 +42,13 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $BLAS \
|
||||
$SYSLIBS || \
|
||||
{
|
||||
- echo "$0: link failed for $user.o on host `hostname`"
|
||||
+ echo "$0: link failed for $usernoext.o on host `hostname`"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $userobj
|
||||
+ /bin/rm $DIRJOB/*.mod
|
||||
+ /bin/rm $DIRJOB/*.smod
|
||||
+ /bin/rm $DIRJOB/*_genmod.f90
|
|
@ -0,0 +1,75 @@
|
|||
---
|
||||
+++
|
||||
@@ -172,6 +178,15 @@
|
||||
MARC_COSIM_LIB="$MSCCOSIM_HOME/CoSim$MSCCOSIM_VERSION/Dcosim$MSCCOSIM_VERSION/lib"
|
||||
fi
|
||||
|
||||
+# DAMASK uses the HDF5 compiler wrapper around the Intel compiler
|
||||
+H5FC=$(h5fc -shlib -show)
|
||||
+if [[ "$H5FC" == *"$dir is"* ]]; then
|
||||
+ H5FC=$(echo $(echo "$H5FC" | tail -n1) | sed -e "s/\-shlib/-fPIC -qopenmp/g")
|
||||
+ H5FC=${H5FC%-lmpifort*}
|
||||
+fi
|
||||
+HDF5_LIB=${H5FC//*ifort/}
|
||||
+FCOMP="$H5FC"
|
||||
+
|
||||
# AEM
|
||||
if test "$MARCDLLOUTDIR" = ""; then
|
||||
DLLOUTDIR="$MARC_LIB"
|
||||
@@ -599,7 +609,7 @@
|
||||
PROFILE=" $PROFILE -pg"
|
||||
fi
|
||||
|
||||
-FORT_OPT="-c -assume byterecl -safe-cray-ptr -mp1 -WB -fp-model source"
|
||||
+FORT_OPT="-c -implicitnone -stand f18 -standard-semantics -assume nostd_mod_proc_name -safe-cray-ptr -mp1 -WB -fp-model source"
|
||||
if test "$MTHREAD" = "OPENMP"
|
||||
then
|
||||
FORT_OPT=" $FORT_OPT -qopenmp"
|
||||
@@ -612,7 +621,7 @@
|
||||
FORT_OPT=" $FORT_OPT -save -zero"
|
||||
fi
|
||||
if test "$MARCHDF_HDF" = "HDF"; then
|
||||
- FORT_OPT="$FORT_OPT -DMARCHDF_HDF=$MARCHDF_HDF $HDF_INCLUDE"
|
||||
+ FORT_OPT="$FORT_OPT -DMARCHDF=$MARCHDF_HDF"
|
||||
fi
|
||||
|
||||
FORTLOW="$FCOMP $FORT_OPT $PROFILE -O0 $I8FFLAGS -I$MARC_SOURCE/common \
|
||||
@@ -626,6 +635,29 @@
|
||||
# for compiling free form f90 files. high opt, integer(4)
|
||||
FORTF90="$FCOMP -c -O3"
|
||||
|
||||
+# determine DAMASK version
|
||||
+if test -n "$DAMASK_USER"; then
|
||||
+ DAMASKROOT=`dirname $DAMASK_USER`/../..
|
||||
+ read DAMASKVERSION < $DAMASKROOT/VERSION
|
||||
+ DAMASKVERSION="'"$DAMASKVERSION"'"
|
||||
+else
|
||||
+ DAMASKVERSION="'N/A'"
|
||||
+fi
|
||||
+
|
||||
+# DAMASK compiler calls
|
||||
+DFORTLOWMP="$FCOMP -c -O0 -qno-offload -implicitnone -stand f18 -standard-semantics -assume nostd_mod_proc_name -safe-cray-ptr $PROFILE -zero -mp1 -WB $I8FFLAGS -I$MARC_SOURCE/common \
|
||||
+ -fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMARC4DAMASK=2023.3 -DDAMASKVERSION=$DAMASKVERSION \
|
||||
+ -qopenmp -qopenmp-threadprivate=compat\
|
||||
+ $MUMPS_INCLUDE $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS -I$KDTREE2_MOD -I$MARC_MOD"
|
||||
+DFORTRANMP="$FCOMP -c -O1 -qno-offload -implicitnone -stand f18 -standard-semantics -assume nostd_mod_proc_name -safe-cray-ptr $PROFILE -zero -mp1 -WB $I8FFLAGS -I$MARC_SOURCE/common \
|
||||
+ -fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMARC4DAMASK=2023.3 -DDAMASKVERSION=$DAMASKVERSION \
|
||||
+ -qopenmp -qopenmp-threadprivate=compat\
|
||||
+ $MUMPS_INCLUDE $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS -I$KDTREE2_MOD -I$MARC_MOD"
|
||||
+DFORTHIGHMP="$FCOMP -c -O3 -qno-offload -implicitnone -stand f18 -standard-semantics -assume nostd_mod_proc_name -safe-cray-ptr $PROFILE -zero -mp1 -WB $I8FFLAGS -I$MARC_SOURCE/common \
|
||||
+ -fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMARC4DAMASK=2023.3 -DDAMASKVERSION=$DAMASKVERSION \
|
||||
+ -qopenmp -qopenmp-threadprivate=compat\
|
||||
+ $MUMPS_INCLUDE $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS -I$KDTREE2_MOD -I$MARC_MOD"
|
||||
+
|
||||
if test "$MARCDEBUG" = "ON"
|
||||
then
|
||||
FORTLOW="$FCOMP $FORT_OPT $PROFILE $I8FFLAGS -I$MARC_SOURCE/common \
|
||||
@@ -783,7 +815,7 @@
|
||||
|
||||
SOLVERLIBS="${BCSSOLVERLIBS} ${VKISOLVERLIBS} ${CASISOLVERLIBS} ${MF2SOLVERLIBS} \
|
||||
-L$MARC_MKL \
|
||||
- $MARC_LIB/blas_src.a ${ACSI_LIB}/ACSI_MarcLib.a $KDTREE2_LIB/libkdtree2.a $MARC_LIB/libtetmeshinterface.a $MARC_LIB/libcaefatigueinterface.a -L$MARC_LIB -lmkl_blacs_intelmpi_ilp64 -lmkl_scalapack_ilp64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -ltetmesh -ltetadapt -lmeshgems -lmg-tetra -lmeshgems_stubs -lCATMshMesherCore -lCATMshCVMforCSM -lmg-hybrid -lmg-cadsurf -lmg-hexa $HDF_LIBS $SOLVER2LIBS $RTREE_LIB/librtree_lib.a $SFGEO_LIB/libgeo_lib.a"
|
||||
+ $MARC_LIB/blas_src.a ${ACSI_LIB}/ACSI_MarcLib.a $KDTREE2_LIB/libkdtree2.a $MARC_LIB/libtetmeshinterface.a $MARC_LIB/libcaefatigueinterface.a -L$MARC_LIB -lmkl_blacs_intelmpi_ilp64 -lmkl_scalapack_ilp64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -ltetmesh -ltetadapt -lmeshgems -lmg-tetra -lmeshgems_stubs -lCATMshMesherCore -lCATMshCVMforCSM -lmg-hybrid -lmg-cadsurf -lmg-hexa $HDF5_LIB $SOLVER2LIBS $RTREE_LIB/librtree_lib.a $SFGEO_LIB/libgeo_lib.a"
|
||||
|
||||
SOLVERLIBS_DLL=${SOLVERLIBS}
|
||||
if test "$AEM_DLL" -eq 1
|
|
@ -0,0 +1,477 @@
|
|||
---
|
||||
+++
|
||||
@@ -136,6 +136,11 @@
|
||||
# is created. For job running in the background, the log #
|
||||
# file is always created. Default is "yes" #
|
||||
##############################################################################
|
||||
+# remove all Mentat paths from LD_LIBRARY_PATH
|
||||
+LD_LIBRARY_PATH=:$LD_LIBRARY_PATH:
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([!(:)])mentat2023.3+([!(:)])/:}
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([(:)])/:}
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH#:}; LD_LIBRARY_PATH=${LD_LIBRARY_PATH%:}
|
||||
# set DIR to the directory in which this script is
|
||||
REALCOM="`/bin/ls -l $0 |awk '{ print $NF; }'`"
|
||||
DIR=`dirname $REALCOM`
|
||||
@@ -303,7 +308,23 @@
|
||||
|
||||
. "$DIR/getarch"
|
||||
|
||||
+
|
||||
+# getting user subroutine file name
|
||||
+found=0
|
||||
+for i in "$@"; do
|
||||
+ if test $found = 1; then
|
||||
+ DAMASK_USER=$i
|
||||
+ found=0
|
||||
+ fi
|
||||
+ case $i in
|
||||
+ -u* | -U*)
|
||||
+ found=1
|
||||
+ ;;
|
||||
+ esac
|
||||
+done
|
||||
+# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||
. $MARC_INCLUDE
|
||||
+
|
||||
#
|
||||
|
||||
#
|
||||
@@ -406,7 +427,7 @@
|
||||
did=
|
||||
vid=
|
||||
user=
|
||||
-usersubname=
|
||||
+usernoext=
|
||||
objs=
|
||||
qid=background
|
||||
cpu=
|
||||
@@ -677,50 +698,19 @@
|
||||
esac
|
||||
;;
|
||||
-u* | -U*)
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user
|
||||
- basefile=`$BASENAME $value`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user.f
|
||||
- elif test ${basefile##*.} = F
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F`
|
||||
- usersubname=$user.F
|
||||
- elif test ${basefile##*.} = f90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f90`
|
||||
- usersubname=$user.f90
|
||||
- elif test ${basefile##*.} = F90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F90`
|
||||
- usersubname=$user.F90
|
||||
- fi
|
||||
+ user=$value
|
||||
case $user in
|
||||
\/*)
|
||||
;;
|
||||
*)
|
||||
user=`pwd`/$user
|
||||
- usersubname=`pwd`/$usersubname
|
||||
;;
|
||||
esac
|
||||
- if test ! -f $usersubname
|
||||
- then
|
||||
- if test -f $usersubname.f
|
||||
- then
|
||||
- usersubname=$usersubname.f
|
||||
- elif test -f $usersubname.F
|
||||
- then
|
||||
- usersubname=$usersubname.F
|
||||
- elif test -f $usersubname.f90
|
||||
- then
|
||||
- usersubname=$usersubname.f90
|
||||
- elif test -f $usersubname.F90
|
||||
- then
|
||||
- usersubname=$usersubname.F90
|
||||
- fi
|
||||
- fi
|
||||
+ usernoext=$user
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
;;
|
||||
-obj | -OBJ)
|
||||
objs="$value"
|
||||
@@ -1208,12 +1198,12 @@
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
- if test "$usersubname"
|
||||
+ if test "$user"
|
||||
then
|
||||
- if test ! -f $usersubname
|
||||
+ if test ! -f $user
|
||||
then
|
||||
error="$error
|
||||
-user subroutine file $usersubname not accessible"
|
||||
+user subroutine file $user not accessible"
|
||||
fi
|
||||
fi
|
||||
if test "$objs"
|
||||
@@ -1532,7 +1522,7 @@
|
||||
Marc shared lib : $progdll
|
||||
Version type : $mode
|
||||
Job ID : $DIRJID/$jid$extra_job_info
|
||||
-User subroutine name : $usersubname
|
||||
+User subroutine name : $user
|
||||
User objects/libs : $objs
|
||||
Restart file job ID : $rid
|
||||
Substructure file ID : $sid
|
||||
@@ -1565,7 +1555,7 @@
|
||||
Marc shared lib : $progdll
|
||||
Version type : $mode
|
||||
Job ID : $DIRJID/$jid$extra_job_info
|
||||
-User subroutine name : $usersubname
|
||||
+User subroutine name : $user
|
||||
User objects/libs : $objs
|
||||
Restart file job ID : $rid
|
||||
Substructure file ID : $sid
|
||||
@@ -1688,7 +1678,7 @@
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
- $ECHO "User subroutine name ($usersubname)? $ECHOTXT"
|
||||
+ $ECHO "User subroutine name ($user)? $ECHOTXT"
|
||||
read value
|
||||
if test "$value"
|
||||
then
|
||||
@@ -1697,50 +1687,19 @@
|
||||
user=
|
||||
;;
|
||||
*)
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user
|
||||
- basefile=`$BASENAME $value`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user.f
|
||||
- elif test ${basefile##*.} = F
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F`
|
||||
- usersubname=$user.F
|
||||
- elif test ${basefile##*.} = f90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f90`
|
||||
- usersubname=$user.f90
|
||||
- elif test ${basefile##*.} = F90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F90`
|
||||
- usersubname=$user.F90
|
||||
- fi
|
||||
+ user=$value
|
||||
case $user in
|
||||
\/*)
|
||||
;;
|
||||
*)
|
||||
user=`pwd`/$user
|
||||
- usersubname=`pwd`/$usersubname
|
||||
;;
|
||||
esac
|
||||
- if test ! -f $usersubname
|
||||
- then
|
||||
- if test -f $usersubname.f
|
||||
- then
|
||||
- usersubname=$usersubname.f
|
||||
- elif test -f $usersubname.F
|
||||
- then
|
||||
- usersubname=$usersubname.F
|
||||
- elif test -f $usersubname.f90
|
||||
- then
|
||||
- usersubname=$usersubname.f90
|
||||
- elif test -f $usersubname.F90
|
||||
- then
|
||||
- usersubname=$usersubname.F90
|
||||
- fi
|
||||
- fi
|
||||
+ usernoext=$user
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -2275,11 +2234,12 @@
|
||||
#
|
||||
# user subroutine used
|
||||
#
|
||||
+# add DAMASK options for linking
|
||||
+ DAMASK="-lstdc++"
|
||||
|
||||
if test "$user"
|
||||
then
|
||||
-# program=$user.marc
|
||||
- program=$DIRJOB/`$BASENAME $user .f`.marc
|
||||
+ program=$usernoext.marc
|
||||
case $program in
|
||||
\/* | \.\/*)
|
||||
bd=
|
||||
@@ -2392,7 +2352,7 @@
|
||||
fi
|
||||
if test "$user"
|
||||
then
|
||||
- execpath=$DIRJOB/`$BASENAME $user .f`.marc
|
||||
+ execpath=$usernoext.marc
|
||||
usersub=1
|
||||
fi
|
||||
export execpath
|
||||
@@ -3275,33 +3235,16 @@
|
||||
echo
|
||||
if test "$user"
|
||||
then
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
- fi
|
||||
-
|
||||
+ userobj=$usernoext.o
|
||||
fi
|
||||
cat > $jid.runmarcscript << END4
|
||||
if test "$user"
|
||||
then
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- fi
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTHIGHMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $usersubname"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi
|
||||
|
||||
@@ -3323,6 +3266,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -3336,6 +3280,9 @@
|
||||
prgsav=yes
|
||||
fi
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
|
||||
#
|
||||
# run marc
|
||||
@@ -3383,7 +3330,7 @@
|
||||
fi
|
||||
else
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes
|
||||
@@ -3549,7 +3496,7 @@
|
||||
# first copy over the user sub if local directories
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RCP $user.f $i:$DIR1/
|
||||
+ $RCP $user $i:$DIR1/
|
||||
fi
|
||||
# do the compilation on the other machine
|
||||
if test ${dirstatus[$counter]} = "shared"
|
||||
@@ -3562,21 +3509,21 @@
|
||||
remoteuser=$DIR1/`$BASENAME $user`
|
||||
$RSH $i /bin/rm $remoteprog 2> /dev/null
|
||||
echo
|
||||
- $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
+ $RSH $i $DIR2/tools/comp_damask_hmp $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
# check if successful, the new executable should be there
|
||||
line=`$RSH $i /bin/ls $remoteprog 2> /dev/null`
|
||||
if test "$line"
|
||||
then
|
||||
echo compilation and linking successful on host $i
|
||||
else
|
||||
- echo "$0: compile failed for $usersubname on host $i"
|
||||
+ echo "$0: compile failed for $user on host $i"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
fi
|
||||
# remove the user subroutine on remote machine
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RSH $i /bin/rm $remoteuser.f 2> /dev/null
|
||||
+ $RSH $i /bin/rm $remoteuser 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -3586,27 +3533,15 @@
|
||||
if test "$userhost"
|
||||
then
|
||||
echo
|
||||
- echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
- fi
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
+ echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
fi
|
||||
+ userobj=$usernoext.o
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTHIGHMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $usersubname"
|
||||
+ echo "$0: compile failed for $user"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi # if test $user
|
||||
|
||||
@@ -3628,6 +3563,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -3669,6 +3605,9 @@
|
||||
prgsav=yes
|
||||
fi # if test $link
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
|
||||
#
|
||||
# run marc
|
||||
@@ -3763,7 +3702,7 @@
|
||||
else
|
||||
#dllrun >0
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes;then
|
||||
@@ -3888,7 +3827,7 @@
|
||||
# first copy over the user sub if local directories
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RCP $user.f $i:$DIR1/
|
||||
+ $RCP $user $i:$DIR1/
|
||||
fi
|
||||
# do the compilation on the other machine
|
||||
if test ${dirstatus[$counter]} = "shared"
|
||||
@@ -3901,20 +3840,20 @@
|
||||
remoteuser=$DIR1/`$BASENAME $user`
|
||||
$RSH $i /bin/rm $remoteprog 2> /dev/null
|
||||
echo
|
||||
- $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
+ $RSH $i $DIR2/tools/comp_damask_hmp $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
# check if successful, the new executable should be there
|
||||
line=`$RSH $i /bin/ls $remoteprog 2> /dev/null`
|
||||
if test "$line"
|
||||
then
|
||||
echo compilation and linking successful on host $i
|
||||
else
|
||||
- echo "$0: compile failed for $usersubname on host $i"
|
||||
+ echo "$0: compile failed for $user on host $i"
|
||||
exit 1
|
||||
fi
|
||||
# remove the user subroutine on remote machine
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RSH $i /bin/rm $remoteuser.f 2> /dev/null
|
||||
+ $RSH $i /bin/rm $remoteuser 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -3924,26 +3863,14 @@
|
||||
if test "$userhost"
|
||||
then
|
||||
echo
|
||||
- echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
- fi
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
+ echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
fi
|
||||
+ userobj=$usernoext.o
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTHIGHMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $usersubname"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi # if test $user
|
||||
|
||||
@@ -3965,6 +3892,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -4005,7 +3933,9 @@
|
||||
prgsav=yes
|
||||
fi # if test $link
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
-
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
# done if no job id given
|
||||
if test -z "$jid"
|
||||
then
|
||||
@@ -4125,7 +4055,7 @@
|
||||
else
|
||||
#dllrun >0
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes;then
|
|
@ -0,0 +1,477 @@
|
|||
---
|
||||
+++
|
||||
@@ -136,6 +136,11 @@
|
||||
# is created. For job running in the background, the log #
|
||||
# file is always created. Default is "yes" #
|
||||
##############################################################################
|
||||
+# remove all Mentat paths from LD_LIBRARY_PATH
|
||||
+LD_LIBRARY_PATH=:$LD_LIBRARY_PATH:
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([!(:)])mentat2023.3+([!(:)])/:}
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([(:)])/:}
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH#:}; LD_LIBRARY_PATH=${LD_LIBRARY_PATH%:}
|
||||
# set DIR to the directory in which this script is
|
||||
REALCOM="`/bin/ls -l $0 |awk '{ print $NF; }'`"
|
||||
DIR=`dirname $REALCOM`
|
||||
@@ -303,7 +308,23 @@
|
||||
|
||||
. "$DIR/getarch"
|
||||
|
||||
+
|
||||
+# getting user subroutine file name
|
||||
+found=0
|
||||
+for i in "$@"; do
|
||||
+ if test $found = 1; then
|
||||
+ DAMASK_USER=$i
|
||||
+ found=0
|
||||
+ fi
|
||||
+ case $i in
|
||||
+ -u* | -U*)
|
||||
+ found=1
|
||||
+ ;;
|
||||
+ esac
|
||||
+done
|
||||
+# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||
. $MARC_INCLUDE
|
||||
+
|
||||
#
|
||||
|
||||
#
|
||||
@@ -406,7 +427,7 @@
|
||||
did=
|
||||
vid=
|
||||
user=
|
||||
-usersubname=
|
||||
+usernoext=
|
||||
objs=
|
||||
qid=background
|
||||
cpu=
|
||||
@@ -677,50 +698,19 @@
|
||||
esac
|
||||
;;
|
||||
-u* | -U*)
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user
|
||||
- basefile=`$BASENAME $value`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user.f
|
||||
- elif test ${basefile##*.} = F
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F`
|
||||
- usersubname=$user.F
|
||||
- elif test ${basefile##*.} = f90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f90`
|
||||
- usersubname=$user.f90
|
||||
- elif test ${basefile##*.} = F90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F90`
|
||||
- usersubname=$user.F90
|
||||
- fi
|
||||
+ user=$value
|
||||
case $user in
|
||||
\/*)
|
||||
;;
|
||||
*)
|
||||
user=`pwd`/$user
|
||||
- usersubname=`pwd`/$usersubname
|
||||
;;
|
||||
esac
|
||||
- if test ! -f $usersubname
|
||||
- then
|
||||
- if test -f $usersubname.f
|
||||
- then
|
||||
- usersubname=$usersubname.f
|
||||
- elif test -f $usersubname.F
|
||||
- then
|
||||
- usersubname=$usersubname.F
|
||||
- elif test -f $usersubname.f90
|
||||
- then
|
||||
- usersubname=$usersubname.f90
|
||||
- elif test -f $usersubname.F90
|
||||
- then
|
||||
- usersubname=$usersubname.F90
|
||||
- fi
|
||||
- fi
|
||||
+ usernoext=$user
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
;;
|
||||
-obj | -OBJ)
|
||||
objs="$value"
|
||||
@@ -1208,12 +1198,12 @@
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
- if test "$usersubname"
|
||||
+ if test "$user"
|
||||
then
|
||||
- if test ! -f $usersubname
|
||||
+ if test ! -f $user
|
||||
then
|
||||
error="$error
|
||||
-user subroutine file $usersubname not accessible"
|
||||
+user subroutine file $user not accessible"
|
||||
fi
|
||||
fi
|
||||
if test "$objs"
|
||||
@@ -1532,7 +1522,7 @@
|
||||
Marc shared lib : $progdll
|
||||
Version type : $mode
|
||||
Job ID : $DIRJID/$jid$extra_job_info
|
||||
-User subroutine name : $usersubname
|
||||
+User subroutine name : $user
|
||||
User objects/libs : $objs
|
||||
Restart file job ID : $rid
|
||||
Substructure file ID : $sid
|
||||
@@ -1565,7 +1555,7 @@
|
||||
Marc shared lib : $progdll
|
||||
Version type : $mode
|
||||
Job ID : $DIRJID/$jid$extra_job_info
|
||||
-User subroutine name : $usersubname
|
||||
+User subroutine name : $user
|
||||
User objects/libs : $objs
|
||||
Restart file job ID : $rid
|
||||
Substructure file ID : $sid
|
||||
@@ -1688,7 +1678,7 @@
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
- $ECHO "User subroutine name ($usersubname)? $ECHOTXT"
|
||||
+ $ECHO "User subroutine name ($user)? $ECHOTXT"
|
||||
read value
|
||||
if test "$value"
|
||||
then
|
||||
@@ -1697,50 +1687,19 @@
|
||||
user=
|
||||
;;
|
||||
*)
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user
|
||||
- basefile=`$BASENAME $value`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user.f
|
||||
- elif test ${basefile##*.} = F
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F`
|
||||
- usersubname=$user.F
|
||||
- elif test ${basefile##*.} = f90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f90`
|
||||
- usersubname=$user.f90
|
||||
- elif test ${basefile##*.} = F90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F90`
|
||||
- usersubname=$user.F90
|
||||
- fi
|
||||
+ user=$value
|
||||
case $user in
|
||||
\/*)
|
||||
;;
|
||||
*)
|
||||
user=`pwd`/$user
|
||||
- usersubname=`pwd`/$usersubname
|
||||
;;
|
||||
esac
|
||||
- if test ! -f $usersubname
|
||||
- then
|
||||
- if test -f $usersubname.f
|
||||
- then
|
||||
- usersubname=$usersubname.f
|
||||
- elif test -f $usersubname.F
|
||||
- then
|
||||
- usersubname=$usersubname.F
|
||||
- elif test -f $usersubname.f90
|
||||
- then
|
||||
- usersubname=$usersubname.f90
|
||||
- elif test -f $usersubname.F90
|
||||
- then
|
||||
- usersubname=$usersubname.F90
|
||||
- fi
|
||||
- fi
|
||||
+ usernoext=$user
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -2275,11 +2234,12 @@
|
||||
#
|
||||
# user subroutine used
|
||||
#
|
||||
+# add DAMASK options for linking
|
||||
+ DAMASK="-lstdc++"
|
||||
|
||||
if test "$user"
|
||||
then
|
||||
-# program=$user.marc
|
||||
- program=$DIRJOB/`$BASENAME $user .f`.marc
|
||||
+ program=$usernoext.marc
|
||||
case $program in
|
||||
\/* | \.\/*)
|
||||
bd=
|
||||
@@ -2392,7 +2352,7 @@
|
||||
fi
|
||||
if test "$user"
|
||||
then
|
||||
- execpath=$DIRJOB/`$BASENAME $user .f`.marc
|
||||
+ execpath=$usernoext.marc
|
||||
usersub=1
|
||||
fi
|
||||
export execpath
|
||||
@@ -3275,33 +3235,16 @@
|
||||
echo
|
||||
if test "$user"
|
||||
then
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
- fi
|
||||
-
|
||||
+ userobj=$usernoext.o
|
||||
fi
|
||||
cat > $jid.runmarcscript << END4
|
||||
if test "$user"
|
||||
then
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- fi
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTLOWMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $usersubname"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi
|
||||
|
||||
@@ -3323,6 +3266,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -3336,6 +3280,9 @@
|
||||
prgsav=yes
|
||||
fi
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
|
||||
#
|
||||
# run marc
|
||||
@@ -3383,7 +3330,7 @@
|
||||
fi
|
||||
else
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes
|
||||
@@ -3549,7 +3496,7 @@
|
||||
# first copy over the user sub if local directories
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RCP $user.f $i:$DIR1/
|
||||
+ $RCP $user $i:$DIR1/
|
||||
fi
|
||||
# do the compilation on the other machine
|
||||
if test ${dirstatus[$counter]} = "shared"
|
||||
@@ -3562,21 +3509,21 @@
|
||||
remoteuser=$DIR1/`$BASENAME $user`
|
||||
$RSH $i /bin/rm $remoteprog 2> /dev/null
|
||||
echo
|
||||
- $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
+ $RSH $i $DIR2/tools/comp_damask_lmp $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
# check if successful, the new executable should be there
|
||||
line=`$RSH $i /bin/ls $remoteprog 2> /dev/null`
|
||||
if test "$line"
|
||||
then
|
||||
echo compilation and linking successful on host $i
|
||||
else
|
||||
- echo "$0: compile failed for $usersubname on host $i"
|
||||
+ echo "$0: compile failed for $user on host $i"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
fi
|
||||
# remove the user subroutine on remote machine
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RSH $i /bin/rm $remoteuser.f 2> /dev/null
|
||||
+ $RSH $i /bin/rm $remoteuser 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -3586,27 +3533,15 @@
|
||||
if test "$userhost"
|
||||
then
|
||||
echo
|
||||
- echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
- fi
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
+ echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
fi
|
||||
+ userobj=$usernoext.o
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTLOWMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $usersubname"
|
||||
+ echo "$0: compile failed for $user"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi # if test $user
|
||||
|
||||
@@ -3628,6 +3563,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -3669,6 +3605,9 @@
|
||||
prgsav=yes
|
||||
fi # if test $link
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
|
||||
#
|
||||
# run marc
|
||||
@@ -3763,7 +3702,7 @@
|
||||
else
|
||||
#dllrun >0
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes;then
|
||||
@@ -3888,7 +3827,7 @@
|
||||
# first copy over the user sub if local directories
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RCP $user.f $i:$DIR1/
|
||||
+ $RCP $user $i:$DIR1/
|
||||
fi
|
||||
# do the compilation on the other machine
|
||||
if test ${dirstatus[$counter]} = "shared"
|
||||
@@ -3901,20 +3840,20 @@
|
||||
remoteuser=$DIR1/`$BASENAME $user`
|
||||
$RSH $i /bin/rm $remoteprog 2> /dev/null
|
||||
echo
|
||||
- $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
+ $RSH $i $DIR2/tools/comp_damask_lmp $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
# check if successful, the new executable should be there
|
||||
line=`$RSH $i /bin/ls $remoteprog 2> /dev/null`
|
||||
if test "$line"
|
||||
then
|
||||
echo compilation and linking successful on host $i
|
||||
else
|
||||
- echo "$0: compile failed for $usersubname on host $i"
|
||||
+ echo "$0: compile failed for $user on host $i"
|
||||
exit 1
|
||||
fi
|
||||
# remove the user subroutine on remote machine
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RSH $i /bin/rm $remoteuser.f 2> /dev/null
|
||||
+ $RSH $i /bin/rm $remoteuser 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -3924,26 +3863,14 @@
|
||||
if test "$userhost"
|
||||
then
|
||||
echo
|
||||
- echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
- fi
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
+ echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
fi
|
||||
+ userobj=$usernoext.o
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTLOWMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $usersubname"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi # if test $user
|
||||
|
||||
@@ -3965,6 +3892,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -4005,7 +3933,9 @@
|
||||
prgsav=yes
|
||||
fi # if test $link
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
-
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
# done if no job id given
|
||||
if test -z "$jid"
|
||||
then
|
||||
@@ -4125,7 +4055,7 @@
|
||||
else
|
||||
#dllrun >0
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes;then
|
|
@ -0,0 +1,477 @@
|
|||
---
|
||||
+++
|
||||
@@ -136,6 +136,11 @@
|
||||
# is created. For job running in the background, the log #
|
||||
# file is always created. Default is "yes" #
|
||||
##############################################################################
|
||||
+# remove all Mentat paths from LD_LIBRARY_PATH
|
||||
+LD_LIBRARY_PATH=:$LD_LIBRARY_PATH:
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([!(:)])mentat2023.3+([!(:)])/:}
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([(:)])/:}
|
||||
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH#:}; LD_LIBRARY_PATH=${LD_LIBRARY_PATH%:}
|
||||
# set DIR to the directory in which this script is
|
||||
REALCOM="`/bin/ls -l $0 |awk '{ print $NF; }'`"
|
||||
DIR=`dirname $REALCOM`
|
||||
@@ -303,7 +308,23 @@
|
||||
|
||||
. "$DIR/getarch"
|
||||
|
||||
+
|
||||
+# getting user subroutine file name
|
||||
+found=0
|
||||
+for i in "$@"; do
|
||||
+ if test $found = 1; then
|
||||
+ DAMASK_USER=$i
|
||||
+ found=0
|
||||
+ fi
|
||||
+ case $i in
|
||||
+ -u* | -U*)
|
||||
+ found=1
|
||||
+ ;;
|
||||
+ esac
|
||||
+done
|
||||
+# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||
. $MARC_INCLUDE
|
||||
+
|
||||
#
|
||||
|
||||
#
|
||||
@@ -406,7 +427,7 @@
|
||||
did=
|
||||
vid=
|
||||
user=
|
||||
-usersubname=
|
||||
+usernoext=
|
||||
objs=
|
||||
qid=background
|
||||
cpu=
|
||||
@@ -677,50 +698,19 @@
|
||||
esac
|
||||
;;
|
||||
-u* | -U*)
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user
|
||||
- basefile=`$BASENAME $value`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user.f
|
||||
- elif test ${basefile##*.} = F
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F`
|
||||
- usersubname=$user.F
|
||||
- elif test ${basefile##*.} = f90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f90`
|
||||
- usersubname=$user.f90
|
||||
- elif test ${basefile##*.} = F90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F90`
|
||||
- usersubname=$user.F90
|
||||
- fi
|
||||
+ user=$value
|
||||
case $user in
|
||||
\/*)
|
||||
;;
|
||||
*)
|
||||
user=`pwd`/$user
|
||||
- usersubname=`pwd`/$usersubname
|
||||
;;
|
||||
esac
|
||||
- if test ! -f $usersubname
|
||||
- then
|
||||
- if test -f $usersubname.f
|
||||
- then
|
||||
- usersubname=$usersubname.f
|
||||
- elif test -f $usersubname.F
|
||||
- then
|
||||
- usersubname=$usersubname.F
|
||||
- elif test -f $usersubname.f90
|
||||
- then
|
||||
- usersubname=$usersubname.f90
|
||||
- elif test -f $usersubname.F90
|
||||
- then
|
||||
- usersubname=$usersubname.F90
|
||||
- fi
|
||||
- fi
|
||||
+ usernoext=$user
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
;;
|
||||
-obj | -OBJ)
|
||||
objs="$value"
|
||||
@@ -1208,12 +1198,12 @@
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
- if test "$usersubname"
|
||||
+ if test "$user"
|
||||
then
|
||||
- if test ! -f $usersubname
|
||||
+ if test ! -f $user
|
||||
then
|
||||
error="$error
|
||||
-user subroutine file $usersubname not accessible"
|
||||
+user subroutine file $user not accessible"
|
||||
fi
|
||||
fi
|
||||
if test "$objs"
|
||||
@@ -1532,7 +1522,7 @@
|
||||
Marc shared lib : $progdll
|
||||
Version type : $mode
|
||||
Job ID : $DIRJID/$jid$extra_job_info
|
||||
-User subroutine name : $usersubname
|
||||
+User subroutine name : $user
|
||||
User objects/libs : $objs
|
||||
Restart file job ID : $rid
|
||||
Substructure file ID : $sid
|
||||
@@ -1565,7 +1555,7 @@
|
||||
Marc shared lib : $progdll
|
||||
Version type : $mode
|
||||
Job ID : $DIRJID/$jid$extra_job_info
|
||||
-User subroutine name : $usersubname
|
||||
+User subroutine name : $user
|
||||
User objects/libs : $objs
|
||||
Restart file job ID : $rid
|
||||
Substructure file ID : $sid
|
||||
@@ -1688,7 +1678,7 @@
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
- $ECHO "User subroutine name ($usersubname)? $ECHOTXT"
|
||||
+ $ECHO "User subroutine name ($user)? $ECHOTXT"
|
||||
read value
|
||||
if test "$value"
|
||||
then
|
||||
@@ -1697,50 +1687,19 @@
|
||||
user=
|
||||
;;
|
||||
*)
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user
|
||||
- basefile=`$BASENAME $value`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f`
|
||||
- usersubname=$user.f
|
||||
- elif test ${basefile##*.} = F
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F`
|
||||
- usersubname=$user.F
|
||||
- elif test ${basefile##*.} = f90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .f90`
|
||||
- usersubname=$user.f90
|
||||
- elif test ${basefile##*.} = F90
|
||||
- then
|
||||
- user=`dirname $value`/`$BASENAME $value .F90`
|
||||
- usersubname=$user.F90
|
||||
- fi
|
||||
+ user=$value
|
||||
case $user in
|
||||
\/*)
|
||||
;;
|
||||
*)
|
||||
user=`pwd`/$user
|
||||
- usersubname=`pwd`/$usersubname
|
||||
;;
|
||||
esac
|
||||
- if test ! -f $usersubname
|
||||
- then
|
||||
- if test -f $usersubname.f
|
||||
- then
|
||||
- usersubname=$usersubname.f
|
||||
- elif test -f $usersubname.F
|
||||
- then
|
||||
- usersubname=$usersubname.F
|
||||
- elif test -f $usersubname.f90
|
||||
- then
|
||||
- usersubname=$usersubname.f90
|
||||
- elif test -f $usersubname.F90
|
||||
- then
|
||||
- usersubname=$usersubname.F90
|
||||
- fi
|
||||
- fi
|
||||
+ usernoext=$user
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for`
|
||||
+ usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90`
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -2275,11 +2234,12 @@
|
||||
#
|
||||
# user subroutine used
|
||||
#
|
||||
+# add DAMASK options for linking
|
||||
+ DAMASK="-lstdc++"
|
||||
|
||||
if test "$user"
|
||||
then
|
||||
-# program=$user.marc
|
||||
- program=$DIRJOB/`$BASENAME $user .f`.marc
|
||||
+ program=$usernoext.marc
|
||||
case $program in
|
||||
\/* | \.\/*)
|
||||
bd=
|
||||
@@ -2392,7 +2352,7 @@
|
||||
fi
|
||||
if test "$user"
|
||||
then
|
||||
- execpath=$DIRJOB/`$BASENAME $user .f`.marc
|
||||
+ execpath=$usernoext.marc
|
||||
usersub=1
|
||||
fi
|
||||
export execpath
|
||||
@@ -3275,33 +3235,16 @@
|
||||
echo
|
||||
if test "$user"
|
||||
then
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
- fi
|
||||
-
|
||||
+ userobj=$usernoext.o
|
||||
fi
|
||||
cat > $jid.runmarcscript << END4
|
||||
if test "$user"
|
||||
then
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- fi
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTRANMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $usersubname"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi
|
||||
|
||||
@@ -3323,6 +3266,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -3336,6 +3280,9 @@
|
||||
prgsav=yes
|
||||
fi
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
|
||||
#
|
||||
# run marc
|
||||
@@ -3383,7 +3330,7 @@
|
||||
fi
|
||||
else
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes
|
||||
@@ -3549,7 +3496,7 @@
|
||||
# first copy over the user sub if local directories
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RCP $user.f $i:$DIR1/
|
||||
+ $RCP $user $i:$DIR1/
|
||||
fi
|
||||
# do the compilation on the other machine
|
||||
if test ${dirstatus[$counter]} = "shared"
|
||||
@@ -3562,21 +3509,21 @@
|
||||
remoteuser=$DIR1/`$BASENAME $user`
|
||||
$RSH $i /bin/rm $remoteprog 2> /dev/null
|
||||
echo
|
||||
- $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
+ $RSH $i $DIR2/tools/comp_damask_mp $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
# check if successful, the new executable should be there
|
||||
line=`$RSH $i /bin/ls $remoteprog 2> /dev/null`
|
||||
if test "$line"
|
||||
then
|
||||
echo compilation and linking successful on host $i
|
||||
else
|
||||
- echo "$0: compile failed for $usersubname on host $i"
|
||||
+ echo "$0: compile failed for $user on host $i"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
fi
|
||||
# remove the user subroutine on remote machine
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RSH $i /bin/rm $remoteuser.f 2> /dev/null
|
||||
+ $RSH $i /bin/rm $remoteuser 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -3586,27 +3533,15 @@
|
||||
if test "$userhost"
|
||||
then
|
||||
echo
|
||||
- echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
- fi
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
+ echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
fi
|
||||
+ userobj=$usernoext.o
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTRANMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $usersubname"
|
||||
+ echo "$0: compile failed for $user"
|
||||
echo " $PRODUCT Exit number 3"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi # if test $user
|
||||
|
||||
@@ -3628,6 +3563,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -3669,6 +3605,9 @@
|
||||
prgsav=yes
|
||||
fi # if test $link
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
|
||||
#
|
||||
# run marc
|
||||
@@ -3763,7 +3702,7 @@
|
||||
else
|
||||
#dllrun >0
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes;then
|
||||
@@ -3888,7 +3827,7 @@
|
||||
# first copy over the user sub if local directories
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RCP $user.f $i:$DIR1/
|
||||
+ $RCP $user $i:$DIR1/
|
||||
fi
|
||||
# do the compilation on the other machine
|
||||
if test ${dirstatus[$counter]} = "shared"
|
||||
@@ -3901,20 +3840,20 @@
|
||||
remoteuser=$DIR1/`$BASENAME $user`
|
||||
$RSH $i /bin/rm $remoteprog 2> /dev/null
|
||||
echo
|
||||
- $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
+ $RSH $i $DIR2/tools/comp_damask_mp $DIR2 $DIR1 $remoteuser $remoteprog
|
||||
# check if successful, the new executable should be there
|
||||
line=`$RSH $i /bin/ls $remoteprog 2> /dev/null`
|
||||
if test "$line"
|
||||
then
|
||||
echo compilation and linking successful on host $i
|
||||
else
|
||||
- echo "$0: compile failed for $usersubname on host $i"
|
||||
+ echo "$0: compile failed for $user on host $i"
|
||||
exit 1
|
||||
fi
|
||||
# remove the user subroutine on remote machine
|
||||
if test ${dirstatus[$counter]} = "local"
|
||||
then
|
||||
- $RSH $i /bin/rm $remoteuser.f 2> /dev/null
|
||||
+ $RSH $i /bin/rm $remoteuser 2> /dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -3924,26 +3863,14 @@
|
||||
if test "$userhost"
|
||||
then
|
||||
echo
|
||||
- echo "Compiling and linking user subroutine $user.f on host `hostname`"
|
||||
- fi
|
||||
- userobj=$DIRJOB/`$BASENAME $user .f`.o
|
||||
- basefile=`$BASENAME $usersubname`
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- usersub=$DIRJOB/`$BASENAME $user .f`.F
|
||||
- ln -sf "$user.f" "$usersub"
|
||||
- else
|
||||
- usersub=$usersubname
|
||||
+ echo "Compiling and linking user subroutine $user on host `hostname`"
|
||||
fi
|
||||
+ userobj=$usernoext.o
|
||||
- $FORTRAN $usersub -o $userobj || \
|
||||
+ $DFORTRANMP $user -o $userobj || \
|
||||
{
|
||||
- echo "$0: compile failed for $usersubname"
|
||||
+ echo "$0: compile failed for $user"
|
||||
exit 1
|
||||
}
|
||||
/bin/rm $program 2>/dev/null
|
||||
- if test ${basefile##*.} = f
|
||||
- then
|
||||
- /bin/rm -f "$usersub"
|
||||
- fi
|
||||
fi # if test $user
|
||||
|
||||
@@ -3965,6 +3892,7 @@
|
||||
$TKLIBS \
|
||||
$MRCLIBS \
|
||||
$METISLIBS \
|
||||
+ $DAMASK \
|
||||
$SFLIB \
|
||||
$OPENSSL_LIB \
|
||||
$SYSLIBS \
|
||||
@@ -4005,7 +3933,9 @@
|
||||
prgsav=yes
|
||||
fi # if test $link
|
||||
/bin/rm $userobj 2>/dev/null
|
||||
-
|
||||
+/bin/rm $DIRJOB/*.mod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*.smod 2>/dev/null
|
||||
+/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null
|
||||
# done if no job id given
|
||||
if test -z "$jid"
|
||||
then
|
||||
@@ -4125,7 +4055,7 @@
|
||||
else
|
||||
#dllrun >0
|
||||
if test $cpdll = yes; then
|
||||
- filename=`basename $usersubname .f`
|
||||
+ filename=$usernoext
|
||||
/bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null
|
||||
fi
|
||||
if test $rmdll = yes;then
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
+++
|
||||
@@ -1,18 +1,5 @@
|
||||
#!/bin/sh
|
||||
-# This script opens a window running an editor. The default window is an
|
||||
-# xterm, and the default editor is vi. These may be customized.
|
||||
+# This script opens a window running an editor.
|
||||
+# The command to invoke the editor is specified during DAMASK installation
|
||||
|
||||
-dir=
|
||||
-for d in /usr/bin /usr/bin/X11; do
|
||||
- if test -x "$d/xterm"; then
|
||||
- dir="$d"
|
||||
- break
|
||||
- fi
|
||||
-done
|
||||
-
|
||||
-if test -z "$dir"; then
|
||||
- echo "$0: Could not find xterm"
|
||||
- exit 1
|
||||
-fi
|
||||
-
|
||||
-"$dir/xterm" -T "vi $*" -n "vi $*" -e vi $*
|
||||
+%EDITOR% $*
|
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
+++
|
||||
@@ -91,6 +91,7 @@
|
||||
srcfile="-u $srcfile -save y"
|
||||
;;
|
||||
runsaved)
|
||||
+ srcfile=${srcfile%.*}".marc"
|
||||
srcfile="-prog $srcfile"
|
||||
;;
|
||||
esac
|
||||
@@ -189,12 +190,12 @@
|
||||
unset PYTHONPATH
|
||||
|
||||
if [ "$doe_first" = "-" ]; then # submit of regular Marc job
|
||||
- "${DIR}/tools/run_marc" $slv -j $job -v n -b y $nprocds $nprocd \
|
||||
+ "${DIR}/tools/run_damask_hmp" $slv -j $job -v n -b y $nprocds $nprocd \
|
||||
$srcfile $restart $postfile $viewfactorsfile $hostfile \
|
||||
$compat $copy_datfile $copy_postfile $scr_dir $dcoup \
|
||||
$assem_recov_nthread $nthread $nsolver $mode $gpu > /dev/null 2>&1
|
||||
else # submit of a DoE Marc job
|
||||
- "${DIR}/tools/run_marc" $slv -j $job -v n -b n $nprocds $nprocd \
|
||||
+ "${DIR}/tools/run_damask_hmp" $slv -j $job -v n -b n $nprocds $nprocd \
|
||||
$srcfile $restart $postfile $viewfactorsfile $hostfile \
|
||||
$compat $copy_datfile $copy_postfile $scr_dir $dcoup \
|
||||
$assem_recov_nthread $nthread $nsolver $mode $gpu
|
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
+++
|
||||
@@ -91,6 +91,7 @@
|
||||
srcfile="-u $srcfile -save y"
|
||||
;;
|
||||
runsaved)
|
||||
+ srcfile=${srcfile%.*}".marc"
|
||||
srcfile="-prog $srcfile"
|
||||
;;
|
||||
esac
|
||||
@@ -189,12 +190,12 @@
|
||||
unset PYTHONPATH
|
||||
|
||||
if [ "$doe_first" = "-" ]; then # submit of regular Marc job
|
||||
- "${DIR}/tools/run_marc" $slv -j $job -v n -b y $nprocds $nprocd \
|
||||
+ "${DIR}/tools/run_damask_mp" $slv -j $job -v n -b y $nprocds $nprocd \
|
||||
$srcfile $restart $postfile $viewfactorsfile $hostfile \
|
||||
$compat $copy_datfile $copy_postfile $scr_dir $dcoup \
|
||||
$assem_recov_nthread $nthread $nsolver $mode $gpu > /dev/null 2>&1
|
||||
else # submit of a DoE Marc job
|
||||
- "${DIR}/tools/run_marc" $slv -j $job -v n -b n $nprocds $nprocd \
|
||||
+ "${DIR}/tools/run_damask_mp" $slv -j $job -v n -b n $nprocds $nprocd \
|
||||
$srcfile $restart $postfile $viewfactorsfile $hostfile \
|
||||
$compat $copy_datfile $copy_postfile $scr_dir $dcoup \
|
||||
$assem_recov_nthread $nthread $nsolver $mode $gpu
|
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
+++
|
||||
@@ -91,6 +91,7 @@
|
||||
srcfile="-u $srcfile -save y"
|
||||
;;
|
||||
runsaved)
|
||||
+ srcfile=${srcfile%.*}".marc"
|
||||
srcfile="-prog $srcfile"
|
||||
;;
|
||||
esac
|
||||
@@ -189,12 +190,12 @@
|
||||
unset PYTHONPATH
|
||||
|
||||
if [ "$doe_first" = "-" ]; then # submit of regular Marc job
|
||||
- "${DIR}/tools/run_marc" $slv -j $job -v n -b y $nprocds $nprocd \
|
||||
+ "${DIR}/tools/run_damask_lmp" $slv -j $job -v n -b y $nprocds $nprocd \
|
||||
$srcfile $restart $postfile $viewfactorsfile $hostfile \
|
||||
$compat $copy_datfile $copy_postfile $scr_dir $dcoup \
|
||||
$assem_recov_nthread $nthread $nsolver $mode $gpu > /dev/null 2>&1
|
||||
else # submit of a DoE Marc job
|
||||
- "${DIR}/tools/run_marc" $slv -j $job -v n -b n $nprocds $nprocd \
|
||||
+ "${DIR}/tools/run_damask_lmp" $slv -j $job -v n -b n $nprocds $nprocd \
|
||||
$srcfile $restart $postfile $viewfactorsfile $hostfile \
|
||||
$compat $copy_datfile $copy_postfile $scr_dir $dcoup \
|
||||
$assem_recov_nthread $nthread $nsolver $mode $gpu
|
|
@ -0,0 +1,158 @@
|
|||
---
|
||||
+++
|
||||
@@ -362,11 +362,18 @@
|
||||
}
|
||||
button {
|
||||
position +25 =
|
||||
- size 25 4
|
||||
+ size 18 4
|
||||
text "ADVANCED JOB SUBMISSION"
|
||||
help "job_run#Job Submission And Control"
|
||||
popmenu job_submit_adv_pm
|
||||
}
|
||||
+ button {
|
||||
+ position +18 =
|
||||
+ size 7 4
|
||||
+ text "DAMASK"
|
||||
+ help "damask_run#Job Submission And Control"
|
||||
+ popmenu damask
|
||||
+ }
|
||||
button {
|
||||
position 0 +4
|
||||
size 16 4
|
||||
@@ -1307,6 +1314,135 @@
|
||||
}
|
||||
|
||||
|
||||
+#--------------------------------------------------------------------------------------------------
|
||||
+popmenu damask {
|
||||
+
|
||||
+#ifdef QT_MENTAT
|
||||
+ text "DAMASK.MPIE.DE"
|
||||
+#endif
|
||||
+
|
||||
+ group {
|
||||
+#ifndef QT_MENTAT
|
||||
+ label {
|
||||
+ position 0 0
|
||||
+ size 50 4
|
||||
+ text "DAMASK.MPIE.DE"
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ label {
|
||||
+ position 1 6
|
||||
+ size 13 6
|
||||
+ text "Optimzation"
|
||||
+ border_width 1
|
||||
+ border_color black
|
||||
+ }
|
||||
+
|
||||
+ label {
|
||||
+ position +13 =
|
||||
+ size 20 6
|
||||
+ text "write Input"
|
||||
+ border_width 1
|
||||
+ border_color black
|
||||
+ }
|
||||
+
|
||||
+ label {
|
||||
+ position +18 =
|
||||
+ size 30 6
|
||||
+ text "do not write Inp."
|
||||
+ border_width 1
|
||||
+ border_color black
|
||||
+ }
|
||||
+
|
||||
+ label {
|
||||
+ position -32 +6
|
||||
+ size 12 6
|
||||
+ text "O3 / OpenMP"
|
||||
+ border_width 1
|
||||
+ border_color black
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position +12 =
|
||||
+ size 20 6
|
||||
+ text "Submit"
|
||||
+ command "*submit_job 4 *monitor_job"
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position +20 =
|
||||
+ size 20 6
|
||||
+ text "Execute"
|
||||
+ command "*execute_job 4 *monitor_job"
|
||||
+ }
|
||||
+
|
||||
+ label {
|
||||
+ position -32 +6
|
||||
+ size 12 6
|
||||
+ text "O1 / OpenMP"
|
||||
+ border_width 1
|
||||
+ border_color black
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position +12 =
|
||||
+ size 20 6
|
||||
+ text "Submit"
|
||||
+ command "*submit_job 5 *monitor_job"
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position +20 =
|
||||
+ size 20 6
|
||||
+ text "Execute"
|
||||
+ command "*execute_job 5 *monitor_job"
|
||||
+ }
|
||||
+
|
||||
+ label {
|
||||
+ position -32 +6
|
||||
+ size 12 6
|
||||
+ text "O0 / OpenMP"
|
||||
+ border_width 1
|
||||
+ border_color black
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position +12 =
|
||||
+ size 20 6
|
||||
+ text "Submit"
|
||||
+ command "*submit_job 6 *monitor_job"
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position +20 =
|
||||
+ size 20 6
|
||||
+ text "Execute"
|
||||
+ command "*execute_job 6 *monitor_job"
|
||||
+ }
|
||||
+
|
||||
+ popdown {
|
||||
+ position 19 +8
|
||||
+ size 12 8
|
||||
+ text "CANCEL"
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+ window {
|
||||
+ parent mentat
|
||||
+ origin 38 8
|
||||
+#ifdef DCOM
|
||||
+ size 50 100
|
||||
+#else
|
||||
+ size 50 94
|
||||
+#endif
|
||||
+ background_color body
|
||||
+ border_width 1
|
||||
+ border_color border
|
||||
+ buffering single
|
||||
+ }
|
||||
+ mode permanent
|
||||
+}
|
||||
+
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
popmenu job_exit_msg_pm {
|
||||
|
|
@ -65,13 +65,13 @@ def mesh(r,d):
|
|||
return [
|
||||
"*add_nodes",
|
||||
"%f %f %f"%(0.0,0.0,0.0),
|
||||
"%f %f %f"%(0.0,0.0,d[2]),
|
||||
"%f %f %f"%(0.0,d[1],d[2]),
|
||||
"%f %f %f"%(d[0],0.0,0.0),
|
||||
"%f %f %f"%(d[0],d[1],0.0),
|
||||
"%f %f %f"%(0.0,d[1],0.0),
|
||||
"%f %f %f"%(-d[0],0.0,0.0),
|
||||
"%f %f %f"%(-d[0],0.0,d[2]),
|
||||
"%f %f %f"%(-d[0],d[1],d[2]),
|
||||
"%f %f %f"%(-d[0],d[1],0.0),
|
||||
"%f %f %f"%(0.0,0.0,d[2]),
|
||||
"%f %f %f"%(d[0],0.0,d[2]),
|
||||
"%f %f %f"%(d[0],d[1],d[2]),
|
||||
"%f %f %f"%(0.0,d[1],d[2]),
|
||||
"*add_elements",
|
||||
"1",
|
||||
"2",
|
||||
|
@ -82,19 +82,17 @@ def mesh(r,d):
|
|||
"7",
|
||||
"8",
|
||||
"*sub_divisions",
|
||||
"%i %i %i"%(r[2],r[1],r[0]),
|
||||
"%i %i %i"%(r[0],r[1],r[2]),
|
||||
"*subdivide_elements",
|
||||
"all_existing",
|
||||
"*set_sweep_tolerance",
|
||||
"%f"%(float(min(d))/max(r)/2.0),
|
||||
"*sweep_all",
|
||||
"*renumber_all",
|
||||
"*set_move_scale_factor x -1",
|
||||
"*move_elements",
|
||||
"all_existing",
|
||||
"*flip_elements",
|
||||
"all_existing",
|
||||
"*fill_view",
|
||||
"*remove_unused_nodes",
|
||||
"*set_renumber_direction",
|
||||
"%i %i %i"%(1,r[0],r[0]*r[1]),
|
||||
"*renumber_elements_directed",
|
||||
"*renumber_nodes_directed",
|
||||
]
|
||||
|
||||
|
||||
|
@ -142,8 +140,7 @@ def initial_conditions(material):
|
|||
cmds = [\
|
||||
"*new_icond",
|
||||
"*icond_name _temperature",
|
||||
"*icond_type state_variable",
|
||||
"*icond_param_value state_var_id 1",
|
||||
"*icond_type elem_temperature_state",
|
||||
"*icond_dof_value var 300",
|
||||
"*add_icond_elements",
|
||||
"all_existing",
|
||||
|
@ -153,9 +150,9 @@ def initial_conditions(material):
|
|||
cmds.append([\
|
||||
"*new_icond",
|
||||
"*icond_name material_%i"%(grain+1),
|
||||
"*icond_type state_variable",
|
||||
"*icond_type elem_user_state",
|
||||
"*icond_param_value state_var_id 2",
|
||||
"*icond_dof_value var %i"%(grain+1),
|
||||
"*icond_dof_value var %i"%(grain),
|
||||
"*add_icond_elements",
|
||||
elementList,
|
||||
"#",
|
||||
|
@ -196,7 +193,7 @@ if filenames == []: filenames = [None]
|
|||
for name in filenames:
|
||||
print(script_name+': '+name)
|
||||
|
||||
geom = damask.Grid.load(StringIO(''.join(sys.stdin.read())) if name is None else name)
|
||||
geom = damask.GeomGrid.load(StringIO(''.join(sys.stdin.read())) if name is None else name)
|
||||
material = geom.material.flatten(order='F')
|
||||
|
||||
cmds = [\
|
||||
|
@ -209,6 +206,7 @@ for name in filenames:
|
|||
'*show_model',
|
||||
'*redraw',
|
||||
'*draw_automatic',
|
||||
'*fill_view',
|
||||
]
|
||||
|
||||
output_locals = {}
|
||||
|
|
|
@ -26,5 +26,5 @@ from ._vtk import VTK # noqa
|
|||
from ._config import Config # noqa
|
||||
from ._configmaterial import ConfigMaterial # noqa
|
||||
from ._loadcasegrid import LoadcaseGrid # noqa
|
||||
from ._grid import Grid # noqa
|
||||
from ._geomgrid import GeomGrid # noqa
|
||||
from ._result import Result # noqa
|
||||
|
|
|
@ -296,8 +296,8 @@ class Colormap(mpl.colors.ListedColormap):
|
|||
RGBA image of shaded data.
|
||||
|
||||
"""
|
||||
mask = np.logical_not(np.isnan(field) if gap is None else \
|
||||
np.logical_or (np.isnan(field), field == gap)) # mask NaN (and gap if present)
|
||||
mask = np.logical_not(np.isnan(field) if gap is None else
|
||||
np.logical_or(np.isnan(field), field == gap)) # mask NaN (and gap if present)
|
||||
|
||||
l,r = (field[mask].min(),field[mask].max()) if bounds is None else \
|
||||
(bounds[0],bounds[1])
|
||||
|
@ -305,9 +305,11 @@ class Colormap(mpl.colors.ListedColormap):
|
|||
if abs(delta := r-l) * 1e8 <= (avg := 0.5*abs(r+l)): # delta is similar to numerical noise
|
||||
l,r = (l-0.5*avg*np.sign(delta),r+0.5*avg*np.sign(delta)) # extend range to have actual data centered within
|
||||
|
||||
field_ = np.nan_to_num(field, nan=(l+r)/2, posinf=r, neginf=l)
|
||||
|
||||
return Image.fromarray(
|
||||
(np.dstack((
|
||||
self.colors[(np.round(np.clip((field-l)/delta,0.0,1.0)*(self.N-1))).astype(np.uint16),:3],
|
||||
self.colors[np.round(np.clip((field_-l)/(r-l),0.0,1.0)*(self.N-1)).astype(np.uint16),:3],
|
||||
mask.astype(float)
|
||||
)
|
||||
)*255
|
||||
|
|
|
@ -144,7 +144,7 @@ class ConfigMaterial(Config):
|
|||
|
||||
Notes
|
||||
-----
|
||||
damask.Grid.load_DREAM3D gives the corresponding geometry for
|
||||
damask.GeomGrid.load_DREAM3D gives the corresponding geometry for
|
||||
the grid solver.
|
||||
|
||||
For cell-wise data, only unique combinations of
|
||||
|
|
|
@ -6,7 +6,8 @@ from ._typehints import FloatSequence, CrystalFamily, BravaisLattice, CrystalKin
|
|||
from . import util
|
||||
from . import Rotation
|
||||
|
||||
lattice_symmetries: Dict[BravaisLattice, CrystalFamily] = {
|
||||
|
||||
lattice_symmetries: Dict[Optional[BravaisLattice], CrystalFamily] = {
|
||||
'aP': 'triclinic',
|
||||
|
||||
'mP': 'monoclinic',
|
||||
|
@ -27,276 +28,406 @@ lattice_symmetries: Dict[BravaisLattice, CrystalFamily] = {
|
|||
'cF': 'cubic',
|
||||
}
|
||||
|
||||
orientation_relationships: Dict[str, Dict[BravaisLattice,np.ndarray]] = {
|
||||
'KS': {
|
||||
'cF': np.array([
|
||||
[[-1, 0, 1],[ 1, 1, 1]],
|
||||
[[-1, 0, 1],[ 1, 1, 1]],
|
||||
[[ 0, 1,-1],[ 1, 1, 1]],
|
||||
[[ 0, 1,-1],[ 1, 1, 1]],
|
||||
[[ 1,-1, 0],[ 1, 1, 1]],
|
||||
[[ 1,-1, 0],[ 1, 1, 1]],
|
||||
[[ 1, 0,-1],[ 1,-1, 1]],
|
||||
[[ 1, 0,-1],[ 1,-1, 1]],
|
||||
[[-1,-1, 0],[ 1,-1, 1]],
|
||||
[[-1,-1, 0],[ 1,-1, 1]],
|
||||
[[ 0, 1, 1],[ 1,-1, 1]],
|
||||
[[ 0, 1, 1],[ 1,-1, 1]],
|
||||
[[ 0,-1, 1],[-1, 1, 1]],
|
||||
[[ 0,-1, 1],[-1, 1, 1]],
|
||||
[[-1, 0,-1],[-1, 1, 1]],
|
||||
[[-1, 0,-1],[-1, 1, 1]],
|
||||
[[ 1, 1, 0],[-1, 1, 1]],
|
||||
[[ 1, 1, 0],[-1, 1, 1]],
|
||||
[[-1, 1, 0],[ 1, 1,-1]],
|
||||
[[-1, 1, 0],[ 1, 1,-1]],
|
||||
[[ 0,-1,-1],[ 1, 1,-1]],
|
||||
[[ 0,-1,-1],[ 1, 1,-1]],
|
||||
[[ 1, 0, 1],[ 1, 1,-1]],
|
||||
[[ 1, 0, 1],[ 1, 1,-1]],
|
||||
],dtype=float),
|
||||
'cI': np.array([
|
||||
[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
],dtype=float),
|
||||
},
|
||||
'GT': {
|
||||
'cF': np.array([
|
||||
[[ -5,-12, 17],[ 1, 1, 1]],
|
||||
[[ 17, -5,-12],[ 1, 1, 1]],
|
||||
[[-12, 17, -5],[ 1, 1, 1]],
|
||||
[[ 5, 12, 17],[ -1, -1, 1]],
|
||||
[[-17, 5,-12],[ -1, -1, 1]],
|
||||
[[ 12,-17, -5],[ -1, -1, 1]],
|
||||
[[ -5, 12,-17],[ -1, 1, 1]],
|
||||
[[ 17, 5, 12],[ -1, 1, 1]],
|
||||
[[-12,-17, 5],[ -1, 1, 1]],
|
||||
[[ 5,-12,-17],[ 1, -1, 1]],
|
||||
[[-17, -5, 12],[ 1, -1, 1]],
|
||||
[[ 12, 17, 5],[ 1, -1, 1]],
|
||||
[[ -5, 17,-12],[ 1, 1, 1]],
|
||||
[[-12, -5, 17],[ 1, 1, 1]],
|
||||
[[ 17,-12, -5],[ 1, 1, 1]],
|
||||
[[ 5,-17,-12],[ -1, -1, 1]],
|
||||
[[ 12, 5, 17],[ -1, -1, 1]],
|
||||
[[-17, 12, -5],[ -1, -1, 1]],
|
||||
[[ -5,-17, 12],[ -1, 1, 1]],
|
||||
[[-12, 5,-17],[ -1, 1, 1]],
|
||||
[[ 17, 12, 5],[ -1, 1, 1]],
|
||||
[[ 5, 17, 12],[ 1, -1, 1]],
|
||||
[[ 12, -5,-17],[ 1, -1, 1]],
|
||||
[[-17,-12, 5],[ 1, -1, 1]],
|
||||
],dtype=float),
|
||||
'cI': np.array([
|
||||
[[-17, -7, 17],[ 1, 0, 1]],
|
||||
[[ 17,-17, -7],[ 1, 1, 0]],
|
||||
[[ -7, 17,-17],[ 0, 1, 1]],
|
||||
[[ 17, 7, 17],[ -1, 0, 1]],
|
||||
[[-17, 17, -7],[ -1, -1, 0]],
|
||||
[[ 7,-17,-17],[ 0, -1, 1]],
|
||||
[[-17, 7,-17],[ -1, 0, 1]],
|
||||
[[ 17, 17, 7],[ -1, 1, 0]],
|
||||
[[ -7,-17, 17],[ 0, 1, 1]],
|
||||
[[ 17, -7,-17],[ 1, 0, 1]],
|
||||
[[-17,-17, 7],[ 1, -1, 0]],
|
||||
[[ 7, 17, 17],[ 0, -1, 1]],
|
||||
[[-17, 17, -7],[ 1, 1, 0]],
|
||||
[[ -7,-17, 17],[ 0, 1, 1]],
|
||||
[[ 17, -7,-17],[ 1, 0, 1]],
|
||||
[[ 17,-17, -7],[ -1, -1, 0]],
|
||||
[[ 7, 17, 17],[ 0, -1, 1]],
|
||||
[[-17, 7,-17],[ -1, 0, 1]],
|
||||
[[-17,-17, 7],[ -1, 1, 0]],
|
||||
[[ -7, 17,-17],[ 0, 1, 1]],
|
||||
[[ 17, 7, 17],[ -1, 0, 1]],
|
||||
[[ 17, 17, 7],[ 1, -1, 0]],
|
||||
[[ 7,-17,-17],[ 0, -1, 1]],
|
||||
[[-17, -7, 17],[ 1, 0, 1]],
|
||||
],dtype=float),
|
||||
},
|
||||
'GT_prime': {
|
||||
'cF' : np.array([
|
||||
[[ 0, 1, -1],[ 7, 17, 17]],
|
||||
[[ -1, 0, 1],[ 17, 7, 17]],
|
||||
[[ 1, -1, 0],[ 17, 17, 7]],
|
||||
[[ 0, -1, -1],[ -7,-17, 17]],
|
||||
[[ 1, 0, 1],[-17, -7, 17]],
|
||||
[[ 1, -1, 0],[-17,-17, 7]],
|
||||
[[ 0, 1, -1],[ 7,-17,-17]],
|
||||
[[ 1, 0, 1],[ 17, -7,-17]],
|
||||
[[ -1, -1, 0],[ 17,-17, -7]],
|
||||
[[ 0, -1, -1],[ -7, 17,-17]],
|
||||
[[ -1, 0, 1],[-17, 7,-17]],
|
||||
[[ -1, -1, 0],[-17, 17, -7]],
|
||||
[[ 0, -1, 1],[ 7, 17, 17]],
|
||||
[[ 1, 0, -1],[ 17, 7, 17]],
|
||||
[[ -1, 1, 0],[ 17, 17, 7]],
|
||||
[[ 0, 1, 1],[ -7,-17, 17]],
|
||||
[[ -1, 0, -1],[-17, -7, 17]],
|
||||
[[ -1, 1, 0],[-17,-17, 7]],
|
||||
[[ 0, -1, 1],[ 7,-17,-17]],
|
||||
[[ -1, 0, -1],[ 17, -7,-17]],
|
||||
[[ 1, 1, 0],[ 17,-17, -7]],
|
||||
[[ 0, 1, 1],[ -7, 17,-17]],
|
||||
[[ 1, 0, -1],[-17, 7,-17]],
|
||||
[[ 1, 1, 0],[-17, 17, -7]],
|
||||
],dtype=float),
|
||||
'cI' : np.array([
|
||||
[[ 1, 1, -1],[ 12, 5, 17]],
|
||||
[[ -1, 1, 1],[ 17, 12, 5]],
|
||||
[[ 1, -1, 1],[ 5, 17, 12]],
|
||||
[[ -1, -1, -1],[-12, -5, 17]],
|
||||
[[ 1, -1, 1],[-17,-12, 5]],
|
||||
[[ 1, -1, -1],[ -5,-17, 12]],
|
||||
[[ -1, 1, -1],[ 12, -5,-17]],
|
||||
[[ 1, 1, 1],[ 17,-12, -5]],
|
||||
[[ -1, -1, 1],[ 5,-17,-12]],
|
||||
[[ 1, -1, -1],[-12, 5,-17]],
|
||||
[[ -1, -1, 1],[-17, 12, -5]],
|
||||
[[ -1, -1, -1],[ -5, 17,-12]],
|
||||
[[ 1, -1, 1],[ 12, 17, 5]],
|
||||
[[ 1, 1, -1],[ 5, 12, 17]],
|
||||
[[ -1, 1, 1],[ 17, 5, 12]],
|
||||
[[ -1, 1, 1],[-12,-17, 5]],
|
||||
[[ -1, -1, -1],[ -5,-12, 17]],
|
||||
[[ -1, 1, -1],[-17, -5, 12]],
|
||||
[[ -1, -1, 1],[ 12,-17, -5]],
|
||||
[[ -1, 1, -1],[ 5,-12,-17]],
|
||||
[[ 1, 1, 1],[ 17, -5,-12]],
|
||||
[[ 1, 1, 1],[-12, 17, -5]],
|
||||
[[ 1, -1, -1],[ -5, 12,-17]],
|
||||
[[ 1, 1, -1],[-17, 5,-12]],
|
||||
],dtype=float),
|
||||
},
|
||||
'NW': {
|
||||
'cF' : np.array([
|
||||
[[ 2, -1, -1],[ 1, 1, 1]],
|
||||
[[ -1, 2, -1],[ 1, 1, 1]],
|
||||
[[ -1, -1, 2],[ 1, 1, 1]],
|
||||
[[ -2, -1, -1],[ -1, 1, 1]],
|
||||
[[ 1, 2, -1],[ -1, 1, 1]],
|
||||
[[ 1, -1, 2],[ -1, 1, 1]],
|
||||
[[ 2, 1, -1],[ 1, -1, 1]],
|
||||
[[ -1, -2, -1],[ 1, -1, 1]],
|
||||
[[ -1, 1, 2],[ 1, -1, 1]],
|
||||
[[ 2, -1, 1],[ -1, -1, 1]],
|
||||
[[ -1, 2, 1],[ -1, -1, 1]],
|
||||
[[ -1, -1, -2],[ -1, -1, 1]],
|
||||
],dtype=float),
|
||||
'cI' : np.array([
|
||||
[[ 0, -1, 1],[ 0, 1, 1]],
|
||||
[[ 0, -1, 1],[ 0, 1, 1]],
|
||||
[[ 0, -1, 1],[ 0, 1, 1]],
|
||||
[[ 0, -1, 1],[ 0, 1, 1]],
|
||||
[[ 0, -1, 1],[ 0, 1, 1]],
|
||||
[[ 0, -1, 1],[ 0, 1, 1]],
|
||||
[[ 0, -1, 1],[ 0, 1, 1]],
|
||||
[[ 0, -1, 1],[ 0, 1, 1]],
|
||||
[[ 0, -1, 1],[ 0, 1, 1]],
|
||||
[[ 0, -1, 1],[ 0, 1, 1]],
|
||||
[[ 0, -1, 1],[ 0, 1, 1]],
|
||||
[[ 0, -1, 1],[ 0, 1, 1]],
|
||||
],dtype=float),
|
||||
},
|
||||
'Pitsch': {
|
||||
'cF' : np.array([
|
||||
[[ 1, 0, 1],[ 0, 1, 0]],
|
||||
[[ 1, 1, 0],[ 0, 0, 1]],
|
||||
[[ 0, 1, 1],[ 1, 0, 0]],
|
||||
[[ 0, 1, -1],[ 1, 0, 0]],
|
||||
[[ -1, 0, 1],[ 0, 1, 0]],
|
||||
[[ 1, -1, 0],[ 0, 0, 1]],
|
||||
[[ 1, 0, -1],[ 0, 1, 0]],
|
||||
[[ -1, 1, 0],[ 0, 0, 1]],
|
||||
[[ 0, -1, 1],[ 1, 0, 0]],
|
||||
[[ 0, 1, 1],[ 1, 0, 0]],
|
||||
[[ 1, 0, 1],[ 0, 1, 0]],
|
||||
[[ 1, 1, 0],[ 0, 0, 1]],
|
||||
],dtype=float),
|
||||
'cI' : np.array([
|
||||
[[ 1, -1, 1],[ -1, 0, 1]],
|
||||
[[ 1, 1, -1],[ 1, -1, 0]],
|
||||
[[ -1, 1, 1],[ 0, 1, -1]],
|
||||
[[ -1, 1, -1],[ 0, -1, -1]],
|
||||
[[ -1, -1, 1],[ -1, 0, -1]],
|
||||
[[ 1, -1, -1],[ -1, -1, 0]],
|
||||
[[ 1, -1, -1],[ -1, 0, -1]],
|
||||
[[ -1, 1, -1],[ -1, -1, 0]],
|
||||
[[ -1, -1, 1],[ 0, -1, -1]],
|
||||
[[ -1, 1, 1],[ 0, -1, 1]],
|
||||
[[ 1, -1, 1],[ 1, 0, -1]],
|
||||
[[ 1, 1, -1],[ -1, 1, 0]],
|
||||
],dtype=float),
|
||||
},
|
||||
'Bain': {
|
||||
'cF' : np.array([
|
||||
[[ 0, 1, 0],[ 1, 0, 0]],
|
||||
[[ 0, 0, 1],[ 0, 1, 0]],
|
||||
[[ 1, 0, 0],[ 0, 0, 1]],
|
||||
],dtype=float),
|
||||
'cI' : np.array([
|
||||
[[ 0, 1, 1],[ 1, 0, 0]],
|
||||
[[ 1, 0, 1],[ 0, 1, 0]],
|
||||
[[ 1, 1, 0],[ 0, 0, 1]],
|
||||
],dtype=float),
|
||||
},
|
||||
'Burgers' : {
|
||||
'cI' : np.array([
|
||||
[[ -1, 1, 1],[ 1, 1, 0]],
|
||||
[[ -1, 1, -1],[ 1, 1, 0]],
|
||||
[[ 1, 1, 1],[ 1, -1, 0]],
|
||||
[[ 1, 1, -1],[ 1, -1, 0]],
|
||||
orientation_relationships: Dict[str, Dict[str,List[np.ndarray]]] = {
|
||||
'KS': { # https://doi.org/10.1016/j.jallcom.2012.02.004
|
||||
'cF-->cI' : [
|
||||
np.repeat(np.array([
|
||||
[[-1, 0, 1],[ 1, 1, 1]],
|
||||
[[ 0, 1,-1],[ 1, 1, 1]],
|
||||
[[ 1,-1, 0],[ 1, 1, 1]],
|
||||
|
||||
[[ 1, 1, -1],[ 1, 0, 1]],
|
||||
[[ -1, 1, 1],[ 1, 0, 1]],
|
||||
[[ 1, 1, 1],[ -1, 0, 1]],
|
||||
[[ 1, -1, 1],[ -1, 0, 1]],
|
||||
[[ 1, 0,-1],[ 1,-1, 1]],
|
||||
[[-1,-1, 0],[ 1,-1, 1]],
|
||||
[[ 0, 1, 1],[ 1,-1, 1]],
|
||||
|
||||
[[ -1, 1, -1],[ 0, 1, 1]],
|
||||
[[ 1, 1, -1],[ 0, 1, 1]],
|
||||
[[ -1, 1, 1],[ 0, -1, 1]],
|
||||
[[ 1, 1, 1],[ 0, -1, 1]],
|
||||
],dtype=float),
|
||||
'hP' : np.array([
|
||||
[[ -1, 2, -1, 0],[ 0, 0, 0, 1]],
|
||||
[[ -1, -1, 2, 0],[ 0, 0, 0, 1]],
|
||||
[[ -1, 2, -1, 0],[ 0, 0, 0, 1]],
|
||||
[[ -1, -1, 2, 0],[ 0, 0, 0, 1]],
|
||||
[[ 0,-1, 1],[-1, 1, 1]],
|
||||
[[-1, 0,-1],[-1, 1, 1]],
|
||||
[[ 1, 1, 0],[-1, 1, 1]],
|
||||
|
||||
[[ -1, 2, -1, 0],[ 0, 0, 0, 1]],
|
||||
[[ -1, -1, 2, 0],[ 0, 0, 0, 1]],
|
||||
[[ -1, 2, -1, 0],[ 0, 0, 0, 1]],
|
||||
[[ -1, -1, 2, 0],[ 0, 0, 0, 1]],
|
||||
[[-1, 1, 0],[ 1, 1,-1]],
|
||||
[[ 0,-1,-1],[ 1, 1,-1]],
|
||||
[[ 1, 0, 1],[ 1, 1,-1]],
|
||||
],dtype=float),
|
||||
2,axis=0),
|
||||
np.tile(np.array([[[-1,-1, 1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]]],dtype=float),
|
||||
(12,1,1)),
|
||||
],
|
||||
'cI-->cF' : [
|
||||
np.repeat(np.array([
|
||||
[[ 1, 1,-1],[ 0, 1, 1]],
|
||||
[[ 1,-1, 1],[ 0, 1, 1]],
|
||||
|
||||
[[ -1, 2, -1, 0],[ 0, 0, 0, 1]],
|
||||
[[ -1, -1, 2, 0],[ 0, 0, 0, 1]],
|
||||
[[ -1, 2, -1, 0],[ 0, 0, 0, 1]],
|
||||
[[ -1, -1, 2, 0],[ 0, 0, 0, 1]],
|
||||
],dtype=float),
|
||||
},
|
||||
}
|
||||
[[ 1, 1, 1],[ 0, 1,-1]],
|
||||
[[-1, 1, 1],[ 0, 1,-1]],
|
||||
|
||||
[[ 1, 1,-1],[ 1, 0, 1]],
|
||||
[[ 1,-1,-1],[ 1, 0, 1]],
|
||||
|
||||
[[ 1, 1, 1],[ 1, 0,-1]],
|
||||
[[ 1,-1, 1],[ 1, 0,-1]],
|
||||
|
||||
[[ 1,-1, 1],[ 1, 1, 0]],
|
||||
[[ 1,-1,-1],[ 1, 1, 0]],
|
||||
|
||||
[[ 1, 1, 1],[ 1,-1, 0]],
|
||||
[[ 1, 1,-1],[ 1,-1, 0]],
|
||||
],dtype=float),
|
||||
2,axis=0),
|
||||
np.tile(np.array([[[ 0, 1,-1],[ 1, 1, 1]],
|
||||
[[ 0,-1, 1],[ 1, 1, 1]]],dtype=float),
|
||||
(12,1,1)),
|
||||
],
|
||||
},
|
||||
'GT': { # https://doi.org/10.1107/S0021889805038276
|
||||
'cF-->cI' : [
|
||||
np.array([
|
||||
[[ -5,-12, 17],[ 1, 1, 1]],
|
||||
[[ 17, -5,-12],[ 1, 1, 1]],
|
||||
[[-12, 17, -5],[ 1, 1, 1]],
|
||||
[[ 5, 12, 17],[ -1, -1, 1]],
|
||||
[[-17, 5,-12],[ -1, -1, 1]],
|
||||
[[ 12,-17, -5],[ -1, -1, 1]],
|
||||
[[ -5, 12,-17],[ -1, 1, 1]],
|
||||
[[ 17, 5, 12],[ -1, 1, 1]],
|
||||
[[-12,-17, 5],[ -1, 1, 1]],
|
||||
[[ 5,-12,-17],[ 1, -1, 1]],
|
||||
[[-17, -5, 12],[ 1, -1, 1]],
|
||||
[[ 12, 17, 5],[ 1, -1, 1]],
|
||||
[[ -5, 17,-12],[ 1, 1, 1]],
|
||||
[[-12, -5, 17],[ 1, 1, 1]],
|
||||
[[ 17,-12, -5],[ 1, 1, 1]],
|
||||
[[ 5,-17,-12],[ -1, -1, 1]],
|
||||
[[ 12, 5, 17],[ -1, -1, 1]],
|
||||
[[-17, 12, -5],[ -1, -1, 1]],
|
||||
[[ -5,-17, 12],[ -1, 1, 1]],
|
||||
[[-12, 5,-17],[ -1, 1, 1]],
|
||||
[[ 17, 12, 5],[ -1, 1, 1]],
|
||||
[[ 5, 17, 12],[ 1, -1, 1]],
|
||||
[[ 12, -5,-17],[ 1, -1, 1]],
|
||||
[[-17,-12, 5],[ 1, -1, 1]],
|
||||
],dtype=float),
|
||||
np.array([
|
||||
[[-17, -7, 17],[ 1, 0, 1]],
|
||||
[[ 17,-17, -7],[ 1, 1, 0]],
|
||||
[[ -7, 17,-17],[ 0, 1, 1]],
|
||||
[[ 17, 7, 17],[ -1, 0, 1]],
|
||||
[[-17, 17, -7],[ -1, -1, 0]],
|
||||
[[ 7,-17,-17],[ 0, -1, 1]],
|
||||
[[-17, 7,-17],[ -1, 0, 1]],
|
||||
[[ 17, 17, 7],[ -1, 1, 0]],
|
||||
[[ -7,-17, 17],[ 0, 1, 1]],
|
||||
[[ 17, -7,-17],[ 1, 0, 1]],
|
||||
[[-17,-17, 7],[ 1, -1, 0]],
|
||||
[[ 7, 17, 17],[ 0, -1, 1]],
|
||||
[[-17, 17, -7],[ 1, 1, 0]],
|
||||
[[ -7,-17, 17],[ 0, 1, 1]],
|
||||
[[ 17, -7,-17],[ 1, 0, 1]],
|
||||
[[ 17,-17, -7],[ -1, -1, 0]],
|
||||
[[ 7, 17, 17],[ 0, -1, 1]],
|
||||
[[-17, 7,-17],[ -1, 0, 1]],
|
||||
[[-17,-17, 7],[ -1, 1, 0]],
|
||||
[[ -7, 17,-17],[ 0, 1, 1]],
|
||||
[[ 17, 7, 17],[ -1, 0, 1]],
|
||||
[[ 17, 17, 7],[ 1, -1, 0]],
|
||||
[[ 7,-17,-17],[ 0, -1, 1]],
|
||||
[[-17, -7, 17],[ 1, 0, 1]],
|
||||
],dtype=float),
|
||||
],
|
||||
'cI-->cF' : [
|
||||
np.array([
|
||||
[[-17, -7, 17],[ 1, 0, 1]],
|
||||
[[ 17,-17, -7],[ 1, 1, 0]],
|
||||
[[ -7, 17,-17],[ 0, 1, 1]],
|
||||
[[ 17, 7, 17],[ -1, 0, 1]],
|
||||
[[-17, 17, -7],[ -1, -1, 0]],
|
||||
[[ 7,-17,-17],[ 0, -1, 1]],
|
||||
[[-17, 7,-17],[ -1, 0, 1]],
|
||||
[[ 17, 17, 7],[ -1, 1, 0]],
|
||||
[[ -7,-17, 17],[ 0, 1, 1]],
|
||||
[[ 17, -7,-17],[ 1, 0, 1]],
|
||||
[[-17,-17, 7],[ 1, -1, 0]],
|
||||
[[ 7, 17, 17],[ 0, -1, 1]],
|
||||
[[-17, 17, -7],[ 1, 1, 0]],
|
||||
[[ -7,-17, 17],[ 0, 1, 1]],
|
||||
[[ 17, -7,-17],[ 1, 0, 1]],
|
||||
[[ 17,-17, -7],[ -1, -1, 0]],
|
||||
[[ 7, 17, 17],[ 0, -1, 1]],
|
||||
[[-17, 7,-17],[ -1, 0, 1]],
|
||||
[[-17,-17, 7],[ -1, 1, 0]],
|
||||
[[ -7, 17,-17],[ 0, 1, 1]],
|
||||
[[ 17, 7, 17],[ -1, 0, 1]],
|
||||
[[ 17, 17, 7],[ 1, -1, 0]],
|
||||
[[ 7,-17,-17],[ 0, -1, 1]],
|
||||
[[-17, -7, 17],[ 1, 0, 1]],
|
||||
],dtype=float),
|
||||
np.array([
|
||||
[[ -5,-12, 17],[ 1, 1, 1]],
|
||||
[[ 17, -5,-12],[ 1, 1, 1]],
|
||||
[[-12, 17, -5],[ 1, 1, 1]],
|
||||
[[ 5, 12, 17],[ -1, -1, 1]],
|
||||
[[-17, 5,-12],[ -1, -1, 1]],
|
||||
[[ 12,-17, -5],[ -1, -1, 1]],
|
||||
[[ -5, 12,-17],[ -1, 1, 1]],
|
||||
[[ 17, 5, 12],[ -1, 1, 1]],
|
||||
[[-12,-17, 5],[ -1, 1, 1]],
|
||||
[[ 5,-12,-17],[ 1, -1, 1]],
|
||||
[[-17, -5, 12],[ 1, -1, 1]],
|
||||
[[ 12, 17, 5],[ 1, -1, 1]],
|
||||
[[ -5, 17,-12],[ 1, 1, 1]],
|
||||
[[-12, -5, 17],[ 1, 1, 1]],
|
||||
[[ 17,-12, -5],[ 1, 1, 1]],
|
||||
[[ 5,-17,-12],[ -1, -1, 1]],
|
||||
[[ 12, 5, 17],[ -1, -1, 1]],
|
||||
[[-17, 12, -5],[ -1, -1, 1]],
|
||||
[[ -5,-17, 12],[ -1, 1, 1]],
|
||||
[[-12, 5,-17],[ -1, 1, 1]],
|
||||
[[ 17, 12, 5],[ -1, 1, 1]],
|
||||
[[ 5, 17, 12],[ 1, -1, 1]],
|
||||
[[ 12, -5,-17],[ 1, -1, 1]],
|
||||
[[-17,-12, 5],[ 1, -1, 1]],
|
||||
],dtype=float),
|
||||
],
|
||||
},
|
||||
'GT_prime': { # https://doi.org/10.1107/S0021889805038276
|
||||
'cF-->cI' : [
|
||||
np.array([
|
||||
[[ 0, 1, -1],[ 7, 17, 17]],
|
||||
[[ -1, 0, 1],[ 17, 7, 17]],
|
||||
[[ 1, -1, 0],[ 17, 17, 7]],
|
||||
[[ 0, -1, -1],[ -7,-17, 17]],
|
||||
[[ 1, 0, 1],[-17, -7, 17]],
|
||||
[[ 1, -1, 0],[-17,-17, 7]],
|
||||
[[ 0, 1, -1],[ 7,-17,-17]],
|
||||
[[ 1, 0, 1],[ 17, -7,-17]],
|
||||
[[ -1, -1, 0],[ 17,-17, -7]],
|
||||
[[ 0, -1, -1],[ -7, 17,-17]],
|
||||
[[ -1, 0, 1],[-17, 7,-17]],
|
||||
[[ -1, -1, 0],[-17, 17, -7]],
|
||||
[[ 0, -1, 1],[ 7, 17, 17]],
|
||||
[[ 1, 0, -1],[ 17, 7, 17]],
|
||||
[[ -1, 1, 0],[ 17, 17, 7]],
|
||||
[[ 0, 1, 1],[ -7,-17, 17]],
|
||||
[[ -1, 0, -1],[-17, -7, 17]],
|
||||
[[ -1, 1, 0],[-17,-17, 7]],
|
||||
[[ 0, -1, 1],[ 7,-17,-17]],
|
||||
[[ -1, 0, -1],[ 17, -7,-17]],
|
||||
[[ 1, 1, 0],[ 17,-17, -7]],
|
||||
[[ 0, 1, 1],[ -7, 17,-17]],
|
||||
[[ 1, 0, -1],[-17, 7,-17]],
|
||||
[[ 1, 1, 0],[-17, 17, -7]],
|
||||
],dtype=float),
|
||||
np.array([
|
||||
[[ 1, 1, -1],[ 12, 5, 17]],
|
||||
[[ -1, 1, 1],[ 17, 12, 5]],
|
||||
[[ 1, -1, 1],[ 5, 17, 12]],
|
||||
[[ -1, -1, -1],[-12, -5, 17]],
|
||||
[[ 1, -1, 1],[-17,-12, 5]],
|
||||
[[ 1, -1, -1],[ -5,-17, 12]],
|
||||
[[ -1, 1, -1],[ 12, -5,-17]],
|
||||
[[ 1, 1, 1],[ 17,-12, -5]],
|
||||
[[ -1, -1, 1],[ 5,-17,-12]],
|
||||
[[ 1, -1, -1],[-12, 5,-17]],
|
||||
[[ -1, -1, 1],[-17, 12, -5]],
|
||||
[[ -1, -1, -1],[ -5, 17,-12]],
|
||||
[[ 1, -1, 1],[ 12, 17, 5]],
|
||||
[[ 1, 1, -1],[ 5, 12, 17]],
|
||||
[[ -1, 1, 1],[ 17, 5, 12]],
|
||||
[[ -1, 1, 1],[-12,-17, 5]],
|
||||
[[ -1, -1, -1],[ -5,-12, 17]],
|
||||
[[ -1, 1, -1],[-17, -5, 12]],
|
||||
[[ -1, -1, 1],[ 12,-17, -5]],
|
||||
[[ -1, 1, -1],[ 5,-12,-17]],
|
||||
[[ 1, 1, 1],[ 17, -5,-12]],
|
||||
[[ 1, 1, 1],[-12, 17, -5]],
|
||||
[[ 1, -1, -1],[ -5, 12,-17]],
|
||||
[[ 1, 1, -1],[-17, 5,-12]],
|
||||
],dtype=float),
|
||||
],
|
||||
'cI-->cF' : [
|
||||
np.array([
|
||||
[[ 1, 1, -1],[ 12, 5, 17]],
|
||||
[[ -1, 1, 1],[ 17, 12, 5]],
|
||||
[[ 1, -1, 1],[ 5, 17, 12]],
|
||||
[[ -1, -1, -1],[-12, -5, 17]],
|
||||
[[ 1, -1, 1],[-17,-12, 5]],
|
||||
[[ 1, -1, -1],[ -5,-17, 12]],
|
||||
[[ -1, 1, -1],[ 12, -5,-17]],
|
||||
[[ 1, 1, 1],[ 17,-12, -5]],
|
||||
[[ -1, -1, 1],[ 5,-17,-12]],
|
||||
[[ 1, -1, -1],[-12, 5,-17]],
|
||||
[[ -1, -1, 1],[-17, 12, -5]],
|
||||
[[ -1, -1, -1],[ -5, 17,-12]],
|
||||
[[ 1, -1, 1],[ 12, 17, 5]],
|
||||
[[ 1, 1, -1],[ 5, 12, 17]],
|
||||
[[ -1, 1, 1],[ 17, 5, 12]],
|
||||
[[ -1, 1, 1],[-12,-17, 5]],
|
||||
[[ -1, -1, -1],[ -5,-12, 17]],
|
||||
[[ -1, 1, -1],[-17, -5, 12]],
|
||||
[[ -1, -1, 1],[ 12,-17, -5]],
|
||||
[[ -1, 1, -1],[ 5,-12,-17]],
|
||||
[[ 1, 1, 1],[ 17, -5,-12]],
|
||||
[[ 1, 1, 1],[-12, 17, -5]],
|
||||
[[ 1, -1, -1],[ -5, 12,-17]],
|
||||
[[ 1, 1, -1],[-17, 5,-12]],
|
||||
],dtype=float),
|
||||
np.array([
|
||||
[[ 0, 1, -1],[ 7, 17, 17]],
|
||||
[[ -1, 0, 1],[ 17, 7, 17]],
|
||||
[[ 1, -1, 0],[ 17, 17, 7]],
|
||||
[[ 0, -1, -1],[ -7,-17, 17]],
|
||||
[[ 1, 0, 1],[-17, -7, 17]],
|
||||
[[ 1, -1, 0],[-17,-17, 7]],
|
||||
[[ 0, 1, -1],[ 7,-17,-17]],
|
||||
[[ 1, 0, 1],[ 17, -7,-17]],
|
||||
[[ -1, -1, 0],[ 17,-17, -7]],
|
||||
[[ 0, -1, -1],[ -7, 17,-17]],
|
||||
[[ -1, 0, 1],[-17, 7,-17]],
|
||||
[[ -1, -1, 0],[-17, 17, -7]],
|
||||
[[ 0, -1, 1],[ 7, 17, 17]],
|
||||
[[ 1, 0, -1],[ 17, 7, 17]],
|
||||
[[ -1, 1, 0],[ 17, 17, 7]],
|
||||
[[ 0, 1, 1],[ -7,-17, 17]],
|
||||
[[ -1, 0, -1],[-17, -7, 17]],
|
||||
[[ -1, 1, 0],[-17,-17, 7]],
|
||||
[[ 0, -1, 1],[ 7,-17,-17]],
|
||||
[[ -1, 0, -1],[ 17, -7,-17]],
|
||||
[[ 1, 1, 0],[ 17,-17, -7]],
|
||||
[[ 0, 1, 1],[ -7, 17,-17]],
|
||||
[[ 1, 0, -1],[-17, 7,-17]],
|
||||
[[ 1, 1, 0],[-17, 17, -7]],
|
||||
],dtype=float),
|
||||
],
|
||||
},
|
||||
'NW': { # https://doi.org/10.1016/j.matchar.2004.12.015
|
||||
'cF-->cI' : [
|
||||
np.array([
|
||||
[[ 2,-1,-1],[ 1, 1, 1]],
|
||||
[[-1, 2,-1],[ 1, 1, 1]],
|
||||
[[-1,-1, 2],[ 1, 1, 1]],
|
||||
|
||||
[[-2,-1,-1],[-1, 1, 1]],
|
||||
[[ 1, 2,-1],[-1, 1, 1]],
|
||||
[[ 1,-1, 2],[-1, 1, 1]],
|
||||
|
||||
[[ 2, 1,-1],[ 1,-1, 1]],
|
||||
[[-1,-2,-1],[ 1,-1, 1]],
|
||||
[[-1, 1, 2],[ 1,-1, 1]],
|
||||
|
||||
[[ 2,-1, 1],[ 1, 1,-1]],
|
||||
[[-1, 2, 1],[ 1, 1,-1]],
|
||||
[[-1,-1,-2],[ 1, 1,-1]],
|
||||
],dtype=float),
|
||||
np.broadcast_to(np.array([[ 0,-1, 1],[ 0, 1, 1]],dtype=float),
|
||||
(12,2,3)),
|
||||
],
|
||||
'cI-->cF' : [
|
||||
np.repeat(np.array([
|
||||
[[ 0, 1,-1],[ 0, 1, 1]],
|
||||
[[ 0, 1, 1],[ 0, 1,-1]],
|
||||
[[ 1, 0,-1],[ 1, 0, 1]],
|
||||
[[ 1, 0, 1],[ 1, 0,-1]],
|
||||
[[ 1,-1, 0],[ 1, 1, 0]],
|
||||
[[ 1, 1, 0],[ 1,-1, 0]],
|
||||
],dtype=float),
|
||||
2,axis=0),
|
||||
np.tile(np.array([
|
||||
[[ 2,-1,-1],[ 1, 1, 1]],
|
||||
[[-2, 1, 1],[ 1, 1, 1]],
|
||||
],dtype=float),
|
||||
(6,1,1)),
|
||||
],
|
||||
},
|
||||
'Pitsch': { # https://doi.org/10.1080/14786435908238253
|
||||
'cF-->cI' : [
|
||||
np.repeat(np.array([
|
||||
[[ 0, 1, 1],[ 1, 0, 0]],
|
||||
[[ 0, 1,-1],[ 1, 0, 0]],
|
||||
[[ 1, 0, 1],[ 0, 1, 0]],
|
||||
[[ 1, 0,-1],[ 0, 1, 0]],
|
||||
[[ 1, 1, 0],[ 0, 0, 1]],
|
||||
[[ 1,-1, 0],[ 0, 0, 1]],
|
||||
],dtype=float),
|
||||
2,axis=0),
|
||||
np.tile(np.array([
|
||||
[[ 1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
],dtype=float),
|
||||
(6,1,1)),
|
||||
],
|
||||
'cI-->cF' : [
|
||||
np.array([
|
||||
[[ 1, 1,-1],[ 0, 1, 1]],
|
||||
[[ 1,-1, 1],[ 0, 1, 1]],
|
||||
[[ 1, 1, 1],[ 0, 1,-1]],
|
||||
[[-1, 1, 1],[ 0, 1,-1]],
|
||||
[[ 1, 1,-1],[ 1, 0, 1]],
|
||||
[[ 1,-1,-1],[ 1, 0, 1]],
|
||||
[[ 1, 1, 1],[ 1, 0,-1]],
|
||||
[[ 1,-1, 1],[ 1, 0,-1]],
|
||||
[[ 1,-1, 1],[ 1, 1, 0]],
|
||||
[[ 1,-1,-1],[ 1, 1, 0]],
|
||||
[[ 1, 1, 1],[ 1,-1, 0]],
|
||||
[[ 1, 1,-1],[ 1,-1, 0]],
|
||||
],dtype=float),
|
||||
np.broadcast_to(np.array([[ 1, 1, 0],[ 0, 0, 1]],dtype=float),
|
||||
(12,2,3)),
|
||||
],
|
||||
},
|
||||
'Bain': { # https://doi.org/10.1107/S0021889805038276
|
||||
'cF-->cI' : [
|
||||
np.array([
|
||||
[[ 0, 1, 0],[ 1, 0, 0]],
|
||||
[[ 0, 0, 1],[ 0, 1, 0]],
|
||||
[[ 1, 0, 0],[ 0, 0, 1]],
|
||||
],dtype=float),
|
||||
np.broadcast_to(np.array([[ 1, 1, 0],[ 0, 0, 1]],dtype=float),
|
||||
(3,2,3)),
|
||||
],
|
||||
'cI-->cF' : [
|
||||
np.array([
|
||||
[[ 0, 1, 1],[ 1, 0, 0]],
|
||||
[[ 1, 0, 1],[ 0, 1, 0]],
|
||||
[[ 1, 1, 0],[ 0, 0, 1]],
|
||||
],dtype=float),
|
||||
np.broadcast_to(np.array([[ 1, 0, 0],[ 0, 0, 1]],dtype=float),
|
||||
(3,2,3)),
|
||||
]
|
||||
},
|
||||
'Burgers' : { # https://doi.org/10.1016/S0031-8914(34)80244-3
|
||||
'cI-->hP' : [
|
||||
np.array([
|
||||
[[ 1, 1,-1],[ 0, 1, 1]],
|
||||
[[ 1,-1, 1],[ 0, 1, 1]],
|
||||
[[ 1, 1, 1],[ 0, 1,-1]],
|
||||
[[-1, 1, 1],[ 0, 1,-1]],
|
||||
[[ 1, 1,-1],[ 1, 0, 1]],
|
||||
[[ 1,-1,-1],[ 1, 0, 1]],
|
||||
[[ 1, 1, 1],[ 1, 0,-1]],
|
||||
[[ 1,-1, 1],[ 1, 0,-1]],
|
||||
[[ 1,-1, 1],[ 1, 1, 0]],
|
||||
[[ 1,-1,-1],[ 1, 1, 0]],
|
||||
[[ 1, 1, 1],[ 1,-1, 0]],
|
||||
[[ 1, 1,-1],[ 1,-1, 0]],
|
||||
],dtype=float),
|
||||
np.broadcast_to(np.array([[ 2,-1,-1, 0],[ 0, 0, 0, 1]],dtype=float),
|
||||
(12,2,4)),
|
||||
],
|
||||
'hP-->cI' : [
|
||||
np.repeat(np.array([
|
||||
[[ 2,-1,-1, 0],[ 0, 0, 0, 1]],
|
||||
[[-1, 2,-1, 0],[ 0, 0, 0, 1]],
|
||||
[[-1,-1, 2, 0],[ 0, 0, 0, 1]],
|
||||
],dtype=float),
|
||||
2,axis=0),
|
||||
np.tile(np.array([
|
||||
[[ 1, 1,-1],[ 0, 1, 1]],
|
||||
[[-1, 1,-1],[ 0, 1, 1]],
|
||||
],dtype=float),
|
||||
(3,1,1)),
|
||||
]
|
||||
},
|
||||
}
|
||||
|
||||
class Crystal():
|
||||
"""
|
||||
|
@ -358,7 +489,7 @@ class Crystal():
|
|||
if lattice is not None and family is not None and family != lattice_symmetries[lattice]:
|
||||
raise KeyError(f'incompatible family "{family}" for lattice "{lattice}"')
|
||||
|
||||
self.family = lattice_symmetries[lattice] if family is None else family
|
||||
self.family = lattice_symmetries[lattice] if family is None else family
|
||||
self.lattice = lattice
|
||||
|
||||
if self.lattice is not None:
|
||||
|
@ -428,20 +559,20 @@ class Crystal():
|
|||
Crystal to check for equality.
|
||||
|
||||
"""
|
||||
return NotImplemented if not isinstance(other, Crystal) else \
|
||||
self.lattice == other.lattice and \
|
||||
self.parameters == other.parameters and \
|
||||
self.family == other.family
|
||||
return (NotImplemented if not isinstance(other, Crystal) else
|
||||
self.lattice == other.lattice and
|
||||
self.parameters == other.parameters and
|
||||
self.family == other.family) # type: ignore
|
||||
|
||||
@property
|
||||
def parameters(self):
|
||||
def parameters(self) -> Optional[Tuple]:
|
||||
"""Return lattice parameters a, b, c, alpha, beta, gamma."""
|
||||
if hasattr(self,'a'): return (self.a,self.b,self.c,self.alpha,self.beta,self.gamma)
|
||||
return (self.a,self.b,self.c,self.alpha,self.beta,self.gamma) if hasattr(self,'a') else None
|
||||
|
||||
@property
|
||||
def immutable(self):
|
||||
def immutable(self) -> Dict[str, float]:
|
||||
"""Return immutable lattice parameters."""
|
||||
_immutable = {
|
||||
_immutable: Dict[CrystalFamily, Dict[str,float]] = {
|
||||
'cubic': {
|
||||
'b': 1.0,
|
||||
'c': 1.0,
|
||||
|
@ -476,9 +607,9 @@ class Crystal():
|
|||
|
||||
|
||||
@property
|
||||
def orientation_relationships(self):
|
||||
def orientation_relationships(self) -> List[str]:
|
||||
"""Return labels of orientation relationships."""
|
||||
return [k for k,v in orientation_relationships.items() if self.lattice in v]
|
||||
return [k for k,v in orientation_relationships.items() if np.any([m.startswith(str(self.lattice)) for m in v])]
|
||||
|
||||
|
||||
@property
|
||||
|
@ -671,9 +802,9 @@ class Crystal():
|
|||
|
||||
|
||||
@property
|
||||
def lattice_points(self):
|
||||
def lattice_points(self) -> np.ndarray:
|
||||
"""Return lattice points."""
|
||||
_lattice_points = {
|
||||
_lattice_points: Dict[str, List] = {
|
||||
'P': [
|
||||
],
|
||||
'S': [
|
||||
|
@ -694,8 +825,8 @@ class Crystal():
|
|||
|
||||
if self.lattice is None: raise KeyError('no lattice type specified')
|
||||
return np.array([[0,0,0]]
|
||||
+ _lattice_points.get(self.lattice if self.lattice == 'hP' else \
|
||||
self.lattice[-1],None),dtype=float)
|
||||
+ _lattice_points.get(self.lattice if self.lattice == 'hP' else
|
||||
self.lattice[-1],[]),dtype=float)
|
||||
|
||||
def to_lattice(self, *,
|
||||
direction: Optional[FloatSequence] = None,
|
||||
|
@ -753,7 +884,7 @@ class Crystal():
|
|||
Crystal frame vector (reciprocal space) of Titanium along (1,0,0) plane normal:
|
||||
|
||||
>>> import damask
|
||||
>>> Ti = damask.Crystal(lattice='hP', a=0.295e-9, c=0.469e-9)
|
||||
>>> Ti = damask.Crystal(lattice='hP', a=295e-12, c=469e-12)
|
||||
>>> Ti.to_frame(hkl=(1, 0, 0))
|
||||
array([ 3.38983051e+09, 1.95711956e+09, -4.15134508e-07])
|
||||
|
||||
|
@ -782,7 +913,7 @@ class Crystal():
|
|||
Directions and planes of deformation mode families.
|
||||
|
||||
"""
|
||||
_kinematics: Dict[BravaisLattice, Dict[CrystalKinematics, List[np.ndarray]]] = {
|
||||
_kinematics: Dict[Optional[BravaisLattice], Dict[CrystalKinematics, List[np.ndarray]]] = {
|
||||
'cF': {
|
||||
'slip': [np.array([
|
||||
[ 0,+1,-1, +1,+1,+1],
|
||||
|
@ -1025,7 +1156,8 @@ class Crystal():
|
|||
|
||||
|
||||
def relation_operations(self,
|
||||
model: str) -> Tuple[BravaisLattice, Rotation]:
|
||||
model: str,
|
||||
target = None) -> Tuple[BravaisLattice, Rotation]:
|
||||
"""
|
||||
Crystallographic orientation relationships for phase transformations.
|
||||
|
||||
|
@ -1033,6 +1165,10 @@ class Crystal():
|
|||
----------
|
||||
model : str
|
||||
Name of orientation relationship.
|
||||
target : Crystal, optional
|
||||
Crystal to transform to.
|
||||
Providing this parameter allows specification of non-standard lattice parameters.
|
||||
Default is inferred from selected model and uses standard lattice parameters.
|
||||
|
||||
Returns
|
||||
-------
|
||||
|
@ -1057,20 +1193,27 @@ class Crystal():
|
|||
https://doi.org/10.1016/j.actamat.2004.11.021
|
||||
|
||||
"""
|
||||
my_relationships = {k:v for k,v in orientation_relationships.items() if self.lattice in v}
|
||||
if model not in my_relationships:
|
||||
m_l: BravaisLattice
|
||||
o_l: BravaisLattice
|
||||
|
||||
if model not in self.orientation_relationships:
|
||||
raise KeyError(f'unknown orientation relationship "{model}"')
|
||||
r = my_relationships[model]
|
||||
|
||||
sl = self.lattice
|
||||
ol = (set(r)-{sl}).pop()
|
||||
m = r[sl]
|
||||
o = r[ol]
|
||||
sep = '-->'
|
||||
search = self.lattice+sep+('' if target is None else target.lattice) # type: ignore
|
||||
transform = [t for t in orientation_relationships[model].keys() if t.startswith(search)] # type: ignore
|
||||
|
||||
p_,_p = np.zeros(m.shape[:-1]+(3,)),np.zeros(o.shape[:-1]+(3,))
|
||||
p_[...,0,:] = m[...,0,:] if m.shape[-1] == 3 else util.Bravais_to_Miller(uvtw=m[...,0,0:4])
|
||||
p_[...,1,:] = m[...,1,:] if m.shape[-1] == 3 else util.Bravais_to_Miller(hkil=m[...,1,0:4])
|
||||
_p[...,0,:] = o[...,0,:] if o.shape[-1] == 3 else util.Bravais_to_Miller(uvtw=o[...,0,0:4])
|
||||
_p[...,1,:] = o[...,1,:] if o.shape[-1] == 3 else util.Bravais_to_Miller(hkil=o[...,1,0:4])
|
||||
if len(transform) != 1:
|
||||
raise ValueError(f'invalid target lattice "{search.split(sep)[1]}"')
|
||||
|
||||
return (ol,Rotation.from_parallel(p_,_p))
|
||||
m_l,o_l = transform[0].split(sep) # type: ignore
|
||||
m_p,o_p = orientation_relationships[model][m_l+sep+o_l]
|
||||
other = Crystal(lattice=o_l) if target is None else target
|
||||
m_p = np.stack((self.to_frame(uvw=m_p[:,0] if len(m_p[0,0])==3 else util.Bravais_to_Miller(uvtw=m_p[:,0])),
|
||||
self.to_frame(hkl=m_p[:,1] if len(m_p[0,1])==3 else util.Bravais_to_Miller(hkil=m_p[:,1]))),
|
||||
axis=1)
|
||||
o_p = np.stack((other.to_frame(uvw=o_p[:,0] if len(o_p[0,0])==3 else util.Bravais_to_Miller(uvtw=o_p[:,0])),
|
||||
other.to_frame(hkl=o_p[:,1] if len(o_p[0,1])==3 else util.Bravais_to_Miller(hkil=o_p[:,1]))),
|
||||
axis=1)
|
||||
|
||||
return (o_l,Rotation.from_parallel(a=m_p,b=o_p))
|
||||
|
|
|
@ -28,7 +28,7 @@ def numba_njit_wrapper(**kwargs):
|
|||
return (lambda function: nb.njit(function) if nb else function)
|
||||
|
||||
|
||||
class Grid:
|
||||
class GeomGrid:
|
||||
"""
|
||||
Geometry definition for grid solvers.
|
||||
|
||||
|
@ -89,7 +89,7 @@ class Grid:
|
|||
]+(['initial_conditions:']+[f' - {f}' for f in self.initial_conditions] if self.initial_conditions else []))
|
||||
|
||||
|
||||
def __copy__(self) -> 'Grid':
|
||||
def __copy__(self) -> 'GeomGrid':
|
||||
"""
|
||||
Return deepcopy(self).
|
||||
|
||||
|
@ -110,11 +110,11 @@ class Grid:
|
|||
|
||||
Parameters
|
||||
----------
|
||||
other : damask.Grid
|
||||
Grid to compare self against.
|
||||
other : damask.GeomGrid
|
||||
GeomGrid to compare self against.
|
||||
|
||||
"""
|
||||
if not isinstance(other, Grid):
|
||||
if not isinstance(other, GeomGrid):
|
||||
return NotImplemented
|
||||
return bool( np.allclose(other.size,self.size)
|
||||
and np.allclose(other.origin,self.origin)
|
||||
|
@ -197,38 +197,84 @@ class Grid:
|
|||
|
||||
|
||||
@staticmethod
|
||||
def load(fname: Union[str, Path]) -> 'Grid':
|
||||
def _load(fname: Union[str, Path], label: str) -> 'GeomGrid':
|
||||
"""
|
||||
Load from VTK ImageData file.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : str or pathlib.Path
|
||||
Grid file to read.
|
||||
VTK ImageData file to read.
|
||||
Valid extension is .vti, which will be appended if not given.
|
||||
label : str
|
||||
Label of the dataset containing the material IDs.
|
||||
|
||||
Returns
|
||||
-------
|
||||
loaded : damask.Grid
|
||||
Grid-based geometry from file.
|
||||
loaded : damask.GeomGrid
|
||||
GeomGrid-based geometry from file.
|
||||
|
||||
"""
|
||||
v = VTK.load(fname if str(fname).endswith('.vti') else str(fname)+'.vti')
|
||||
cells = np.array(v.vtk_data.GetDimensions())-1
|
||||
bbox = np.array(v.vtk_data.GetBounds()).reshape(3,2).T
|
||||
ic = {label:v.get(label).reshape(cells,order='F') for label in set(v.labels['Cell Data']) - {'material'}}
|
||||
ic = {l:v.get(l).reshape(cells,order='F') for l in set(v.labels['Cell Data']) - {label}}
|
||||
|
||||
return Grid(material = v.get('material').reshape(cells,order='F'),
|
||||
size = bbox[1] - bbox[0],
|
||||
origin = bbox[0],
|
||||
initial_conditions = ic,
|
||||
comments = v.comments,
|
||||
)
|
||||
return GeomGrid(material = v.get(label).reshape(cells,order='F'),
|
||||
size = bbox[1] - bbox[0],
|
||||
origin = bbox[0],
|
||||
initial_conditions = ic,
|
||||
comments = v.comments,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def load(fname: Union[str, Path]) -> 'GeomGrid':
|
||||
"""
|
||||
Load from VTK ImageData file with material IDs stored as 'material'.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : str or pathlib.Path
|
||||
GeomGrid file to read.
|
||||
Valid extension is .vti, which will be appended if not given.
|
||||
|
||||
Returns
|
||||
-------
|
||||
loaded : damask.GeomGrid
|
||||
GeomGrid-based geometry from file.
|
||||
|
||||
"""
|
||||
return GeomGrid._load(fname,'material')
|
||||
|
||||
|
||||
@staticmethod
|
||||
def load_SPPARKS(fname: Union[str, Path]) -> 'GeomGrid':
|
||||
"""
|
||||
Load from SPPARKS VTK dump.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : str or pathlib.Path
|
||||
SPPARKS VTK dump file to read.
|
||||
Valid extension is .vti, which will be appended if not given.
|
||||
|
||||
Returns
|
||||
-------
|
||||
loaded : damask.GeomGrid
|
||||
GeomGrid-based geometry from file.
|
||||
|
||||
Notes
|
||||
-----
|
||||
A SPPARKS VTI dump is equivalent to a DAMASK VTI file,
|
||||
but stores the materialID information as 'Spin' rather than 'material'.
|
||||
|
||||
"""
|
||||
return GeomGrid._load(fname,'Spin')
|
||||
|
||||
|
||||
@typing.no_type_check
|
||||
@staticmethod
|
||||
def load_ASCII(fname)-> 'Grid':
|
||||
def load_ASCII(fname)-> 'GeomGrid':
|
||||
"""
|
||||
Load from geom file.
|
||||
|
||||
|
@ -242,8 +288,8 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
loaded : damask.Grid
|
||||
Grid-based geometry from file.
|
||||
loaded : damask.GeomGrid
|
||||
GeomGrid-based geometry from file.
|
||||
|
||||
"""
|
||||
warnings.warn('Support for ASCII-based geom format will be removed in DAMASK 3.0.0', DeprecationWarning,2)
|
||||
|
@ -296,14 +342,15 @@ class Grid:
|
|||
if not np.any(np.mod(material,1) != 0.0): # no float present
|
||||
material = material.astype(np.int64) - (1 if material.min() > 0 else 0)
|
||||
|
||||
return Grid(material = material.reshape(cells,order='F'),
|
||||
size = size,
|
||||
origin = origin,
|
||||
comments = comments)
|
||||
return GeomGrid(material = material.reshape(cells,order='F'),
|
||||
size = size,
|
||||
origin = origin,
|
||||
comments = comments,
|
||||
)
|
||||
|
||||
|
||||
@staticmethod
|
||||
def load_Neper(fname: Union[str, Path]) -> 'Grid':
|
||||
def load_Neper(fname: Union[str, Path]) -> 'GeomGrid':
|
||||
"""
|
||||
Load from Neper VTK file.
|
||||
|
||||
|
@ -314,8 +361,8 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
loaded : damask.Grid
|
||||
Grid-based geometry from file.
|
||||
loaded : damask.GeomGrid
|
||||
GeomGrid-based geometry from file.
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
@ -330,7 +377,7 @@ class Grid:
|
|||
>>> N_grains = 20
|
||||
>>> cells = (32,32,32)
|
||||
>>> damask.util.run(f'neper -T -n {N_grains} -tesrsize {cells[0]}:{cells[1]}:{cells[2]} -periodicity all -format vtk')
|
||||
>>> damask.Grid.load_Neper(f'n{N_grains}-id1.vtk').renumber()
|
||||
>>> damask.GeomGrid.load_Neper(f'n{N_grains}-id1.vtk').renumber()
|
||||
cells: 32 × 32 × 32
|
||||
size: 1.0 × 1.0 × 1.0 m³
|
||||
origin: 0.0 0.0 0.0 m
|
||||
|
@ -341,11 +388,11 @@ class Grid:
|
|||
cells = np.array(v.vtk_data.GetDimensions())-1
|
||||
bbox = np.array(v.vtk_data.GetBounds()).reshape(3,2).T
|
||||
|
||||
return Grid(material = v.get('MaterialId').reshape(cells,order='F').astype('int32',casting='unsafe'),
|
||||
size = bbox[1] - bbox[0],
|
||||
origin = bbox[0],
|
||||
comments = util.execution_stamp('Grid','load_Neper'),
|
||||
)
|
||||
return GeomGrid(material = v.get('MaterialId').reshape(cells,order='F').astype('int32',casting='unsafe'),
|
||||
size = bbox[1] - bbox[0],
|
||||
origin = bbox[0],
|
||||
comments = util.execution_stamp('GeomGrid','load_Neper'),
|
||||
)
|
||||
|
||||
|
||||
@staticmethod
|
||||
|
@ -354,7 +401,7 @@ class Grid:
|
|||
cell_data: Optional[str] = None,
|
||||
phases: str = 'Phases',
|
||||
Euler_angles: str = 'EulerAngles',
|
||||
base_group: Optional[str] = None) -> 'Grid':
|
||||
base_group: Optional[str] = None) -> 'GeomGrid':
|
||||
"""
|
||||
Load DREAM.3D (HDF5) file.
|
||||
|
||||
|
@ -389,8 +436,8 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
loaded : damask.Grid
|
||||
Grid-based geometry from file.
|
||||
loaded : damask.GeomGrid
|
||||
GeomGrid-based geometry from file.
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
@ -418,17 +465,17 @@ class Grid:
|
|||
else:
|
||||
ma = f['/'.join([b,c,feature_IDs])][()].flatten()
|
||||
|
||||
return Grid(material = ma.reshape(cells,order='F'),
|
||||
size = size,
|
||||
origin = origin,
|
||||
comments = util.execution_stamp('Grid','load_DREAM3D'),
|
||||
)
|
||||
return GeomGrid(material = ma.reshape(cells,order='F'),
|
||||
size = size,
|
||||
origin = origin,
|
||||
comments = util.execution_stamp('GeomGrid','load_DREAM3D'),
|
||||
)
|
||||
|
||||
|
||||
@staticmethod
|
||||
def from_table(table: Table,
|
||||
coordinates: str,
|
||||
labels: Union[str, Sequence[str]]) -> 'Grid':
|
||||
labels: Union[str, Sequence[str]]) -> 'GeomGrid':
|
||||
"""
|
||||
Create grid from ASCII table.
|
||||
|
||||
|
@ -445,8 +492,8 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
new : damask.Grid
|
||||
Grid-based geometry from values in table.
|
||||
new : damask.GeomGrid
|
||||
GeomGrid-based geometry from values in table.
|
||||
|
||||
"""
|
||||
cells,size,origin = grid_filters.cellsSizeOrigin_coordinates0_point(table.get(coordinates))
|
||||
|
@ -457,11 +504,11 @@ class Grid:
|
|||
ma = np.arange(cells.prod()) if len(unique) == cells.prod() else \
|
||||
np.arange(unique.size)[np.argsort(pd.unique(unique_inverse))][unique_inverse]
|
||||
|
||||
return Grid(material = ma.reshape(cells,order='F'),
|
||||
size = size,
|
||||
origin = origin,
|
||||
comments = util.execution_stamp('Grid','from_table'),
|
||||
)
|
||||
return GeomGrid(material = ma.reshape(cells,order='F'),
|
||||
size = size,
|
||||
origin = origin,
|
||||
comments = util.execution_stamp('GeomGrid','from_table'),
|
||||
)
|
||||
|
||||
|
||||
@staticmethod
|
||||
|
@ -487,9 +534,11 @@ class Grid:
|
|||
size : sequence of float, len (3)
|
||||
Edge lengths of the grid in meter.
|
||||
seeds : numpy.ndarray of float, shape (:,3)
|
||||
Position of the seed points in meter. All points need to lay within the box.
|
||||
Position of the seed points in meter. All points need
|
||||
to lay within the box [(0,0,0),size].
|
||||
weights : sequence of float, len (seeds.shape[0])
|
||||
Weights of the seeds. Setting all weights to 1.0 gives a standard Voronoi tessellation.
|
||||
Weights of the seeds. Setting all weights to 1.0 gives a
|
||||
standard Voronoi tessellation.
|
||||
material : sequence of int, len (seeds.shape[0]), optional
|
||||
Material ID of the seeds.
|
||||
Defaults to None, in which case materials are consecutively numbered.
|
||||
|
@ -498,8 +547,8 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
new : damask.Grid
|
||||
Grid-based geometry from tessellation.
|
||||
new : damask.GeomGrid
|
||||
GeomGrid-based geometry from tessellation.
|
||||
|
||||
"""
|
||||
weights_p: FloatSequence
|
||||
|
@ -515,17 +564,17 @@ class Grid:
|
|||
coords = grid_filters.coordinates0_point(cells,size).reshape(-1,3)
|
||||
|
||||
pool = mp.Pool(int(os.environ.get('OMP_NUM_THREADS',4)))
|
||||
result = pool.map_async(partial(Grid._find_closest_seed,seeds_p,weights_p), coords)
|
||||
result = pool.map_async(partial(GeomGrid._find_closest_seed,seeds_p,weights_p), coords)
|
||||
pool.close()
|
||||
pool.join()
|
||||
material_ = np.array(result.get()).reshape(cells)
|
||||
|
||||
if periodic: material_ %= len(weights)
|
||||
|
||||
return Grid(material = material_ if material is None else np.array(material)[material_],
|
||||
size = size,
|
||||
comments = util.execution_stamp('Grid','from_Laguerre_tessellation'),
|
||||
)
|
||||
return GeomGrid(material = material_ if material is None else np.array(material)[material_],
|
||||
size = size,
|
||||
comments = util.execution_stamp('GeomGrid','from_Laguerre_tessellation'),
|
||||
)
|
||||
|
||||
|
||||
@staticmethod
|
||||
|
@ -533,7 +582,7 @@ class Grid:
|
|||
size: FloatSequence,
|
||||
seeds: np.ndarray,
|
||||
material: Optional[IntSequence] = None,
|
||||
periodic: bool = True) -> 'Grid':
|
||||
periodic: bool = True) -> 'GeomGrid':
|
||||
"""
|
||||
Create grid from Voronoi tessellation.
|
||||
|
||||
|
@ -544,7 +593,8 @@ class Grid:
|
|||
size : sequence of float, len (3)
|
||||
Edge lengths of the grid in meter.
|
||||
seeds : numpy.ndarray of float, shape (:,3)
|
||||
Position of the seed points in meter. All points need to lay within the box.
|
||||
Position of the seed points in meter. All points need
|
||||
to lay within the box [(0,0,0),size].
|
||||
material : sequence of int, len (seeds.shape[0]), optional
|
||||
Material ID of the seeds.
|
||||
Defaults to None, in which case materials are consecutively numbered.
|
||||
|
@ -553,8 +603,8 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
new : damask.Grid
|
||||
Grid-based geometry from tessellation.
|
||||
new : damask.GeomGrid
|
||||
GeomGrid-based geometry from tessellation.
|
||||
|
||||
"""
|
||||
coords = grid_filters.coordinates0_point(cells,size).reshape(-1,3)
|
||||
|
@ -565,10 +615,10 @@ class Grid:
|
|||
except TypeError:
|
||||
material_ = tree.query(coords, n_jobs = int(os.environ.get('OMP_NUM_THREADS',4)))[1] # scipy <1.6
|
||||
|
||||
return Grid(material = (material_ if material is None else np.array(material)[material_]).reshape(cells),
|
||||
size = size,
|
||||
comments = util.execution_stamp('Grid','from_Voronoi_tessellation'),
|
||||
)
|
||||
return GeomGrid(material = (material_ if material is None else np.array(material)[material_]).reshape(cells),
|
||||
size = size,
|
||||
comments = util.execution_stamp('GeomGrid','from_Voronoi_tessellation'),
|
||||
)
|
||||
|
||||
|
||||
_minimal_surface = \
|
||||
|
@ -619,7 +669,7 @@ class Grid:
|
|||
surface: str,
|
||||
threshold: float = 0.0,
|
||||
periods: int = 1,
|
||||
materials: IntSequence = (0,1)) -> 'Grid':
|
||||
materials: IntSequence = (0,1)) -> 'GeomGrid':
|
||||
"""
|
||||
Create grid from definition of triply-periodic minimal surface.
|
||||
|
||||
|
@ -640,8 +690,8 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
new : damask.Grid
|
||||
Grid-based geometry from definition of minimal surface.
|
||||
new : damask.GeomGrid
|
||||
GeomGrid-based geometry from definition of minimal surface.
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
@ -676,7 +726,7 @@ class Grid:
|
|||
|
||||
>>> import numpy as np
|
||||
>>> import damask
|
||||
>>> damask.Grid.from_minimal_surface([64]*3,np.ones(3)*1.e-4,'Gyroid')
|
||||
>>> damask.GeomGrid.from_minimal_surface([64]*3,np.ones(3)*1.e-4,'Gyroid')
|
||||
cells : 64 × 64 × 64
|
||||
size : 0.0001 × 0.0001 × 0.0001 m³
|
||||
origin: 0.0 0.0 0.0 m
|
||||
|
@ -686,7 +736,7 @@ class Grid:
|
|||
|
||||
>>> import numpy as np
|
||||
>>> import damask
|
||||
>>> damask.Grid.from_minimal_surface([80]*3,np.ones(3)*5.e-4,
|
||||
>>> damask.GeomGrid.from_minimal_surface([80]*3,np.ones(3)*5.e-4,
|
||||
... 'Neovius',materials=(1,5))
|
||||
cells : 80 × 80 × 80
|
||||
size : 0.0005 × 0.0005 × 0.0005 m³
|
||||
|
@ -698,10 +748,10 @@ class Grid:
|
|||
periods*2.0*np.pi*(np.arange(cells[1])+0.5)/cells[1],
|
||||
periods*2.0*np.pi*(np.arange(cells[2])+0.5)/cells[2],
|
||||
indexing='ij',sparse=True)
|
||||
return Grid(material = np.where(threshold < Grid._minimal_surface[surface](x,y,z),materials[1],materials[0]),
|
||||
size = size,
|
||||
comments = util.execution_stamp('Grid','from_minimal_surface'),
|
||||
)
|
||||
return GeomGrid(material = np.where(threshold < GeomGrid._minimal_surface[surface](x,y,z),materials[1],materials[0]),
|
||||
size = size,
|
||||
comments = util.execution_stamp('GeomGrid','from_minimal_surface'),
|
||||
)
|
||||
|
||||
|
||||
def save(self,
|
||||
|
@ -778,7 +828,7 @@ class Grid:
|
|||
def canvas(self,
|
||||
cells: Optional[IntSequence] = None,
|
||||
offset: Optional[IntSequence] = None,
|
||||
fill: Optional[int] = None) -> 'Grid':
|
||||
fill: Optional[int] = None) -> 'GeomGrid':
|
||||
"""
|
||||
Crop or enlarge/pad grid.
|
||||
|
||||
|
@ -795,7 +845,7 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.Grid
|
||||
updated : damask.GeomGrid
|
||||
Updated grid-based geometry.
|
||||
|
||||
Examples
|
||||
|
@ -804,7 +854,7 @@ class Grid:
|
|||
|
||||
>>> import numpy as np
|
||||
>>> import damask
|
||||
>>> g = damask.Grid(np.zeros([32]*3,int),np.ones(3)*1e-3)
|
||||
>>> g = damask.GeomGrid(np.zeros([32]*3,int),np.ones(3)*1e-3)
|
||||
>>> g.canvas([32,32,16],[0,0,16])
|
||||
cells: 32 × 32 × 16
|
||||
size: 0.001 × 0.001 × 0.0005 m³
|
||||
|
@ -824,16 +874,16 @@ class Grid:
|
|||
|
||||
canvas[ll[0]:ur[0],ll[1]:ur[1],ll[2]:ur[2]] = self.material[LL[0]:UR[0],LL[1]:UR[1],LL[2]:UR[2]]
|
||||
|
||||
return Grid(material = canvas,
|
||||
size = self.size/self.cells*np.asarray(canvas.shape),
|
||||
origin = self.origin+offset_*self.size/self.cells,
|
||||
comments = self.comments+[util.execution_stamp('Grid','canvas')],
|
||||
)
|
||||
return GeomGrid(material = canvas,
|
||||
size = self.size/self.cells*np.asarray(canvas.shape),
|
||||
origin = self.origin+offset_*self.size/self.cells,
|
||||
comments = self.comments+[util.execution_stamp('GeomGrid','canvas')],
|
||||
)
|
||||
|
||||
|
||||
def mirror(self,
|
||||
directions: Sequence[str],
|
||||
reflect: bool = False) -> 'Grid':
|
||||
reflect: bool = False) -> 'GeomGrid':
|
||||
"""
|
||||
Mirror grid along given directions.
|
||||
|
||||
|
@ -846,7 +896,7 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.Grid
|
||||
updated : damask.GeomGrid
|
||||
Updated grid-based geometry.
|
||||
|
||||
Examples
|
||||
|
@ -855,7 +905,7 @@ class Grid:
|
|||
|
||||
>>> import numpy as np
|
||||
>>> import damask
|
||||
>>> (g := damask.Grid(np.arange(4*5*6).reshape([4,5,6]),np.ones(3)))
|
||||
>>> (g := damask.GeomGrid(np.arange(4*5*6).reshape([4,5,6]),np.ones(3)))
|
||||
cells: 4 × 5 × 6
|
||||
size: 1.0 × 1.0 × 1.0 m³
|
||||
origin: 0.0 0.0 0.0 m
|
||||
|
@ -893,15 +943,15 @@ class Grid:
|
|||
if 'z' in directions:
|
||||
mat = np.concatenate([mat,mat[:,:,limits[0]:limits[1]:-1]],2)
|
||||
|
||||
return Grid(material = mat,
|
||||
size = self.size/self.cells*np.asarray(mat.shape),
|
||||
origin = self.origin,
|
||||
comments = self.comments+[util.execution_stamp('Grid','mirror')],
|
||||
)
|
||||
return GeomGrid(material = mat,
|
||||
size = self.size/self.cells*np.asarray(mat.shape),
|
||||
origin = self.origin,
|
||||
comments = self.comments+[util.execution_stamp('GeomGrid','mirror')],
|
||||
)
|
||||
|
||||
|
||||
def flip(self,
|
||||
directions: Sequence[str]) -> 'Grid':
|
||||
directions: Sequence[str]) -> 'GeomGrid':
|
||||
"""
|
||||
Flip grid along given directions.
|
||||
|
||||
|
@ -912,7 +962,7 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.Grid
|
||||
updated : damask.GeomGrid
|
||||
Updated grid-based geometry.
|
||||
|
||||
Examples
|
||||
|
@ -921,7 +971,7 @@ class Grid:
|
|||
|
||||
>>> import numpy as np
|
||||
>>> import damask
|
||||
>>> (g := damask.Grid(np.arange(4*5*6).reshape([4,5,6]),np.ones(3)))
|
||||
>>> (g := damask.GeomGrid(np.arange(4*5*6).reshape([4,5,6]),np.ones(3)))
|
||||
cells: 4 × 5 × 6
|
||||
size: 1.0 × 1.0 × 1.0 m³
|
||||
origin: 0.0 0.0 0.0 m
|
||||
|
@ -940,16 +990,16 @@ class Grid:
|
|||
|
||||
mat = np.flip(self.material, [valid.index(d) for d in directions if d in valid])
|
||||
|
||||
return Grid(material = mat,
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
comments = self.comments+[util.execution_stamp('Grid','flip')],
|
||||
)
|
||||
return GeomGrid(material = mat,
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
comments = self.comments+[util.execution_stamp('GeomGrid','flip')],
|
||||
)
|
||||
|
||||
|
||||
def rotate(self,
|
||||
R: Rotation,
|
||||
fill: Optional[int] = None) -> 'Grid':
|
||||
fill: Optional[int] = None) -> 'GeomGrid':
|
||||
"""
|
||||
Rotate grid (possibly extending its bounding box).
|
||||
|
||||
|
@ -963,7 +1013,7 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.Grid
|
||||
updated : damask.GeomGrid
|
||||
Updated grid-based geometry.
|
||||
|
||||
Examples
|
||||
|
@ -972,7 +1022,7 @@ class Grid:
|
|||
|
||||
>>> import numpy as np
|
||||
>>> import damask
|
||||
>>> (g := damask.Grid(np.arange(4*5*6).reshape([4,5,6]),np.ones(3)))
|
||||
>>> (g := damask.GeomGrid(np.arange(4*5*6).reshape([4,5,6]),np.ones(3)))
|
||||
cells: 4 × 5 × 6
|
||||
size: 1.0 × 1.0 × 1.0 m³
|
||||
origin: 0.0 0.0 0.0 m
|
||||
|
@ -994,15 +1044,15 @@ class Grid:
|
|||
|
||||
origin = self.origin-(np.asarray(material.shape)-self.cells)*.5 * self.size/self.cells
|
||||
|
||||
return Grid(material = material,
|
||||
size = self.size/self.cells*np.asarray(material.shape),
|
||||
origin = origin,
|
||||
comments = self.comments+[util.execution_stamp('Grid','rotate')],
|
||||
)
|
||||
return GeomGrid(material = material,
|
||||
size = self.size/self.cells*np.asarray(material.shape),
|
||||
origin = origin,
|
||||
comments = self.comments+[util.execution_stamp('GeomGrid','rotate')],
|
||||
)
|
||||
|
||||
|
||||
def scale(self,
|
||||
cells: IntSequence) -> 'Grid':
|
||||
cells: IntSequence) -> 'GeomGrid':
|
||||
"""
|
||||
Scale grid to new cell counts.
|
||||
|
||||
|
@ -1013,7 +1063,7 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.Grid
|
||||
updated : damask.GeomGrid
|
||||
Updated grid-based geometry.
|
||||
|
||||
Examples
|
||||
|
@ -1022,7 +1072,7 @@ class Grid:
|
|||
|
||||
>>> import numpy as np
|
||||
>>> import damask
|
||||
>>> (g := damask.Grid(np.zeros([32]*3,int),np.ones(3)*1e-4))
|
||||
>>> (g := damask.GeomGrid(np.zeros([32]*3,int),np.ones(3)*1e-4))
|
||||
cells: 32 × 32 × 32
|
||||
size: 0.0001 × 0.0001 × 0.0001 m³
|
||||
origin: 0.0 0.0 0.0 m
|
||||
|
@ -1040,28 +1090,28 @@ class Grid:
|
|||
points=orig,method='nearest',bounds_error=False,fill_value=None)
|
||||
new = grid_filters.coordinates0_point(cells,self.size,self.origin)
|
||||
|
||||
return Grid(material = interpolator(values=self.material)(new).astype(int),
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = {k: interpolator(values=v)(new)
|
||||
for k,v in self.initial_conditions.items()},
|
||||
comments = self.comments+[util.execution_stamp('Grid','scale')],
|
||||
)
|
||||
return GeomGrid(material = interpolator(values=self.material)(new).astype(int),
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = {k: interpolator(values=v)(new)
|
||||
for k,v in self.initial_conditions.items()},
|
||||
comments = self.comments+[util.execution_stamp('GeomGrid','scale')],
|
||||
)
|
||||
|
||||
|
||||
def assemble(self,
|
||||
idx: np.ndarray) -> 'Grid':
|
||||
idx: np.ndarray) -> 'GeomGrid':
|
||||
"""
|
||||
Assemble new grid from index map.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
idx : numpy.ndarray of int, shape (:,:,:) or (:,:,:,3)
|
||||
Grid of flat indices or coordinate indices.
|
||||
GeomGrid of flat indices or coordinate indices.
|
||||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.Grid
|
||||
updated : damask.GeomGrid
|
||||
Updated grid-based geometry.
|
||||
Cell count of resulting grid matches shape of index map.
|
||||
|
||||
|
@ -1070,37 +1120,37 @@ class Grid:
|
|||
flat = (idx if len(idx.shape)==3 else grid_filters.ravel_index(idx)).flatten(order='F')
|
||||
ic = {k: v.flatten(order='F')[flat].reshape(cells,order='F') for k,v in self.initial_conditions.items()}
|
||||
|
||||
return Grid(material = self.material.flatten(order='F')[flat].reshape(cells,order='F'),
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = ic,
|
||||
comments = self.comments+[util.execution_stamp('Grid','assemble')],
|
||||
)
|
||||
return GeomGrid(material = self.material.flatten(order='F')[flat].reshape(cells,order='F'),
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = ic,
|
||||
comments = self.comments+[util.execution_stamp('GeomGrid','assemble')],
|
||||
)
|
||||
|
||||
|
||||
def renumber(self) -> 'Grid':
|
||||
def renumber(self) -> 'GeomGrid':
|
||||
"""
|
||||
Renumber sorted material indices as 0,...,N-1.
|
||||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.Grid
|
||||
updated : damask.GeomGrid
|
||||
Updated grid-based geometry.
|
||||
|
||||
"""
|
||||
_,renumbered = np.unique(self.material,return_inverse=True)
|
||||
|
||||
return Grid(material = renumbered.reshape(self.cells),
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = self.initial_conditions,
|
||||
comments = self.comments+[util.execution_stamp('Grid','renumber')],
|
||||
)
|
||||
return GeomGrid(material = renumbered.reshape(self.cells),
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = self.initial_conditions,
|
||||
comments = self.comments+[util.execution_stamp('GeomGrid','renumber')],
|
||||
)
|
||||
|
||||
|
||||
def substitute(self,
|
||||
from_material: Union[int,IntSequence],
|
||||
to_material: Union[int,IntSequence]) -> 'Grid':
|
||||
to_material: Union[int,IntSequence]) -> 'GeomGrid':
|
||||
"""
|
||||
Substitute material indices.
|
||||
|
||||
|
@ -1113,7 +1163,7 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.Grid
|
||||
updated : damask.GeomGrid
|
||||
Updated grid-based geometry.
|
||||
|
||||
"""
|
||||
|
@ -1122,21 +1172,21 @@ class Grid:
|
|||
to_material if isinstance(to_material,(Sequence,np.ndarray)) else [to_material]): # ToDo Python 3.10 has strict mode for zip
|
||||
material[self.material==f] = t
|
||||
|
||||
return Grid(material = material,
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = self.initial_conditions,
|
||||
comments = self.comments+[util.execution_stamp('Grid','substitute')],
|
||||
)
|
||||
return GeomGrid(material = material,
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = self.initial_conditions,
|
||||
comments = self.comments+[util.execution_stamp('GeomGrid','substitute')],
|
||||
)
|
||||
|
||||
|
||||
def sort(self) -> 'Grid':
|
||||
def sort(self) -> 'GeomGrid':
|
||||
"""
|
||||
Sort material indices such that min(material ID) is located at (0,0,0).
|
||||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.Grid
|
||||
updated : damask.GeomGrid
|
||||
Updated grid-based geometry.
|
||||
|
||||
"""
|
||||
|
@ -1145,12 +1195,12 @@ class Grid:
|
|||
sort_idx = np.argsort(from_ma)
|
||||
ma = np.unique(a)[sort_idx][np.searchsorted(from_ma,a,sorter = sort_idx)]
|
||||
|
||||
return Grid(material = ma.reshape(self.cells,order='F'),
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = self.initial_conditions,
|
||||
comments = self.comments+[util.execution_stamp('Grid','sort')],
|
||||
)
|
||||
return GeomGrid(material = ma.reshape(self.cells,order='F'),
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = self.initial_conditions,
|
||||
comments = self.comments+[util.execution_stamp('GeomGrid','sort')],
|
||||
)
|
||||
|
||||
|
||||
def clean(self,
|
||||
|
@ -1158,7 +1208,7 @@ class Grid:
|
|||
selection: Optional[IntSequence] = None,
|
||||
invert_selection: bool = False,
|
||||
periodic: bool = True,
|
||||
rng_seed: Optional[NumpyRngSeed] = None) -> 'Grid':
|
||||
rng_seed: Optional[NumpyRngSeed] = None) -> 'GeomGrid':
|
||||
"""
|
||||
Smooth grid by selecting most frequent material ID within given stencil at each location.
|
||||
|
||||
|
@ -1179,7 +1229,7 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.Grid
|
||||
updated : damask.GeomGrid
|
||||
Updated grid-based geometry.
|
||||
|
||||
Notes
|
||||
|
@ -1213,12 +1263,12 @@ class Grid:
|
|||
mode='wrap' if periodic else 'nearest',
|
||||
extra_keywords=dict(selection=selection_,rng=rng),
|
||||
).astype(self.material.dtype)
|
||||
return Grid(material = material,
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = self.initial_conditions,
|
||||
comments = self.comments+[util.execution_stamp('Grid','clean')],
|
||||
)
|
||||
return GeomGrid(material = material,
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = self.initial_conditions,
|
||||
comments = self.comments+[util.execution_stamp('GeomGrid','clean')],
|
||||
)
|
||||
|
||||
|
||||
def add_primitive(self,
|
||||
|
@ -1228,7 +1278,7 @@ class Grid:
|
|||
fill: Optional[int] = None,
|
||||
R: Rotation = Rotation(),
|
||||
inverse: bool = False,
|
||||
periodic: bool = True) -> 'Grid':
|
||||
periodic: bool = True) -> 'GeomGrid':
|
||||
"""
|
||||
Insert a primitive geometric object at a given position.
|
||||
|
||||
|
@ -1258,7 +1308,7 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.Grid
|
||||
updated : damask.GeomGrid
|
||||
Updated grid-based geometry.
|
||||
|
||||
Examples
|
||||
|
@ -1267,7 +1317,7 @@ class Grid:
|
|||
|
||||
>>> import numpy as np
|
||||
>>> import damask
|
||||
>>> g = damask.Grid(np.zeros([64]*3,int), np.ones(3)*1e-4)
|
||||
>>> g = damask.GeomGrid(np.zeros([64]*3,int), np.ones(3)*1e-4)
|
||||
>>> g.add_primitive(np.ones(3)*5e-5,np.ones(3)*5e-5,1)
|
||||
cells : 64 × 64 × 64
|
||||
size : 0.0001 × 0.0001 × 0.0001 m³
|
||||
|
@ -1278,7 +1328,7 @@ class Grid:
|
|||
|
||||
>>> import numpy as np
|
||||
>>> import damask
|
||||
>>> g = damask.Grid(np.zeros([64]*3,int), np.ones(3)*1e-4)
|
||||
>>> g = damask.GeomGrid(np.zeros([64]*3,int), np.ones(3)*1e-4)
|
||||
>>> g.add_primitive(np.ones(3,int)*32,np.zeros(3),np.inf)
|
||||
cells : 64 × 64 × 64
|
||||
size : 0.0001 × 0.0001 × 0.0001 m³
|
||||
|
@ -1304,14 +1354,14 @@ class Grid:
|
|||
if periodic: # translate back to center
|
||||
mask = np.roll(mask,((c/self.size-0.5)*self.cells).round().astype(np.int64),(0,1,2))
|
||||
|
||||
return Grid(material = np.where(np.logical_not(mask) if inverse else mask,
|
||||
return GeomGrid(material = np.where(np.logical_not(mask) if inverse else mask,
|
||||
self.material,
|
||||
np.nanmax(self.material)+1 if fill is None else fill),
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = self.initial_conditions,
|
||||
comments = self.comments+[util.execution_stamp('Grid','add_primitive')],
|
||||
)
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = self.initial_conditions,
|
||||
comments = self.comments+[util.execution_stamp('GeomGrid','add_primitive')],
|
||||
)
|
||||
|
||||
|
||||
def vicinity_offset(self,
|
||||
|
@ -1319,7 +1369,7 @@ class Grid:
|
|||
offset: Optional[int] = None,
|
||||
selection: Optional[IntSequence] = None,
|
||||
invert_selection: bool = False,
|
||||
periodic: bool = True) -> 'Grid':
|
||||
periodic: bool = True) -> 'GeomGrid':
|
||||
"""
|
||||
Offset material ID of points in the vicinity of selected (or just other) material IDs.
|
||||
|
||||
|
@ -1345,7 +1395,7 @@ class Grid:
|
|||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.Grid
|
||||
updated : damask.GeomGrid
|
||||
Updated grid-based geometry.
|
||||
|
||||
"""
|
||||
|
@ -1377,12 +1427,12 @@ class Grid:
|
|||
extra_keywords=dict(selection=selection_),
|
||||
)
|
||||
|
||||
return Grid(material = np.where(mask, self.material + offset_,self.material),
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = self.initial_conditions,
|
||||
comments = self.comments+[util.execution_stamp('Grid','vicinity_offset')],
|
||||
)
|
||||
return GeomGrid(material = np.where(mask, self.material + offset_,self.material),
|
||||
size = self.size,
|
||||
origin = self.origin,
|
||||
initial_conditions = self.initial_conditions,
|
||||
comments = self.comments+[util.execution_stamp('GeomGrid','vicinity_offset')],
|
||||
)
|
||||
|
||||
|
||||
def get_grain_boundaries(self,
|
|
@ -240,13 +240,6 @@ class Orientation(Rotation,Crystal):
|
|||
return self.copy(Rotation(self.quaternion)*Rotation(other.quaternion))
|
||||
|
||||
|
||||
@classmethod
|
||||
@util.extend_docstring(Rotation.from_random,
|
||||
adopted_parameters=Crystal.__init__)
|
||||
@util.pass_on('rotation', Rotation.from_random, wrapped=__init__)
|
||||
def from_random(cls, **kwargs) -> 'Orientation':
|
||||
return cls(**kwargs)
|
||||
|
||||
@classmethod
|
||||
@util.extend_docstring(Rotation.from_quaternion,
|
||||
adopted_parameters=Crystal.__init__)
|
||||
|
@ -282,6 +275,13 @@ class Orientation(Rotation,Crystal):
|
|||
def from_matrix(cls, **kwargs) -> 'Orientation':
|
||||
return cls(**kwargs)
|
||||
|
||||
@classmethod
|
||||
@util.extend_docstring(Rotation.from_parallel,
|
||||
adopted_parameters=Crystal.__init__)
|
||||
@util.pass_on('rotation', Rotation.from_parallel, wrapped=__init__)
|
||||
def from_parallel(cls, **kwargs) -> 'Orientation':
|
||||
return cls(**kwargs)
|
||||
|
||||
@classmethod
|
||||
@util.extend_docstring(Rotation.from_Rodrigues_vector,
|
||||
adopted_parameters=Crystal.__init__)
|
||||
|
@ -303,6 +303,20 @@ class Orientation(Rotation,Crystal):
|
|||
def from_cubochoric(cls, **kwargs) -> 'Orientation':
|
||||
return cls(**kwargs)
|
||||
|
||||
@classmethod
|
||||
@util.extend_docstring(Rotation.from_random,
|
||||
adopted_parameters=Crystal.__init__)
|
||||
@util.pass_on('rotation', Rotation.from_random, wrapped=__init__)
|
||||
def from_random(cls, **kwargs) -> 'Orientation':
|
||||
return cls(**kwargs)
|
||||
|
||||
@classmethod
|
||||
@util.extend_docstring(Rotation.from_ODF,
|
||||
adopted_parameters=Crystal.__init__)
|
||||
@util.pass_on('rotation', Rotation.from_ODF, wrapped=__init__)
|
||||
def from_ODF(cls, **kwargs) -> 'Orientation':
|
||||
return cls(**kwargs)
|
||||
|
||||
@classmethod
|
||||
@util.extend_docstring(Rotation.from_spherical_component,
|
||||
adopted_parameters=Crystal.__init__)
|
||||
|
@ -325,7 +339,7 @@ class Orientation(Rotation,Crystal):
|
|||
hkl: FloatSequence,
|
||||
**kwargs) -> 'Orientation':
|
||||
"""
|
||||
Initialize orientation object from two crystallographic directions.
|
||||
Initialize orientation object from the crystallographic direction and plane parallel to lab x and z, respectively.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
|
@ -855,7 +869,8 @@ class Orientation(Rotation,Crystal):
|
|||
|
||||
|
||||
def related(self: MyType,
|
||||
model: str) -> MyType:
|
||||
model: str,
|
||||
target = None) -> MyType:
|
||||
"""
|
||||
All orientations related to self by given relationship model.
|
||||
|
||||
|
@ -863,6 +878,10 @@ class Orientation(Rotation,Crystal):
|
|||
----------
|
||||
model : str
|
||||
Orientation relationship model selected from self.orientation_relationships.
|
||||
target : Crystal, optional
|
||||
Crystal to transform to.
|
||||
Providing this parameter allows specification of non-standard lattice parameters.
|
||||
Default is inferred from selected model and uses standard lattice parameters.
|
||||
|
||||
Returns
|
||||
-------
|
||||
|
@ -890,11 +909,10 @@ class Orientation(Rotation,Crystal):
|
|||
[0.924 0.000 0.000 0.383]]
|
||||
|
||||
"""
|
||||
lattice,o = self.relation_operations(model)
|
||||
target = Crystal(lattice=lattice)
|
||||
o = o.broadcast_to(o.shape+self.shape,mode='right')
|
||||
lattice,o = self.relation_operations(model,target)
|
||||
target = Crystal(lattice=lattice) if target is None else target
|
||||
|
||||
return Orientation(rotation=o*Rotation(self.quaternion).broadcast_to(o.shape,mode='left'),
|
||||
return Orientation(rotation=o*Rotation(self.quaternion)[np.newaxis,...], # type: ignore
|
||||
lattice=lattice,
|
||||
b = self.b if target.ratio['b'] is None else self.a*target.ratio['b'],
|
||||
c = self.c if target.ratio['c'] is None else self.a*target.ratio['c'],
|
||||
|
|
|
@ -57,6 +57,11 @@ class Table:
|
|||
|
||||
Test equality of other.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
other : Table
|
||||
Table to check for equality.
|
||||
|
||||
"""
|
||||
return NotImplemented if not isinstance(other,Table) else \
|
||||
self.shapes == other.shapes and self.data.equals(other.data)
|
||||
|
|
|
@ -10,8 +10,8 @@ FloatSequence = Union[np.ndarray,Sequence[float]]
|
|||
IntSequence = Union[np.ndarray,Sequence[int]]
|
||||
StrSequence = Union[np.ndarray,Sequence[str]]
|
||||
FileHandle = Union[TextIO, str, Path]
|
||||
CrystalFamily = Union[None,Literal['triclinic', 'monoclinic', 'orthorhombic', 'tetragonal', 'hexagonal', 'cubic']]
|
||||
BravaisLattice = Union[None,Literal['aP', 'mP', 'mS', 'oP', 'oS', 'oI', 'oF', 'tP', 'tI', 'hP', 'cP', 'cI', 'cF']]
|
||||
CrystalFamily = Literal['triclinic', 'monoclinic', 'orthorhombic', 'tetragonal', 'hexagonal', 'cubic']
|
||||
BravaisLattice = Literal['aP', 'mP', 'mS', 'oP', 'oS', 'oI', 'oF', 'tP', 'tI', 'hP', 'cP', 'cI', 'cF']
|
||||
CrystalKinematics = Literal['slip', 'twin']
|
||||
NumpyRngSeed = Union[int, IntSequence, np.random.SeedSequence, np.random.Generator]
|
||||
# BitGenerator does not exists in older numpy versions
|
||||
|
|
|
@ -457,7 +457,7 @@ class VTK:
|
|||
data: Union[None, np.ndarray, np.ma.MaskedArray] = None,
|
||||
info: Optional[str] = None,
|
||||
*,
|
||||
table: Optional['Table'] = None):
|
||||
table: Optional['Table'] = None) -> 'VTK':
|
||||
"""
|
||||
Add new or replace existing point or cell data.
|
||||
|
||||
|
@ -534,7 +534,6 @@ class VTK:
|
|||
else:
|
||||
raise TypeError
|
||||
|
||||
|
||||
return dup
|
||||
|
||||
|
||||
|
@ -559,20 +558,18 @@ class VTK:
|
|||
|
||||
"""
|
||||
cell_data = self.vtk_data.GetCellData()
|
||||
for a in range(cell_data.GetNumberOfArrays()):
|
||||
if cell_data.GetArrayName(a) == label:
|
||||
try:
|
||||
return vtk_to_numpy(cell_data.GetArray(a))
|
||||
except AttributeError:
|
||||
vtk_array = cell_data.GetAbstractArray(a) # string array
|
||||
if label in [cell_data.GetArrayName(a) for a in range(cell_data.GetNumberOfArrays())]:
|
||||
try:
|
||||
return vtk_to_numpy(cell_data.GetArray(label))
|
||||
except AttributeError:
|
||||
vtk_array = cell_data.GetAbstractArray(label) # string array
|
||||
|
||||
point_data = self.vtk_data.GetPointData()
|
||||
for a in range(point_data.GetNumberOfArrays()):
|
||||
if point_data.GetArrayName(a) == label:
|
||||
try:
|
||||
return vtk_to_numpy(point_data.GetArray(a))
|
||||
except AttributeError:
|
||||
vtk_array = point_data.GetAbstractArray(a) # string array
|
||||
if label in [point_data.GetArrayName(a) for a in range(point_data.GetNumberOfArrays())]:
|
||||
try:
|
||||
return vtk_to_numpy(point_data.GetArray(label))
|
||||
except AttributeError:
|
||||
vtk_array = point_data.GetAbstractArray(label) # string array
|
||||
|
||||
try:
|
||||
# string array
|
||||
|
@ -581,6 +578,41 @@ class VTK:
|
|||
raise KeyError(f'array "{label}" not found')
|
||||
|
||||
|
||||
def delete(self,
|
||||
label: str) -> 'VTK':
|
||||
"""
|
||||
Delete either cell or point data.
|
||||
|
||||
Cell data takes precedence over point data, i.e. this
|
||||
function assumes that labels are unique among cell and
|
||||
point data.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
label : str
|
||||
Data label.
|
||||
|
||||
Returns
|
||||
-------
|
||||
updated : damask.VTK
|
||||
Updated VTK-based geometry.
|
||||
|
||||
"""
|
||||
dup = self.copy()
|
||||
|
||||
cell_data = dup.vtk_data.GetCellData()
|
||||
if label in [cell_data.GetArrayName(a) for a in range(cell_data.GetNumberOfArrays())]:
|
||||
dup.vtk_data.GetCellData().RemoveArray(label)
|
||||
return dup
|
||||
|
||||
point_data = self.vtk_data.GetPointData()
|
||||
if label in [point_data.GetArrayName(a) for a in range(point_data.GetNumberOfArrays())]:
|
||||
dup.vtk_data.GetPointData().RemoveArray(label)
|
||||
return dup
|
||||
|
||||
raise KeyError(f'array "{label}" not found')
|
||||
|
||||
|
||||
def show(self,
|
||||
label: Optional[str] = None,
|
||||
colormap: Union[Colormap, str] = 'cividis'):
|
||||
|
|
|
@ -116,7 +116,7 @@ def from_grid(grid,
|
|||
|
||||
Parameters
|
||||
----------
|
||||
grid : damask.Grid
|
||||
grid : damask.GeomGrid
|
||||
Grid from which the material IDs are used as seeds.
|
||||
selection : (sequence of) int, optional
|
||||
Material IDs to consider.
|
||||
|
@ -134,6 +134,12 @@ def from_grid(grid,
|
|||
coords, materials : numpy.ndarray, shape (:,3); numpy.ndarray, shape (:)
|
||||
Seed coordinates in 3D space, material IDs.
|
||||
|
||||
Notes
|
||||
-----
|
||||
The origin is not considered in order to obtain coordinates
|
||||
in a coordinate system located at the origin. This is expected
|
||||
by damask.GeomGrid.from_Voronoi_tessellation.
|
||||
|
||||
Examples
|
||||
--------
|
||||
Recreate seeds from Voronoi tessellation.
|
||||
|
@ -142,7 +148,7 @@ def from_grid(grid,
|
|||
>>> import scipy.spatial
|
||||
>>> import damask
|
||||
>>> seeds = damask.seeds.from_random(np.ones(3),29,[128]*3)
|
||||
>>> (g := damask.Grid.from_Voronoi_tessellation([128]*3,np.ones(3),seeds))
|
||||
>>> (g := damask.GeomGrid.from_Voronoi_tessellation([128]*3,np.ones(3),seeds))
|
||||
cells: 128 × 128 × 128
|
||||
size: 1.0 × 1.0 × 1.0 m³
|
||||
origin: 0.0 0.0 0.0 m
|
||||
|
@ -166,8 +172,8 @@ def from_grid(grid,
|
|||
materials = _np.unique(material[mask])
|
||||
coords_ = _np.zeros((materials.size,3),dtype=float)
|
||||
for i,mat in enumerate(materials):
|
||||
pc = (2*_np.pi*coords[material[:,0]==mat,:]-grid.origin)/grid.size
|
||||
coords_[i] = grid.origin + grid.size / 2 / _np.pi * (_np.pi +
|
||||
pc = 2*_np.pi*coords[material[:,0]==mat,:]/grid.size
|
||||
coords_[i] = grid.size / 2 / _np.pi * (_np.pi +
|
||||
_np.arctan2(-_np.average(_np.sin(pc),axis=0),
|
||||
-_np.average(_np.cos(pc),axis=0))) \
|
||||
if periodic else \
|
||||
|
|
|
@ -4,7 +4,7 @@ import re
|
|||
from pathlib import Path
|
||||
from typing import Literal
|
||||
|
||||
_marc_version = '2023.1'
|
||||
_marc_version = '2023.3'
|
||||
_marc_root = '/opt/msc'
|
||||
_damask_root = str(Path(__file__).parents[3])
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
../Grid/2phase_irregularGrid.dream3d
|
||||
../GeomGrid/2phase_irregularGrid.dream3d
|
|
@ -1 +1 @@
|
|||
../Grid/2phase_irregularGrid.json
|
||||
../GeomGrid/2phase_irregularGrid.json
|
|
@ -1 +1 @@
|
|||
../Grid/2phase_irregularGrid.xdmf
|
||||
../GeomGrid/2phase_irregularGrid.xdmf
|
|
@ -1 +1 @@
|
|||
../Grid/measured.dream3d
|
||||
../GeomGrid/measured.dream3d
|
|
@ -1 +1 @@
|
|||
../Grid/measured.xdmf
|
||||
../GeomGrid/measured.xdmf
|
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue