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]
|
on: [push]
|
||||||
|
|
||||||
env:
|
env:
|
||||||
PETSC_VERSION: '3.18.4'
|
PETSC_VERSION: '3.20.1'
|
||||||
HOMEBREW_NO_ANALYTICS: 'ON' # Make Homebrew installation a little quicker
|
HOMEBREW_NO_ANALYTICS: 'ON' # Make Homebrew installation a little quicker
|
||||||
HOMEBREW_NO_AUTO_UPDATE: 'ON'
|
HOMEBREW_NO_AUTO_UPDATE: 'ON'
|
||||||
HOMEBREW_NO_BOTTLE_SOURCE_FALLBACK: 'ON'
|
HOMEBREW_NO_BOTTLE_SOURCE_FALLBACK: 'ON'
|
||||||
|
@ -17,7 +17,7 @@ jobs:
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
gcc_v: [9, 10, 11, 12]
|
gcc_v: [9, 10, 11, 12, 13]
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
||||||
env:
|
env:
|
||||||
|
@ -47,7 +47,7 @@ jobs:
|
||||||
- name: PETSc - Download
|
- name: PETSc - Download
|
||||||
if: steps.petsc-download.outputs.cache-hit != 'true'
|
if: steps.petsc-download.outputs.cache-hit != 'true'
|
||||||
run: |
|
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
|
- name: PETSc - Prepare
|
||||||
run: |
|
run: |
|
||||||
|
@ -88,31 +88,22 @@ jobs:
|
||||||
|
|
||||||
intel:
|
intel:
|
||||||
|
|
||||||
runs-on: [ubuntu-22.04]
|
runs-on: ubuntu-22.04
|
||||||
|
container:
|
||||||
|
image: intel/oneapi-hpckit:latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
|
||||||
intel_v: [classic, llvm] # Variant of Intel compilers
|
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
||||||
env:
|
|
||||||
INTEL_V: ${{ matrix.intel_v }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Intel - Install
|
- name: Intel - Install
|
||||||
run: |
|
run: |
|
||||||
wget -q https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
|
apt-get update --allow-insecure-repositories
|
||||||
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
|
apt-get install --allow-unauthenticated -y \
|
||||||
rm GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
|
cmake build-essential autoconf libtool \
|
||||||
echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
|
zlib1g-dev
|
||||||
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
|
|
||||||
printenv >> $GITHUB_ENV
|
printenv >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: PETSc - Cache download
|
- name: PETSc - Cache download
|
||||||
|
@ -125,15 +116,15 @@ jobs:
|
||||||
- name: PETSc - Download
|
- name: PETSc - Download
|
||||||
if: steps.petsc-download.outputs.cache-hit != 'true'
|
if: steps.petsc-download.outputs.cache-hit != 'true'
|
||||||
run: |
|
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
|
- name: PETSc - Prepare
|
||||||
run: |
|
run: |
|
||||||
tar -xf download/petsc-${PETSC_VERSION}.tar.gz -C .
|
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
|
./petsc-${PETSC_VERSION}/config/BuildSystem/config/package.py
|
||||||
export PETSC_DIR=${PWD}/petsc-${PETSC_VERSION}
|
export PETSC_DIR=${PWD}/petsc-${PETSC_VERSION}
|
||||||
export PETSC_ARCH=intel-${INTEL_V}
|
export PETSC_ARCH=intel
|
||||||
printenv >> $GITHUB_ENV
|
printenv >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: PETSc - Cache installation
|
- name: PETSc - Cache installation
|
||||||
|
@ -141,21 +132,9 @@ jobs:
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: petsc-${{ env.PETSC_VERSION }}
|
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)
|
- name: PETSc - Install
|
||||||
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')
|
|
||||||
run: |
|
run: |
|
||||||
cd petsc-${PETSC_VERSION}
|
cd petsc-${PETSC_VERSION}
|
||||||
./configure \
|
./configure \
|
||||||
|
@ -166,7 +145,6 @@ jobs:
|
||||||
make all
|
make all
|
||||||
|
|
||||||
- name: DAMASK - Compile
|
- name: DAMASK - Compile
|
||||||
if: contains( matrix.intel_v, 'classic')
|
|
||||||
run: |
|
run: |
|
||||||
cmake -B build/grid -DDAMASK_SOLVER=grid -DCMAKE_INSTALL_PREFIX=${PWD}
|
cmake -B build/grid -DDAMASK_SOLVER=grid -DCMAKE_INSTALL_PREFIX=${PWD}
|
||||||
cmake --build build/grid --parallel
|
cmake --build build/grid --parallel
|
||||||
|
@ -175,18 +153,6 @@ jobs:
|
||||||
cmake --build build/mesh --parallel
|
cmake --build build/mesh --parallel
|
||||||
cmake --install build/mesh
|
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
|
- name: DAMASK - Run
|
||||||
run: |
|
run: |
|
||||||
./bin/DAMASK_grid -l tensionX.yaml -g 20grains16x16x16.vti -m material.yaml -w examples/grid
|
./bin/DAMASK_grid -l tensionX.yaml -g 20grains16x16x16.vti -m material.yaml -w examples/grid
|
||||||
|
|
|
@ -9,7 +9,7 @@ jobs:
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
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]
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ variables:
|
||||||
PETSC_INTELLLVM: "Libraries/PETSc/3.16.3/oneAPI-2022.0.1-IntelMPI-2021.5.0"
|
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"
|
PETSC_INTEL: "Libraries/PETSc/3.16.5/Intel-2022.0.1-IntelMPI-2021.5.0"
|
||||||
# ++++++++++++ MSC Marc +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
# ++++++++++++ MSC Marc +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
MSC: "FEM/MSC/2023.1"
|
MSC: "FEM/MSC/2023.3"
|
||||||
IntelMarc: "Compiler/Intel/19.1.2 Libraries/IMKL/2020"
|
IntelMarc: "Compiler/Intel/19.1.2 Libraries/IMKL/2020"
|
||||||
HDF5Marc: "HDF5/1.12.2/Intel-19.1.2"
|
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")
|
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")
|
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)
|
add_definitions(-DFYAML)
|
||||||
pkg_get_variable(fYAML_INCLUDE_DIR libfyaml includedir) # fYAML_INCLUDE_DIRS and fYAML_CFLAGS are not working
|
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}")
|
set(CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}} -I${fYAML_INCLUDE_DIR}")
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
#==================================================================================================
|
#==================================================================================================
|
||||||
# Execute this script (type './DAMASK_prerequisites.sh')
|
# Execute this script (type './DAMASK_prerequisites.sh')
|
||||||
# and send system_report.txt to damask@mpie.de for support
|
# and send system_report.txt to damask@mpie.de for support
|
||||||
#==================================================================================================
|
#==================================================================================================
|
||||||
|
|
||||||
OUTFILE="system_report.txt"
|
OUTFILE="system_report.txt"
|
||||||
echo ===========================================
|
echo ===========================================
|
||||||
echo + Generating $OUTFILE
|
echo + Generating $OUTFILE
|
||||||
echo + Send to damask@mpie.de for support
|
echo + Send to damask@mpie.de for support
|
||||||
echo + view with \'cat $OUTFILE\'
|
echo + view with \'cat $OUTFILE\'
|
||||||
echo ===========================================
|
echo ===========================================
|
||||||
|
@ -47,7 +47,7 @@ echo
|
||||||
# redirect STDOUT and STDERR to logfile
|
# redirect STDOUT and STDERR to logfile
|
||||||
# https://stackoverflow.com/questions/11229385/redirect-all-output-in-a-bash-script-when-using-set-x^
|
# https://stackoverflow.com/questions/11229385/redirect-all-output-in-a-bash-script-when-using-set-x^
|
||||||
exec > $OUTFILE 2>&1
|
exec > $OUTFILE 2>&1
|
||||||
|
|
||||||
# directory, file is not a symlink by definition
|
# directory, file is not a symlink by definition
|
||||||
# https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within
|
# https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within
|
||||||
DAMASK_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
DAMASK_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
@ -88,7 +88,7 @@ done
|
||||||
secondLevel "Details on $DEFAULT_PYTHON:"
|
secondLevel "Details on $DEFAULT_PYTHON:"
|
||||||
echo $(ls -la $(which $DEFAULT_PYTHON))
|
echo $(ls -la $(which $DEFAULT_PYTHON))
|
||||||
for MODULE in numpy scipy pandas matplotlib yaml h5py;do
|
for MODULE in numpy scipy pandas matplotlib yaml h5py;do
|
||||||
thirdLevel $module
|
thirdLevel $MODULE
|
||||||
$DEFAULT_PYTHON -c "import $MODULE; \
|
$DEFAULT_PYTHON -c "import $MODULE; \
|
||||||
print('Version: {}'.format($MODULE.__version__)); \
|
print('Version: {}'.format($MODULE.__version__)); \
|
||||||
print('Location: {}'.format($MODULE.__file__))"
|
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
|
# 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
|
## Contact Information
|
||||||
|
|
||||||
|
@ -8,8 +25,3 @@ Max-Planck-Institut für Eisenforschung GmbH
|
||||||
Max-Planck-Str. 1
|
Max-Planck-Str. 1
|
||||||
40237 Düsseldorf
|
40237 Düsseldorf
|
||||||
Germany
|
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 [
|
return [
|
||||||
"*add_nodes",
|
"*add_nodes",
|
||||||
"%f %f %f"%(0.0,0.0,0.0),
|
"%f %f %f"%(0.0,0.0,0.0),
|
||||||
"%f %f %f"%(0.0,0.0,d[2]),
|
"%f %f %f"%(d[0],0.0,0.0),
|
||||||
"%f %f %f"%(0.0,d[1],d[2]),
|
"%f %f %f"%(d[0],d[1],0.0),
|
||||||
"%f %f %f"%(0.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"%(0.0,0.0,d[2]),
|
||||||
"%f %f %f"%(-d[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"%(d[0],d[1],d[2]),
|
||||||
"%f %f %f"%(-d[0],d[1],0.0),
|
"%f %f %f"%(0.0,d[1],d[2]),
|
||||||
"*add_elements",
|
"*add_elements",
|
||||||
"1",
|
"1",
|
||||||
"2",
|
"2",
|
||||||
|
@ -82,19 +82,17 @@ def mesh(r,d):
|
||||||
"7",
|
"7",
|
||||||
"8",
|
"8",
|
||||||
"*sub_divisions",
|
"*sub_divisions",
|
||||||
"%i %i %i"%(r[2],r[1],r[0]),
|
"%i %i %i"%(r[0],r[1],r[2]),
|
||||||
"*subdivide_elements",
|
"*subdivide_elements",
|
||||||
"all_existing",
|
"all_existing",
|
||||||
"*set_sweep_tolerance",
|
"*set_sweep_tolerance",
|
||||||
"%f"%(float(min(d))/max(r)/2.0),
|
"%f"%(float(min(d))/max(r)/2.0),
|
||||||
"*sweep_all",
|
"*sweep_all",
|
||||||
"*renumber_all",
|
"*remove_unused_nodes",
|
||||||
"*set_move_scale_factor x -1",
|
"*set_renumber_direction",
|
||||||
"*move_elements",
|
"%i %i %i"%(1,r[0],r[0]*r[1]),
|
||||||
"all_existing",
|
"*renumber_elements_directed",
|
||||||
"*flip_elements",
|
"*renumber_nodes_directed",
|
||||||
"all_existing",
|
|
||||||
"*fill_view",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -142,8 +140,7 @@ def initial_conditions(material):
|
||||||
cmds = [\
|
cmds = [\
|
||||||
"*new_icond",
|
"*new_icond",
|
||||||
"*icond_name _temperature",
|
"*icond_name _temperature",
|
||||||
"*icond_type state_variable",
|
"*icond_type elem_temperature_state",
|
||||||
"*icond_param_value state_var_id 1",
|
|
||||||
"*icond_dof_value var 300",
|
"*icond_dof_value var 300",
|
||||||
"*add_icond_elements",
|
"*add_icond_elements",
|
||||||
"all_existing",
|
"all_existing",
|
||||||
|
@ -153,9 +150,9 @@ def initial_conditions(material):
|
||||||
cmds.append([\
|
cmds.append([\
|
||||||
"*new_icond",
|
"*new_icond",
|
||||||
"*icond_name material_%i"%(grain+1),
|
"*icond_name material_%i"%(grain+1),
|
||||||
"*icond_type state_variable",
|
"*icond_type elem_user_state",
|
||||||
"*icond_param_value state_var_id 2",
|
"*icond_param_value state_var_id 2",
|
||||||
"*icond_dof_value var %i"%(grain+1),
|
"*icond_dof_value var %i"%(grain),
|
||||||
"*add_icond_elements",
|
"*add_icond_elements",
|
||||||
elementList,
|
elementList,
|
||||||
"#",
|
"#",
|
||||||
|
@ -196,7 +193,7 @@ if filenames == []: filenames = [None]
|
||||||
for name in filenames:
|
for name in filenames:
|
||||||
print(script_name+': '+name)
|
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')
|
material = geom.material.flatten(order='F')
|
||||||
|
|
||||||
cmds = [\
|
cmds = [\
|
||||||
|
@ -209,6 +206,7 @@ for name in filenames:
|
||||||
'*show_model',
|
'*show_model',
|
||||||
'*redraw',
|
'*redraw',
|
||||||
'*draw_automatic',
|
'*draw_automatic',
|
||||||
|
'*fill_view',
|
||||||
]
|
]
|
||||||
|
|
||||||
output_locals = {}
|
output_locals = {}
|
||||||
|
|
|
@ -26,5 +26,5 @@ from ._vtk import VTK # noqa
|
||||||
from ._config import Config # noqa
|
from ._config import Config # noqa
|
||||||
from ._configmaterial import ConfigMaterial # noqa
|
from ._configmaterial import ConfigMaterial # noqa
|
||||||
from ._loadcasegrid import LoadcaseGrid # noqa
|
from ._loadcasegrid import LoadcaseGrid # noqa
|
||||||
from ._grid import Grid # noqa
|
from ._geomgrid import GeomGrid # noqa
|
||||||
from ._result import Result # noqa
|
from ._result import Result # noqa
|
||||||
|
|
|
@ -296,8 +296,8 @@ class Colormap(mpl.colors.ListedColormap):
|
||||||
RGBA image of shaded data.
|
RGBA image of shaded data.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
mask = np.logical_not(np.isnan(field) if gap is None else \
|
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)
|
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 \
|
l,r = (field[mask].min(),field[mask].max()) if bounds is None else \
|
||||||
(bounds[0],bounds[1])
|
(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
|
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
|
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(
|
return Image.fromarray(
|
||||||
(np.dstack((
|
(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)
|
mask.astype(float)
|
||||||
)
|
)
|
||||||
)*255
|
)*255
|
||||||
|
|
|
@ -144,7 +144,7 @@ class ConfigMaterial(Config):
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
-----
|
-----
|
||||||
damask.Grid.load_DREAM3D gives the corresponding geometry for
|
damask.GeomGrid.load_DREAM3D gives the corresponding geometry for
|
||||||
the grid solver.
|
the grid solver.
|
||||||
|
|
||||||
For cell-wise data, only unique combinations of
|
For cell-wise data, only unique combinations of
|
||||||
|
|
|
@ -6,7 +6,8 @@ from ._typehints import FloatSequence, CrystalFamily, BravaisLattice, CrystalKin
|
||||||
from . import util
|
from . import util
|
||||||
from . import Rotation
|
from . import Rotation
|
||||||
|
|
||||||
lattice_symmetries: Dict[BravaisLattice, CrystalFamily] = {
|
|
||||||
|
lattice_symmetries: Dict[Optional[BravaisLattice], CrystalFamily] = {
|
||||||
'aP': 'triclinic',
|
'aP': 'triclinic',
|
||||||
|
|
||||||
'mP': 'monoclinic',
|
'mP': 'monoclinic',
|
||||||
|
@ -27,276 +28,406 @@ lattice_symmetries: Dict[BravaisLattice, CrystalFamily] = {
|
||||||
'cF': 'cubic',
|
'cF': 'cubic',
|
||||||
}
|
}
|
||||||
|
|
||||||
orientation_relationships: Dict[str, Dict[BravaisLattice,np.ndarray]] = {
|
orientation_relationships: Dict[str, Dict[str,List[np.ndarray]]] = {
|
||||||
'KS': {
|
'KS': { # https://doi.org/10.1016/j.jallcom.2012.02.004
|
||||||
'cF': np.array([
|
'cF-->cI' : [
|
||||||
[[-1, 0, 1],[ 1, 1, 1]],
|
np.repeat(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]],
|
||||||
[[ 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, 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]],
|
|
||||||
|
|
||||||
[[ 1, 1, -1],[ 1, 0, 1]],
|
[[ 1, 0,-1],[ 1,-1, 1]],
|
||||||
[[ -1, 1, 1],[ 1, 0, 1]],
|
[[-1,-1, 0],[ 1,-1, 1]],
|
||||||
[[ 1, 1, 1],[ -1, 0, 1]],
|
[[ 0, 1, 1],[ 1,-1, 1]],
|
||||||
[[ 1, -1, 1],[ -1, 0, 1]],
|
|
||||||
|
|
||||||
[[ -1, 1, -1],[ 0, 1, 1]],
|
[[ 0,-1, 1],[-1, 1, 1]],
|
||||||
[[ 1, 1, -1],[ 0, 1, 1]],
|
[[-1, 0,-1],[-1, 1, 1]],
|
||||||
[[ -1, 1, 1],[ 0, -1, 1]],
|
[[ 1, 1, 0],[-1, 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]],
|
|
||||||
|
|
||||||
[[ -1, 2, -1, 0],[ 0, 0, 0, 1]],
|
[[-1, 1, 0],[ 1, 1,-1]],
|
||||||
[[ -1, -1, 2, 0],[ 0, 0, 0, 1]],
|
[[ 0,-1,-1],[ 1, 1,-1]],
|
||||||
[[ -1, 2, -1, 0],[ 0, 0, 0, 1]],
|
[[ 1, 0, 1],[ 1, 1,-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),
|
||||||
|
(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, 1],[ 0, 1,-1]],
|
||||||
[[ -1, -1, 2, 0],[ 0, 0, 0, 1]],
|
[[-1, 1, 1],[ 0, 1,-1]],
|
||||||
[[ -1, 2, -1, 0],[ 0, 0, 0, 1]],
|
|
||||||
[[ -1, -1, 2, 0],[ 0, 0, 0, 1]],
|
[[ 1, 1,-1],[ 1, 0, 1]],
|
||||||
],dtype=float),
|
[[ 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():
|
class Crystal():
|
||||||
"""
|
"""
|
||||||
|
@ -358,7 +489,7 @@ class Crystal():
|
||||||
if lattice is not None and family is not None and family != lattice_symmetries[lattice]:
|
if lattice is not None and family is not None and family != lattice_symmetries[lattice]:
|
||||||
raise KeyError(f'incompatible family "{family}" for lattice "{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
|
self.lattice = lattice
|
||||||
|
|
||||||
if self.lattice is not None:
|
if self.lattice is not None:
|
||||||
|
@ -428,20 +559,20 @@ class Crystal():
|
||||||
Crystal to check for equality.
|
Crystal to check for equality.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return NotImplemented if not isinstance(other, Crystal) else \
|
return (NotImplemented if not isinstance(other, Crystal) else
|
||||||
self.lattice == other.lattice and \
|
self.lattice == other.lattice and
|
||||||
self.parameters == other.parameters and \
|
self.parameters == other.parameters and
|
||||||
self.family == other.family
|
self.family == other.family) # type: ignore
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def parameters(self):
|
def parameters(self) -> Optional[Tuple]:
|
||||||
"""Return lattice parameters a, b, c, alpha, beta, gamma."""
|
"""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
|
@property
|
||||||
def immutable(self):
|
def immutable(self) -> Dict[str, float]:
|
||||||
"""Return immutable lattice parameters."""
|
"""Return immutable lattice parameters."""
|
||||||
_immutable = {
|
_immutable: Dict[CrystalFamily, Dict[str,float]] = {
|
||||||
'cubic': {
|
'cubic': {
|
||||||
'b': 1.0,
|
'b': 1.0,
|
||||||
'c': 1.0,
|
'c': 1.0,
|
||||||
|
@ -476,9 +607,9 @@ class Crystal():
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def orientation_relationships(self):
|
def orientation_relationships(self) -> List[str]:
|
||||||
"""Return labels of orientation relationships."""
|
"""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
|
@property
|
||||||
|
@ -671,9 +802,9 @@ class Crystal():
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def lattice_points(self):
|
def lattice_points(self) -> np.ndarray:
|
||||||
"""Return lattice points."""
|
"""Return lattice points."""
|
||||||
_lattice_points = {
|
_lattice_points: Dict[str, List] = {
|
||||||
'P': [
|
'P': [
|
||||||
],
|
],
|
||||||
'S': [
|
'S': [
|
||||||
|
@ -694,8 +825,8 @@ class Crystal():
|
||||||
|
|
||||||
if self.lattice is None: raise KeyError('no lattice type specified')
|
if self.lattice is None: raise KeyError('no lattice type specified')
|
||||||
return np.array([[0,0,0]]
|
return np.array([[0,0,0]]
|
||||||
+ _lattice_points.get(self.lattice if self.lattice == 'hP' else \
|
+ _lattice_points.get(self.lattice if self.lattice == 'hP' else
|
||||||
self.lattice[-1],None),dtype=float)
|
self.lattice[-1],[]),dtype=float)
|
||||||
|
|
||||||
def to_lattice(self, *,
|
def to_lattice(self, *,
|
||||||
direction: Optional[FloatSequence] = None,
|
direction: Optional[FloatSequence] = None,
|
||||||
|
@ -753,7 +884,7 @@ class Crystal():
|
||||||
Crystal frame vector (reciprocal space) of Titanium along (1,0,0) plane normal:
|
Crystal frame vector (reciprocal space) of Titanium along (1,0,0) plane normal:
|
||||||
|
|
||||||
>>> import damask
|
>>> 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))
|
>>> Ti.to_frame(hkl=(1, 0, 0))
|
||||||
array([ 3.38983051e+09, 1.95711956e+09, -4.15134508e-07])
|
array([ 3.38983051e+09, 1.95711956e+09, -4.15134508e-07])
|
||||||
|
|
||||||
|
@ -782,7 +913,7 @@ class Crystal():
|
||||||
Directions and planes of deformation mode families.
|
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': {
|
'cF': {
|
||||||
'slip': [np.array([
|
'slip': [np.array([
|
||||||
[ 0,+1,-1, +1,+1,+1],
|
[ 0,+1,-1, +1,+1,+1],
|
||||||
|
@ -1025,7 +1156,8 @@ class Crystal():
|
||||||
|
|
||||||
|
|
||||||
def relation_operations(self,
|
def relation_operations(self,
|
||||||
model: str) -> Tuple[BravaisLattice, Rotation]:
|
model: str,
|
||||||
|
target = None) -> Tuple[BravaisLattice, Rotation]:
|
||||||
"""
|
"""
|
||||||
Crystallographic orientation relationships for phase transformations.
|
Crystallographic orientation relationships for phase transformations.
|
||||||
|
|
||||||
|
@ -1033,6 +1165,10 @@ class Crystal():
|
||||||
----------
|
----------
|
||||||
model : str
|
model : str
|
||||||
Name of orientation relationship.
|
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
|
Returns
|
||||||
-------
|
-------
|
||||||
|
@ -1057,20 +1193,27 @@ class Crystal():
|
||||||
https://doi.org/10.1016/j.actamat.2004.11.021
|
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}
|
m_l: BravaisLattice
|
||||||
if model not in my_relationships:
|
o_l: BravaisLattice
|
||||||
|
|
||||||
|
if model not in self.orientation_relationships:
|
||||||
raise KeyError(f'unknown orientation relationship "{model}"')
|
raise KeyError(f'unknown orientation relationship "{model}"')
|
||||||
r = my_relationships[model]
|
|
||||||
|
|
||||||
sl = self.lattice
|
sep = '-->'
|
||||||
ol = (set(r)-{sl}).pop()
|
search = self.lattice+sep+('' if target is None else target.lattice) # type: ignore
|
||||||
m = r[sl]
|
transform = [t for t in orientation_relationships[model].keys() if t.startswith(search)] # type: ignore
|
||||||
o = r[ol]
|
|
||||||
|
|
||||||
p_,_p = np.zeros(m.shape[:-1]+(3,)),np.zeros(o.shape[:-1]+(3,))
|
if len(transform) != 1:
|
||||||
p_[...,0,:] = m[...,0,:] if m.shape[-1] == 3 else util.Bravais_to_Miller(uvtw=m[...,0,0:4])
|
raise ValueError(f'invalid target lattice "{search.split(sep)[1]}"')
|
||||||
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])
|
|
||||||
|
|
||||||
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)
|
return (lambda function: nb.njit(function) if nb else function)
|
||||||
|
|
||||||
|
|
||||||
class Grid:
|
class GeomGrid:
|
||||||
"""
|
"""
|
||||||
Geometry definition for grid solvers.
|
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 []))
|
]+(['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).
|
Return deepcopy(self).
|
||||||
|
|
||||||
|
@ -110,11 +110,11 @@ class Grid:
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
other : damask.Grid
|
other : damask.GeomGrid
|
||||||
Grid to compare self against.
|
GeomGrid to compare self against.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if not isinstance(other, Grid):
|
if not isinstance(other, GeomGrid):
|
||||||
return NotImplemented
|
return NotImplemented
|
||||||
return bool( np.allclose(other.size,self.size)
|
return bool( np.allclose(other.size,self.size)
|
||||||
and np.allclose(other.origin,self.origin)
|
and np.allclose(other.origin,self.origin)
|
||||||
|
@ -197,38 +197,84 @@ class Grid:
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def load(fname: Union[str, Path]) -> 'Grid':
|
def _load(fname: Union[str, Path], label: str) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Load from VTK ImageData file.
|
Load from VTK ImageData file.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
fname : str or pathlib.Path
|
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.
|
Valid extension is .vti, which will be appended if not given.
|
||||||
|
label : str
|
||||||
|
Label of the dataset containing the material IDs.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
loaded : damask.Grid
|
loaded : damask.GeomGrid
|
||||||
Grid-based geometry from file.
|
GeomGrid-based geometry from file.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
v = VTK.load(fname if str(fname).endswith('.vti') else str(fname)+'.vti')
|
v = VTK.load(fname if str(fname).endswith('.vti') else str(fname)+'.vti')
|
||||||
cells = np.array(v.vtk_data.GetDimensions())-1
|
cells = np.array(v.vtk_data.GetDimensions())-1
|
||||||
bbox = np.array(v.vtk_data.GetBounds()).reshape(3,2).T
|
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'),
|
return GeomGrid(material = v.get(label).reshape(cells,order='F'),
|
||||||
size = bbox[1] - bbox[0],
|
size = bbox[1] - bbox[0],
|
||||||
origin = bbox[0],
|
origin = bbox[0],
|
||||||
initial_conditions = ic,
|
initial_conditions = ic,
|
||||||
comments = v.comments,
|
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
|
@typing.no_type_check
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def load_ASCII(fname)-> 'Grid':
|
def load_ASCII(fname)-> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Load from geom file.
|
Load from geom file.
|
||||||
|
|
||||||
|
@ -242,8 +288,8 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
loaded : damask.Grid
|
loaded : damask.GeomGrid
|
||||||
Grid-based geometry from file.
|
GeomGrid-based geometry from file.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
warnings.warn('Support for ASCII-based geom format will be removed in DAMASK 3.0.0', DeprecationWarning,2)
|
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
|
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)
|
material = material.astype(np.int64) - (1 if material.min() > 0 else 0)
|
||||||
|
|
||||||
return Grid(material = material.reshape(cells,order='F'),
|
return GeomGrid(material = material.reshape(cells,order='F'),
|
||||||
size = size,
|
size = size,
|
||||||
origin = origin,
|
origin = origin,
|
||||||
comments = comments)
|
comments = comments,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def load_Neper(fname: Union[str, Path]) -> 'Grid':
|
def load_Neper(fname: Union[str, Path]) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Load from Neper VTK file.
|
Load from Neper VTK file.
|
||||||
|
|
||||||
|
@ -314,8 +361,8 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
loaded : damask.Grid
|
loaded : damask.GeomGrid
|
||||||
Grid-based geometry from file.
|
GeomGrid-based geometry from file.
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
-----
|
-----
|
||||||
|
@ -330,7 +377,7 @@ class Grid:
|
||||||
>>> N_grains = 20
|
>>> N_grains = 20
|
||||||
>>> cells = (32,32,32)
|
>>> 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.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
|
cells: 32 × 32 × 32
|
||||||
size: 1.0 × 1.0 × 1.0 m³
|
size: 1.0 × 1.0 × 1.0 m³
|
||||||
origin: 0.0 0.0 0.0 m
|
origin: 0.0 0.0 0.0 m
|
||||||
|
@ -341,11 +388,11 @@ class Grid:
|
||||||
cells = np.array(v.vtk_data.GetDimensions())-1
|
cells = np.array(v.vtk_data.GetDimensions())-1
|
||||||
bbox = np.array(v.vtk_data.GetBounds()).reshape(3,2).T
|
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'),
|
return GeomGrid(material = v.get('MaterialId').reshape(cells,order='F').astype('int32',casting='unsafe'),
|
||||||
size = bbox[1] - bbox[0],
|
size = bbox[1] - bbox[0],
|
||||||
origin = bbox[0],
|
origin = bbox[0],
|
||||||
comments = util.execution_stamp('Grid','load_Neper'),
|
comments = util.execution_stamp('GeomGrid','load_Neper'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -354,7 +401,7 @@ class Grid:
|
||||||
cell_data: Optional[str] = None,
|
cell_data: Optional[str] = None,
|
||||||
phases: str = 'Phases',
|
phases: str = 'Phases',
|
||||||
Euler_angles: str = 'EulerAngles',
|
Euler_angles: str = 'EulerAngles',
|
||||||
base_group: Optional[str] = None) -> 'Grid':
|
base_group: Optional[str] = None) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Load DREAM.3D (HDF5) file.
|
Load DREAM.3D (HDF5) file.
|
||||||
|
|
||||||
|
@ -389,8 +436,8 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
loaded : damask.Grid
|
loaded : damask.GeomGrid
|
||||||
Grid-based geometry from file.
|
GeomGrid-based geometry from file.
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
-----
|
-----
|
||||||
|
@ -418,17 +465,17 @@ class Grid:
|
||||||
else:
|
else:
|
||||||
ma = f['/'.join([b,c,feature_IDs])][()].flatten()
|
ma = f['/'.join([b,c,feature_IDs])][()].flatten()
|
||||||
|
|
||||||
return Grid(material = ma.reshape(cells,order='F'),
|
return GeomGrid(material = ma.reshape(cells,order='F'),
|
||||||
size = size,
|
size = size,
|
||||||
origin = origin,
|
origin = origin,
|
||||||
comments = util.execution_stamp('Grid','load_DREAM3D'),
|
comments = util.execution_stamp('GeomGrid','load_DREAM3D'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_table(table: Table,
|
def from_table(table: Table,
|
||||||
coordinates: str,
|
coordinates: str,
|
||||||
labels: Union[str, Sequence[str]]) -> 'Grid':
|
labels: Union[str, Sequence[str]]) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Create grid from ASCII table.
|
Create grid from ASCII table.
|
||||||
|
|
||||||
|
@ -445,8 +492,8 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
new : damask.Grid
|
new : damask.GeomGrid
|
||||||
Grid-based geometry from values in table.
|
GeomGrid-based geometry from values in table.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
cells,size,origin = grid_filters.cellsSizeOrigin_coordinates0_point(table.get(coordinates))
|
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 \
|
ma = np.arange(cells.prod()) if len(unique) == cells.prod() else \
|
||||||
np.arange(unique.size)[np.argsort(pd.unique(unique_inverse))][unique_inverse]
|
np.arange(unique.size)[np.argsort(pd.unique(unique_inverse))][unique_inverse]
|
||||||
|
|
||||||
return Grid(material = ma.reshape(cells,order='F'),
|
return GeomGrid(material = ma.reshape(cells,order='F'),
|
||||||
size = size,
|
size = size,
|
||||||
origin = origin,
|
origin = origin,
|
||||||
comments = util.execution_stamp('Grid','from_table'),
|
comments = util.execution_stamp('GeomGrid','from_table'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -487,9 +534,11 @@ class Grid:
|
||||||
size : sequence of float, len (3)
|
size : sequence of float, len (3)
|
||||||
Edge lengths of the grid in meter.
|
Edge lengths of the grid in meter.
|
||||||
seeds : numpy.ndarray of float, shape (:,3)
|
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 : 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 : sequence of int, len (seeds.shape[0]), optional
|
||||||
Material ID of the seeds.
|
Material ID of the seeds.
|
||||||
Defaults to None, in which case materials are consecutively numbered.
|
Defaults to None, in which case materials are consecutively numbered.
|
||||||
|
@ -498,8 +547,8 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
new : damask.Grid
|
new : damask.GeomGrid
|
||||||
Grid-based geometry from tessellation.
|
GeomGrid-based geometry from tessellation.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
weights_p: FloatSequence
|
weights_p: FloatSequence
|
||||||
|
@ -515,17 +564,17 @@ class Grid:
|
||||||
coords = grid_filters.coordinates0_point(cells,size).reshape(-1,3)
|
coords = grid_filters.coordinates0_point(cells,size).reshape(-1,3)
|
||||||
|
|
||||||
pool = mp.Pool(int(os.environ.get('OMP_NUM_THREADS',4)))
|
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.close()
|
||||||
pool.join()
|
pool.join()
|
||||||
material_ = np.array(result.get()).reshape(cells)
|
material_ = np.array(result.get()).reshape(cells)
|
||||||
|
|
||||||
if periodic: material_ %= len(weights)
|
if periodic: material_ %= len(weights)
|
||||||
|
|
||||||
return Grid(material = material_ if material is None else np.array(material)[material_],
|
return GeomGrid(material = material_ if material is None else np.array(material)[material_],
|
||||||
size = size,
|
size = size,
|
||||||
comments = util.execution_stamp('Grid','from_Laguerre_tessellation'),
|
comments = util.execution_stamp('GeomGrid','from_Laguerre_tessellation'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -533,7 +582,7 @@ class Grid:
|
||||||
size: FloatSequence,
|
size: FloatSequence,
|
||||||
seeds: np.ndarray,
|
seeds: np.ndarray,
|
||||||
material: Optional[IntSequence] = None,
|
material: Optional[IntSequence] = None,
|
||||||
periodic: bool = True) -> 'Grid':
|
periodic: bool = True) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Create grid from Voronoi tessellation.
|
Create grid from Voronoi tessellation.
|
||||||
|
|
||||||
|
@ -544,7 +593,8 @@ class Grid:
|
||||||
size : sequence of float, len (3)
|
size : sequence of float, len (3)
|
||||||
Edge lengths of the grid in meter.
|
Edge lengths of the grid in meter.
|
||||||
seeds : numpy.ndarray of float, shape (:,3)
|
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 : sequence of int, len (seeds.shape[0]), optional
|
||||||
Material ID of the seeds.
|
Material ID of the seeds.
|
||||||
Defaults to None, in which case materials are consecutively numbered.
|
Defaults to None, in which case materials are consecutively numbered.
|
||||||
|
@ -553,8 +603,8 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
new : damask.Grid
|
new : damask.GeomGrid
|
||||||
Grid-based geometry from tessellation.
|
GeomGrid-based geometry from tessellation.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
coords = grid_filters.coordinates0_point(cells,size).reshape(-1,3)
|
coords = grid_filters.coordinates0_point(cells,size).reshape(-1,3)
|
||||||
|
@ -565,10 +615,10 @@ class Grid:
|
||||||
except TypeError:
|
except TypeError:
|
||||||
material_ = tree.query(coords, n_jobs = int(os.environ.get('OMP_NUM_THREADS',4)))[1] # scipy <1.6
|
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),
|
return GeomGrid(material = (material_ if material is None else np.array(material)[material_]).reshape(cells),
|
||||||
size = size,
|
size = size,
|
||||||
comments = util.execution_stamp('Grid','from_Voronoi_tessellation'),
|
comments = util.execution_stamp('GeomGrid','from_Voronoi_tessellation'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
_minimal_surface = \
|
_minimal_surface = \
|
||||||
|
@ -619,7 +669,7 @@ class Grid:
|
||||||
surface: str,
|
surface: str,
|
||||||
threshold: float = 0.0,
|
threshold: float = 0.0,
|
||||||
periods: int = 1,
|
periods: int = 1,
|
||||||
materials: IntSequence = (0,1)) -> 'Grid':
|
materials: IntSequence = (0,1)) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Create grid from definition of triply-periodic minimal surface.
|
Create grid from definition of triply-periodic minimal surface.
|
||||||
|
|
||||||
|
@ -640,8 +690,8 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
new : damask.Grid
|
new : damask.GeomGrid
|
||||||
Grid-based geometry from definition of minimal surface.
|
GeomGrid-based geometry from definition of minimal surface.
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
-----
|
-----
|
||||||
|
@ -676,7 +726,7 @@ class Grid:
|
||||||
|
|
||||||
>>> import numpy as np
|
>>> import numpy as np
|
||||||
>>> import damask
|
>>> 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
|
cells : 64 × 64 × 64
|
||||||
size : 0.0001 × 0.0001 × 0.0001 m³
|
size : 0.0001 × 0.0001 × 0.0001 m³
|
||||||
origin: 0.0 0.0 0.0 m
|
origin: 0.0 0.0 0.0 m
|
||||||
|
@ -686,7 +736,7 @@ class Grid:
|
||||||
|
|
||||||
>>> import numpy as np
|
>>> import numpy as np
|
||||||
>>> import damask
|
>>> 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))
|
... 'Neovius',materials=(1,5))
|
||||||
cells : 80 × 80 × 80
|
cells : 80 × 80 × 80
|
||||||
size : 0.0005 × 0.0005 × 0.0005 m³
|
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[1])+0.5)/cells[1],
|
||||||
periods*2.0*np.pi*(np.arange(cells[2])+0.5)/cells[2],
|
periods*2.0*np.pi*(np.arange(cells[2])+0.5)/cells[2],
|
||||||
indexing='ij',sparse=True)
|
indexing='ij',sparse=True)
|
||||||
return Grid(material = np.where(threshold < Grid._minimal_surface[surface](x,y,z),materials[1],materials[0]),
|
return GeomGrid(material = np.where(threshold < GeomGrid._minimal_surface[surface](x,y,z),materials[1],materials[0]),
|
||||||
size = size,
|
size = size,
|
||||||
comments = util.execution_stamp('Grid','from_minimal_surface'),
|
comments = util.execution_stamp('GeomGrid','from_minimal_surface'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def save(self,
|
def save(self,
|
||||||
|
@ -778,7 +828,7 @@ class Grid:
|
||||||
def canvas(self,
|
def canvas(self,
|
||||||
cells: Optional[IntSequence] = None,
|
cells: Optional[IntSequence] = None,
|
||||||
offset: Optional[IntSequence] = None,
|
offset: Optional[IntSequence] = None,
|
||||||
fill: Optional[int] = None) -> 'Grid':
|
fill: Optional[int] = None) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Crop or enlarge/pad grid.
|
Crop or enlarge/pad grid.
|
||||||
|
|
||||||
|
@ -795,7 +845,7 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
updated : damask.Grid
|
updated : damask.GeomGrid
|
||||||
Updated grid-based geometry.
|
Updated grid-based geometry.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
|
@ -804,7 +854,7 @@ class Grid:
|
||||||
|
|
||||||
>>> import numpy as np
|
>>> import numpy as np
|
||||||
>>> import damask
|
>>> 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])
|
>>> g.canvas([32,32,16],[0,0,16])
|
||||||
cells: 32 × 32 × 16
|
cells: 32 × 32 × 16
|
||||||
size: 0.001 × 0.001 × 0.0005 m³
|
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]]
|
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,
|
return GeomGrid(material = canvas,
|
||||||
size = self.size/self.cells*np.asarray(canvas.shape),
|
size = self.size/self.cells*np.asarray(canvas.shape),
|
||||||
origin = self.origin+offset_*self.size/self.cells,
|
origin = self.origin+offset_*self.size/self.cells,
|
||||||
comments = self.comments+[util.execution_stamp('Grid','canvas')],
|
comments = self.comments+[util.execution_stamp('GeomGrid','canvas')],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def mirror(self,
|
def mirror(self,
|
||||||
directions: Sequence[str],
|
directions: Sequence[str],
|
||||||
reflect: bool = False) -> 'Grid':
|
reflect: bool = False) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Mirror grid along given directions.
|
Mirror grid along given directions.
|
||||||
|
|
||||||
|
@ -846,7 +896,7 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
updated : damask.Grid
|
updated : damask.GeomGrid
|
||||||
Updated grid-based geometry.
|
Updated grid-based geometry.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
|
@ -855,7 +905,7 @@ class Grid:
|
||||||
|
|
||||||
>>> import numpy as np
|
>>> import numpy as np
|
||||||
>>> import damask
|
>>> 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
|
cells: 4 × 5 × 6
|
||||||
size: 1.0 × 1.0 × 1.0 m³
|
size: 1.0 × 1.0 × 1.0 m³
|
||||||
origin: 0.0 0.0 0.0 m
|
origin: 0.0 0.0 0.0 m
|
||||||
|
@ -893,15 +943,15 @@ class Grid:
|
||||||
if 'z' in directions:
|
if 'z' in directions:
|
||||||
mat = np.concatenate([mat,mat[:,:,limits[0]:limits[1]:-1]],2)
|
mat = np.concatenate([mat,mat[:,:,limits[0]:limits[1]:-1]],2)
|
||||||
|
|
||||||
return Grid(material = mat,
|
return GeomGrid(material = mat,
|
||||||
size = self.size/self.cells*np.asarray(mat.shape),
|
size = self.size/self.cells*np.asarray(mat.shape),
|
||||||
origin = self.origin,
|
origin = self.origin,
|
||||||
comments = self.comments+[util.execution_stamp('Grid','mirror')],
|
comments = self.comments+[util.execution_stamp('GeomGrid','mirror')],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def flip(self,
|
def flip(self,
|
||||||
directions: Sequence[str]) -> 'Grid':
|
directions: Sequence[str]) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Flip grid along given directions.
|
Flip grid along given directions.
|
||||||
|
|
||||||
|
@ -912,7 +962,7 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
updated : damask.Grid
|
updated : damask.GeomGrid
|
||||||
Updated grid-based geometry.
|
Updated grid-based geometry.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
|
@ -921,7 +971,7 @@ class Grid:
|
||||||
|
|
||||||
>>> import numpy as np
|
>>> import numpy as np
|
||||||
>>> import damask
|
>>> 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
|
cells: 4 × 5 × 6
|
||||||
size: 1.0 × 1.0 × 1.0 m³
|
size: 1.0 × 1.0 × 1.0 m³
|
||||||
origin: 0.0 0.0 0.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])
|
mat = np.flip(self.material, [valid.index(d) for d in directions if d in valid])
|
||||||
|
|
||||||
return Grid(material = mat,
|
return GeomGrid(material = mat,
|
||||||
size = self.size,
|
size = self.size,
|
||||||
origin = self.origin,
|
origin = self.origin,
|
||||||
comments = self.comments+[util.execution_stamp('Grid','flip')],
|
comments = self.comments+[util.execution_stamp('GeomGrid','flip')],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def rotate(self,
|
def rotate(self,
|
||||||
R: Rotation,
|
R: Rotation,
|
||||||
fill: Optional[int] = None) -> 'Grid':
|
fill: Optional[int] = None) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Rotate grid (possibly extending its bounding box).
|
Rotate grid (possibly extending its bounding box).
|
||||||
|
|
||||||
|
@ -963,7 +1013,7 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
updated : damask.Grid
|
updated : damask.GeomGrid
|
||||||
Updated grid-based geometry.
|
Updated grid-based geometry.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
|
@ -972,7 +1022,7 @@ class Grid:
|
||||||
|
|
||||||
>>> import numpy as np
|
>>> import numpy as np
|
||||||
>>> import damask
|
>>> 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
|
cells: 4 × 5 × 6
|
||||||
size: 1.0 × 1.0 × 1.0 m³
|
size: 1.0 × 1.0 × 1.0 m³
|
||||||
origin: 0.0 0.0 0.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
|
origin = self.origin-(np.asarray(material.shape)-self.cells)*.5 * self.size/self.cells
|
||||||
|
|
||||||
return Grid(material = material,
|
return GeomGrid(material = material,
|
||||||
size = self.size/self.cells*np.asarray(material.shape),
|
size = self.size/self.cells*np.asarray(material.shape),
|
||||||
origin = origin,
|
origin = origin,
|
||||||
comments = self.comments+[util.execution_stamp('Grid','rotate')],
|
comments = self.comments+[util.execution_stamp('GeomGrid','rotate')],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def scale(self,
|
def scale(self,
|
||||||
cells: IntSequence) -> 'Grid':
|
cells: IntSequence) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Scale grid to new cell counts.
|
Scale grid to new cell counts.
|
||||||
|
|
||||||
|
@ -1013,7 +1063,7 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
updated : damask.Grid
|
updated : damask.GeomGrid
|
||||||
Updated grid-based geometry.
|
Updated grid-based geometry.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
|
@ -1022,7 +1072,7 @@ class Grid:
|
||||||
|
|
||||||
>>> import numpy as np
|
>>> import numpy as np
|
||||||
>>> import damask
|
>>> 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
|
cells: 32 × 32 × 32
|
||||||
size: 0.0001 × 0.0001 × 0.0001 m³
|
size: 0.0001 × 0.0001 × 0.0001 m³
|
||||||
origin: 0.0 0.0 0.0 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)
|
points=orig,method='nearest',bounds_error=False,fill_value=None)
|
||||||
new = grid_filters.coordinates0_point(cells,self.size,self.origin)
|
new = grid_filters.coordinates0_point(cells,self.size,self.origin)
|
||||||
|
|
||||||
return Grid(material = interpolator(values=self.material)(new).astype(int),
|
return GeomGrid(material = interpolator(values=self.material)(new).astype(int),
|
||||||
size = self.size,
|
size = self.size,
|
||||||
origin = self.origin,
|
origin = self.origin,
|
||||||
initial_conditions = {k: interpolator(values=v)(new)
|
initial_conditions = {k: interpolator(values=v)(new)
|
||||||
for k,v in self.initial_conditions.items()},
|
for k,v in self.initial_conditions.items()},
|
||||||
comments = self.comments+[util.execution_stamp('Grid','scale')],
|
comments = self.comments+[util.execution_stamp('GeomGrid','scale')],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def assemble(self,
|
def assemble(self,
|
||||||
idx: np.ndarray) -> 'Grid':
|
idx: np.ndarray) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Assemble new grid from index map.
|
Assemble new grid from index map.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
idx : numpy.ndarray of int, shape (:,:,:) or (:,:,:,3)
|
idx : numpy.ndarray of int, shape (:,:,:) or (:,:,:,3)
|
||||||
Grid of flat indices or coordinate indices.
|
GeomGrid of flat indices or coordinate indices.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
updated : damask.Grid
|
updated : damask.GeomGrid
|
||||||
Updated grid-based geometry.
|
Updated grid-based geometry.
|
||||||
Cell count of resulting grid matches shape of index map.
|
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')
|
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()}
|
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'),
|
return GeomGrid(material = self.material.flatten(order='F')[flat].reshape(cells,order='F'),
|
||||||
size = self.size,
|
size = self.size,
|
||||||
origin = self.origin,
|
origin = self.origin,
|
||||||
initial_conditions = ic,
|
initial_conditions = ic,
|
||||||
comments = self.comments+[util.execution_stamp('Grid','assemble')],
|
comments = self.comments+[util.execution_stamp('GeomGrid','assemble')],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def renumber(self) -> 'Grid':
|
def renumber(self) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Renumber sorted material indices as 0,...,N-1.
|
Renumber sorted material indices as 0,...,N-1.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
updated : damask.Grid
|
updated : damask.GeomGrid
|
||||||
Updated grid-based geometry.
|
Updated grid-based geometry.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
_,renumbered = np.unique(self.material,return_inverse=True)
|
_,renumbered = np.unique(self.material,return_inverse=True)
|
||||||
|
|
||||||
return Grid(material = renumbered.reshape(self.cells),
|
return GeomGrid(material = renumbered.reshape(self.cells),
|
||||||
size = self.size,
|
size = self.size,
|
||||||
origin = self.origin,
|
origin = self.origin,
|
||||||
initial_conditions = self.initial_conditions,
|
initial_conditions = self.initial_conditions,
|
||||||
comments = self.comments+[util.execution_stamp('Grid','renumber')],
|
comments = self.comments+[util.execution_stamp('GeomGrid','renumber')],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def substitute(self,
|
def substitute(self,
|
||||||
from_material: Union[int,IntSequence],
|
from_material: Union[int,IntSequence],
|
||||||
to_material: Union[int,IntSequence]) -> 'Grid':
|
to_material: Union[int,IntSequence]) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Substitute material indices.
|
Substitute material indices.
|
||||||
|
|
||||||
|
@ -1113,7 +1163,7 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
updated : damask.Grid
|
updated : damask.GeomGrid
|
||||||
Updated grid-based geometry.
|
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
|
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
|
material[self.material==f] = t
|
||||||
|
|
||||||
return Grid(material = material,
|
return GeomGrid(material = material,
|
||||||
size = self.size,
|
size = self.size,
|
||||||
origin = self.origin,
|
origin = self.origin,
|
||||||
initial_conditions = self.initial_conditions,
|
initial_conditions = self.initial_conditions,
|
||||||
comments = self.comments+[util.execution_stamp('Grid','substitute')],
|
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).
|
Sort material indices such that min(material ID) is located at (0,0,0).
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
updated : damask.Grid
|
updated : damask.GeomGrid
|
||||||
Updated grid-based geometry.
|
Updated grid-based geometry.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -1145,12 +1195,12 @@ class Grid:
|
||||||
sort_idx = np.argsort(from_ma)
|
sort_idx = np.argsort(from_ma)
|
||||||
ma = np.unique(a)[sort_idx][np.searchsorted(from_ma,a,sorter = sort_idx)]
|
ma = np.unique(a)[sort_idx][np.searchsorted(from_ma,a,sorter = sort_idx)]
|
||||||
|
|
||||||
return Grid(material = ma.reshape(self.cells,order='F'),
|
return GeomGrid(material = ma.reshape(self.cells,order='F'),
|
||||||
size = self.size,
|
size = self.size,
|
||||||
origin = self.origin,
|
origin = self.origin,
|
||||||
initial_conditions = self.initial_conditions,
|
initial_conditions = self.initial_conditions,
|
||||||
comments = self.comments+[util.execution_stamp('Grid','sort')],
|
comments = self.comments+[util.execution_stamp('GeomGrid','sort')],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def clean(self,
|
def clean(self,
|
||||||
|
@ -1158,7 +1208,7 @@ class Grid:
|
||||||
selection: Optional[IntSequence] = None,
|
selection: Optional[IntSequence] = None,
|
||||||
invert_selection: bool = False,
|
invert_selection: bool = False,
|
||||||
periodic: bool = True,
|
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.
|
Smooth grid by selecting most frequent material ID within given stencil at each location.
|
||||||
|
|
||||||
|
@ -1179,7 +1229,7 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
updated : damask.Grid
|
updated : damask.GeomGrid
|
||||||
Updated grid-based geometry.
|
Updated grid-based geometry.
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
|
@ -1213,12 +1263,12 @@ class Grid:
|
||||||
mode='wrap' if periodic else 'nearest',
|
mode='wrap' if periodic else 'nearest',
|
||||||
extra_keywords=dict(selection=selection_,rng=rng),
|
extra_keywords=dict(selection=selection_,rng=rng),
|
||||||
).astype(self.material.dtype)
|
).astype(self.material.dtype)
|
||||||
return Grid(material = material,
|
return GeomGrid(material = material,
|
||||||
size = self.size,
|
size = self.size,
|
||||||
origin = self.origin,
|
origin = self.origin,
|
||||||
initial_conditions = self.initial_conditions,
|
initial_conditions = self.initial_conditions,
|
||||||
comments = self.comments+[util.execution_stamp('Grid','clean')],
|
comments = self.comments+[util.execution_stamp('GeomGrid','clean')],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def add_primitive(self,
|
def add_primitive(self,
|
||||||
|
@ -1228,7 +1278,7 @@ class Grid:
|
||||||
fill: Optional[int] = None,
|
fill: Optional[int] = None,
|
||||||
R: Rotation = Rotation(),
|
R: Rotation = Rotation(),
|
||||||
inverse: bool = False,
|
inverse: bool = False,
|
||||||
periodic: bool = True) -> 'Grid':
|
periodic: bool = True) -> 'GeomGrid':
|
||||||
"""
|
"""
|
||||||
Insert a primitive geometric object at a given position.
|
Insert a primitive geometric object at a given position.
|
||||||
|
|
||||||
|
@ -1258,7 +1308,7 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
updated : damask.Grid
|
updated : damask.GeomGrid
|
||||||
Updated grid-based geometry.
|
Updated grid-based geometry.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
|
@ -1267,7 +1317,7 @@ class Grid:
|
||||||
|
|
||||||
>>> import numpy as np
|
>>> import numpy as np
|
||||||
>>> import damask
|
>>> 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)
|
>>> g.add_primitive(np.ones(3)*5e-5,np.ones(3)*5e-5,1)
|
||||||
cells : 64 × 64 × 64
|
cells : 64 × 64 × 64
|
||||||
size : 0.0001 × 0.0001 × 0.0001 m³
|
size : 0.0001 × 0.0001 × 0.0001 m³
|
||||||
|
@ -1278,7 +1328,7 @@ class Grid:
|
||||||
|
|
||||||
>>> import numpy as np
|
>>> import numpy as np
|
||||||
>>> import damask
|
>>> 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)
|
>>> g.add_primitive(np.ones(3,int)*32,np.zeros(3),np.inf)
|
||||||
cells : 64 × 64 × 64
|
cells : 64 × 64 × 64
|
||||||
size : 0.0001 × 0.0001 × 0.0001 m³
|
size : 0.0001 × 0.0001 × 0.0001 m³
|
||||||
|
@ -1304,14 +1354,14 @@ class Grid:
|
||||||
if periodic: # translate back to center
|
if periodic: # translate back to center
|
||||||
mask = np.roll(mask,((c/self.size-0.5)*self.cells).round().astype(np.int64),(0,1,2))
|
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,
|
self.material,
|
||||||
np.nanmax(self.material)+1 if fill is None else fill),
|
np.nanmax(self.material)+1 if fill is None else fill),
|
||||||
size = self.size,
|
size = self.size,
|
||||||
origin = self.origin,
|
origin = self.origin,
|
||||||
initial_conditions = self.initial_conditions,
|
initial_conditions = self.initial_conditions,
|
||||||
comments = self.comments+[util.execution_stamp('Grid','add_primitive')],
|
comments = self.comments+[util.execution_stamp('GeomGrid','add_primitive')],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def vicinity_offset(self,
|
def vicinity_offset(self,
|
||||||
|
@ -1319,7 +1369,7 @@ class Grid:
|
||||||
offset: Optional[int] = None,
|
offset: Optional[int] = None,
|
||||||
selection: Optional[IntSequence] = None,
|
selection: Optional[IntSequence] = None,
|
||||||
invert_selection: bool = False,
|
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.
|
Offset material ID of points in the vicinity of selected (or just other) material IDs.
|
||||||
|
|
||||||
|
@ -1345,7 +1395,7 @@ class Grid:
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
updated : damask.Grid
|
updated : damask.GeomGrid
|
||||||
Updated grid-based geometry.
|
Updated grid-based geometry.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -1377,12 +1427,12 @@ class Grid:
|
||||||
extra_keywords=dict(selection=selection_),
|
extra_keywords=dict(selection=selection_),
|
||||||
)
|
)
|
||||||
|
|
||||||
return Grid(material = np.where(mask, self.material + offset_,self.material),
|
return GeomGrid(material = np.where(mask, self.material + offset_,self.material),
|
||||||
size = self.size,
|
size = self.size,
|
||||||
origin = self.origin,
|
origin = self.origin,
|
||||||
initial_conditions = self.initial_conditions,
|
initial_conditions = self.initial_conditions,
|
||||||
comments = self.comments+[util.execution_stamp('Grid','vicinity_offset')],
|
comments = self.comments+[util.execution_stamp('GeomGrid','vicinity_offset')],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_grain_boundaries(self,
|
def get_grain_boundaries(self,
|
|
@ -240,13 +240,6 @@ class Orientation(Rotation,Crystal):
|
||||||
return self.copy(Rotation(self.quaternion)*Rotation(other.quaternion))
|
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
|
@classmethod
|
||||||
@util.extend_docstring(Rotation.from_quaternion,
|
@util.extend_docstring(Rotation.from_quaternion,
|
||||||
adopted_parameters=Crystal.__init__)
|
adopted_parameters=Crystal.__init__)
|
||||||
|
@ -282,6 +275,13 @@ class Orientation(Rotation,Crystal):
|
||||||
def from_matrix(cls, **kwargs) -> 'Orientation':
|
def from_matrix(cls, **kwargs) -> 'Orientation':
|
||||||
return cls(**kwargs)
|
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
|
@classmethod
|
||||||
@util.extend_docstring(Rotation.from_Rodrigues_vector,
|
@util.extend_docstring(Rotation.from_Rodrigues_vector,
|
||||||
adopted_parameters=Crystal.__init__)
|
adopted_parameters=Crystal.__init__)
|
||||||
|
@ -303,6 +303,20 @@ class Orientation(Rotation,Crystal):
|
||||||
def from_cubochoric(cls, **kwargs) -> 'Orientation':
|
def from_cubochoric(cls, **kwargs) -> 'Orientation':
|
||||||
return cls(**kwargs)
|
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
|
@classmethod
|
||||||
@util.extend_docstring(Rotation.from_spherical_component,
|
@util.extend_docstring(Rotation.from_spherical_component,
|
||||||
adopted_parameters=Crystal.__init__)
|
adopted_parameters=Crystal.__init__)
|
||||||
|
@ -325,7 +339,7 @@ class Orientation(Rotation,Crystal):
|
||||||
hkl: FloatSequence,
|
hkl: FloatSequence,
|
||||||
**kwargs) -> 'Orientation':
|
**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
|
Parameters
|
||||||
----------
|
----------
|
||||||
|
@ -855,7 +869,8 @@ class Orientation(Rotation,Crystal):
|
||||||
|
|
||||||
|
|
||||||
def related(self: MyType,
|
def related(self: MyType,
|
||||||
model: str) -> MyType:
|
model: str,
|
||||||
|
target = None) -> MyType:
|
||||||
"""
|
"""
|
||||||
All orientations related to self by given relationship model.
|
All orientations related to self by given relationship model.
|
||||||
|
|
||||||
|
@ -863,6 +878,10 @@ class Orientation(Rotation,Crystal):
|
||||||
----------
|
----------
|
||||||
model : str
|
model : str
|
||||||
Orientation relationship model selected from self.orientation_relationships.
|
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
|
Returns
|
||||||
-------
|
-------
|
||||||
|
@ -890,11 +909,10 @@ class Orientation(Rotation,Crystal):
|
||||||
[0.924 0.000 0.000 0.383]]
|
[0.924 0.000 0.000 0.383]]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
lattice,o = self.relation_operations(model)
|
lattice,o = self.relation_operations(model,target)
|
||||||
target = Crystal(lattice=lattice)
|
target = Crystal(lattice=lattice) if target is None else target
|
||||||
o = o.broadcast_to(o.shape+self.shape,mode='right')
|
|
||||||
|
|
||||||
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,
|
lattice=lattice,
|
||||||
b = self.b if target.ratio['b'] is None else self.a*target.ratio['b'],
|
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'],
|
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.
|
Test equality of other.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
other : Table
|
||||||
|
Table to check for equality.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return NotImplemented if not isinstance(other,Table) else \
|
return NotImplemented if not isinstance(other,Table) else \
|
||||||
self.shapes == other.shapes and self.data.equals(other.data)
|
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]]
|
IntSequence = Union[np.ndarray,Sequence[int]]
|
||||||
StrSequence = Union[np.ndarray,Sequence[str]]
|
StrSequence = Union[np.ndarray,Sequence[str]]
|
||||||
FileHandle = Union[TextIO, str, Path]
|
FileHandle = Union[TextIO, str, Path]
|
||||||
CrystalFamily = Union[None,Literal['triclinic', 'monoclinic', 'orthorhombic', 'tetragonal', 'hexagonal', 'cubic']]
|
CrystalFamily = Literal['triclinic', 'monoclinic', 'orthorhombic', 'tetragonal', 'hexagonal', 'cubic']
|
||||||
BravaisLattice = Union[None,Literal['aP', 'mP', 'mS', 'oP', 'oS', 'oI', 'oF', 'tP', 'tI', 'hP', 'cP', 'cI', 'cF']]
|
BravaisLattice = Literal['aP', 'mP', 'mS', 'oP', 'oS', 'oI', 'oF', 'tP', 'tI', 'hP', 'cP', 'cI', 'cF']
|
||||||
CrystalKinematics = Literal['slip', 'twin']
|
CrystalKinematics = Literal['slip', 'twin']
|
||||||
NumpyRngSeed = Union[int, IntSequence, np.random.SeedSequence, np.random.Generator]
|
NumpyRngSeed = Union[int, IntSequence, np.random.SeedSequence, np.random.Generator]
|
||||||
# BitGenerator does not exists in older numpy versions
|
# BitGenerator does not exists in older numpy versions
|
||||||
|
|
|
@ -457,7 +457,7 @@ class VTK:
|
||||||
data: Union[None, np.ndarray, np.ma.MaskedArray] = None,
|
data: Union[None, np.ndarray, np.ma.MaskedArray] = None,
|
||||||
info: Optional[str] = None,
|
info: Optional[str] = None,
|
||||||
*,
|
*,
|
||||||
table: Optional['Table'] = None):
|
table: Optional['Table'] = None) -> 'VTK':
|
||||||
"""
|
"""
|
||||||
Add new or replace existing point or cell data.
|
Add new or replace existing point or cell data.
|
||||||
|
|
||||||
|
@ -534,7 +534,6 @@ class VTK:
|
||||||
else:
|
else:
|
||||||
raise TypeError
|
raise TypeError
|
||||||
|
|
||||||
|
|
||||||
return dup
|
return dup
|
||||||
|
|
||||||
|
|
||||||
|
@ -559,20 +558,18 @@ class VTK:
|
||||||
|
|
||||||
"""
|
"""
|
||||||
cell_data = self.vtk_data.GetCellData()
|
cell_data = self.vtk_data.GetCellData()
|
||||||
for a in range(cell_data.GetNumberOfArrays()):
|
if label in [cell_data.GetArrayName(a) for a in range(cell_data.GetNumberOfArrays())]:
|
||||||
if cell_data.GetArrayName(a) == label:
|
try:
|
||||||
try:
|
return vtk_to_numpy(cell_data.GetArray(label))
|
||||||
return vtk_to_numpy(cell_data.GetArray(a))
|
except AttributeError:
|
||||||
except AttributeError:
|
vtk_array = cell_data.GetAbstractArray(label) # string array
|
||||||
vtk_array = cell_data.GetAbstractArray(a) # string array
|
|
||||||
|
|
||||||
point_data = self.vtk_data.GetPointData()
|
point_data = self.vtk_data.GetPointData()
|
||||||
for a in range(point_data.GetNumberOfArrays()):
|
if label in [point_data.GetArrayName(a) for a in range(point_data.GetNumberOfArrays())]:
|
||||||
if point_data.GetArrayName(a) == label:
|
try:
|
||||||
try:
|
return vtk_to_numpy(point_data.GetArray(label))
|
||||||
return vtk_to_numpy(point_data.GetArray(a))
|
except AttributeError:
|
||||||
except AttributeError:
|
vtk_array = point_data.GetAbstractArray(label) # string array
|
||||||
vtk_array = point_data.GetAbstractArray(a) # string array
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# string array
|
# string array
|
||||||
|
@ -581,6 +578,41 @@ class VTK:
|
||||||
raise KeyError(f'array "{label}" not found')
|
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,
|
def show(self,
|
||||||
label: Optional[str] = None,
|
label: Optional[str] = None,
|
||||||
colormap: Union[Colormap, str] = 'cividis'):
|
colormap: Union[Colormap, str] = 'cividis'):
|
||||||
|
|
|
@ -116,7 +116,7 @@ def from_grid(grid,
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
grid : damask.Grid
|
grid : damask.GeomGrid
|
||||||
Grid from which the material IDs are used as seeds.
|
Grid from which the material IDs are used as seeds.
|
||||||
selection : (sequence of) int, optional
|
selection : (sequence of) int, optional
|
||||||
Material IDs to consider.
|
Material IDs to consider.
|
||||||
|
@ -134,6 +134,12 @@ def from_grid(grid,
|
||||||
coords, materials : numpy.ndarray, shape (:,3); numpy.ndarray, shape (:)
|
coords, materials : numpy.ndarray, shape (:,3); numpy.ndarray, shape (:)
|
||||||
Seed coordinates in 3D space, material IDs.
|
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
|
Examples
|
||||||
--------
|
--------
|
||||||
Recreate seeds from Voronoi tessellation.
|
Recreate seeds from Voronoi tessellation.
|
||||||
|
@ -142,7 +148,7 @@ def from_grid(grid,
|
||||||
>>> import scipy.spatial
|
>>> import scipy.spatial
|
||||||
>>> import damask
|
>>> import damask
|
||||||
>>> seeds = damask.seeds.from_random(np.ones(3),29,[128]*3)
|
>>> 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
|
cells: 128 × 128 × 128
|
||||||
size: 1.0 × 1.0 × 1.0 m³
|
size: 1.0 × 1.0 × 1.0 m³
|
||||||
origin: 0.0 0.0 0.0 m
|
origin: 0.0 0.0 0.0 m
|
||||||
|
@ -166,8 +172,8 @@ def from_grid(grid,
|
||||||
materials = _np.unique(material[mask])
|
materials = _np.unique(material[mask])
|
||||||
coords_ = _np.zeros((materials.size,3),dtype=float)
|
coords_ = _np.zeros((materials.size,3),dtype=float)
|
||||||
for i,mat in enumerate(materials):
|
for i,mat in enumerate(materials):
|
||||||
pc = (2*_np.pi*coords[material[:,0]==mat,:]-grid.origin)/grid.size
|
pc = 2*_np.pi*coords[material[:,0]==mat,:]/grid.size
|
||||||
coords_[i] = grid.origin + grid.size / 2 / _np.pi * (_np.pi +
|
coords_[i] = grid.size / 2 / _np.pi * (_np.pi +
|
||||||
_np.arctan2(-_np.average(_np.sin(pc),axis=0),
|
_np.arctan2(-_np.average(_np.sin(pc),axis=0),
|
||||||
-_np.average(_np.cos(pc),axis=0))) \
|
-_np.average(_np.cos(pc),axis=0))) \
|
||||||
if periodic else \
|
if periodic else \
|
||||||
|
|
|
@ -4,7 +4,7 @@ import re
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Literal
|
from typing import Literal
|
||||||
|
|
||||||
_marc_version = '2023.1'
|
_marc_version = '2023.3'
|
||||||
_marc_root = '/opt/msc'
|
_marc_root = '/opt/msc'
|
||||||
_damask_root = str(Path(__file__).parents[3])
|
_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