DynEMol: tools for studying Dynamics of Electrons in Molecules
lgcrego / dynemol Goto Github PK
View Code? Open in Web Editor NEWDynEMol: tools for studying Dynamics of Electrons in Molecules
DynEMol: tools for studying Dynamics of Electrons in Molecules
What version of the Intel compiler are you using?
If I use the Intel 2013 suite, it complains about not understanding MPI_Ibcast, presumably because it does not support MPI version 3:
mpiifort -xHost -ip -fpp -I/apps/intelics/2013.1.039/composer_xe_2013_sp1.0.080/mkl/include/intel64/lp64 -I/apps/intelics/2013.1.039/composer_xe_2013_sp1.0.080/mkl/include/fftw -static-intel\
-lmpi -L /apps/intelics/2013.1.039/impi/4.1.1.036/intel64/lib -o a integ-Coul.o Coul0sim.o m2caux3-Coul.o abcpes-Coul.o ckplm-Coul.o util-Coul.o constants_m.o Matrix_math.o exec_time.o type\
s_EHT.o types_MM.o parameters.o MPI_defs.o OPT_parent.o parameters_MM.o allocation_m.o util.o EHT_input.o tuning.o IdentifyNonBonded.o babel_routines.o babel.o gmx2mdflex.o namd2mdflex.o str\
ucture.o md_read.o md_setup.o f_intra.o f_inter.o md_output.o pbc.o overlap_D.o Ehrenfest.o diabatic-Ehren.o HuckelForces.o STO.o multip_routines.o electron_hole_DP.o LCMO_Builder.o FMO.o DP\
_main.o td_dp.o DP_FMO.o dipole_phi.o Coulomb.o polarizability.o CoulInt_QMMM.o QCModel_Huckel.o QCModel_ElHl.o AlphaPolar.o data_output.o backup_MM.o Berendsen.o NoseHoover.o NoseHoover_Rev\
ersible.o NVE.o VDOS_m.o MM_dynamics.o MM_driver.o film_STO.o DOS_m.o oscillator.o ga_QCModel.o cost_tuning_EH.o cost_tuning_MM.o nonlinearCG.o CG_class.o MM_ERG_class.o nonlinear-sidekick.o\
FF_OPT_class.o CG_EH_driver.o ga_routines.o CG_MM_driver.o vibes_driver.o solvated_M.o DOS_tool.o backup.o auto_correlation.o ElHl_schroedinger.o diagnostic.o qdynamics.o Chebyshev.o Taylor\
.o ElHl_Chebyshev_GPU.o ElHl_Chebyshev.o AO_adiabatic.o ElHl_adiabatic.o Chebyshev_driver.o eigen_driver.o ga_driver.o avrg_confgs.o main.o GPU_Interface.o Taylor_gpu.o -lmkl_blas95_lp64 -\
lmkl_lapack95_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lrt
diabatic-Ehren.o: In function `diabaticehrenfest_builder_mp_diabatic_ehrenfest_':
diabatic-Ehren.f:(.text+0x1c3d): undefined reference to `mpi_ibcast_'
ElHl_Chebyshev.o: In function `elhl_chebyshev_m_mp_elhl_chebyshev_':
ElHl_Chebyshev.f:(.text+0x3ad7): undefined reference to `mpi_ibcast_'
ElHl_Chebyshev.f:(.text+0x3b0f): undefined reference to `mpi_ibcast_'
ElHl_Chebyshev.f:(.text+0x42f3): undefined reference to `mpi_ibcast_'
ElHl_Chebyshev.f:(.text+0x5f47): undefined reference to `mpi_ibcast_'
make: *** [a] Error 1
... but if I use Intel 2016 or 2017 I get this error:
mpiifort -xHost -ip -fpp -O2 -align -fopenmp -parallel -free -I/apps2/intelics/2017/compilers_and_libraries_2017.0.098/linux/mkl/include/intel64/lp64 -I/apps2/intelics/2017/compilers_and_li\
braries_2017.0.098/linux/mkl/include/fftw -c DP_main.f
DP_main.f(340): error #8807: An OpenMP* directive may not appear in a PURE procedure.
!$OMP parallel
------^
DP_main.f(341): error #8807: An OpenMP* directive may not appear in a PURE procedure.
!$OMP single
------^
DP_main.f(343): error #8807: An OpenMP* directive may not appear in a PURE procedure.
!$OMP task untied
------^
DP_main.f(349): error #8807: An OpenMP* directive may not appear in a PURE procedure.
!$OMP end task
------^
DP_main.f(351): error #8807: An OpenMP* directive may not appear in a PURE procedure.
!$OMP end single
------^
DP_main.f(352): error #8807: An OpenMP* directive may not appear in a PURE procedure.
!$OMP end parallel
------^
compilation aborted for DP_main.f (code 1)
make: *** [DP_main.o] Error 1
I don't edit your makefile
but I override some of the variables from the command line like so:
# Re-use the ifort flags defined in the makefile.
#
# 1) Use Intel mpiifort instead of GNU mpif90.
# 2) For our older version of 2013 ifort, replace -qopenmp with -fopenmp.
make \
FC="mpiifort -xHost -ip -fpp" \
FFLAGS2='-O2 -align -fopenmp -parallel $(FREE) $(SAFE)' \
CFLAGS='-O2 -align -xHost -ip -fopenmp -fno-exceptions -restrict $(SAFE_CXX)' \
LDFLAGS='-static-intel' # -lmpi -L /apps/intelics/2013.1.039/impi/4.1.1.036/intel64/lib'
Currently DynEMol makes the assumption that certain files are in the current working directory such as env.sh
, various *.dat
files, etc.
I was wondering if you folks would be interested in allowing multiple users to use DynEMol from a read-only shared installation directory without each user having to compile and install DynEMol?
The reason I ask is I have been trying to make it easy for anyone to compile and install DynEMol from source using Lawrence Livermore's spack project. The project will automatically compile and install all dependencies from source and allows multiple versions to be installed concurrently. This makes it possible for HPC users to not have to rely on their administrators to compile software, create module files, etc:
$ spack spec dynemol # show associated dependencies intel-mkl and intel-mpi
Input spec
--------------------------------
dynemol
Concretized
--------------------------------
dynemol@18d7aa2fcc5b9af174af1a5e313644ac3c77bf6b%[email protected]~cuda arch=linux-rhel6-x86_64
^[email protected]%[email protected]+ilp64+shared threads=openmp arch=linux-rhel6-x86_64
^[email protected]%[email protected] arch=linux-rhel6-x86_64
So far I have created the installation package, but because DynEMol directly tries to run ./env.sh
ouside of the source directory, it fails:
$ spack load dynemol # load the installed dynemol package
$ dynemol # run dynemol
Using only CPU
sh: ./env.sh: No such file or directory
forrtl: No such file or directory
forrtl: severe (29): file not found, unit 3, file /shared/admin/sw-src/rhel6/dynemol/18d7aa2/spack/my_eht_parameters.dat
Image PC Routine Line Source
dynemol 00000000006B69C9 Unknown Unknown Unknown
dynemol 00000000006CCF12 Unknown Unknown Unknown
dynemol 00000000004B1BB3 Unknown Unknown Unknown
dynemol 000000000069F15A Unknown Unknown Unknown
dynemol 0000000000405D5E Unknown Unknown Unknown
libc.so.6 00000037A861ED1D Unknown Unknown Unknown
dynemol 0000000000405BE9 Unknown Unknown Unknown
The makefile
has no install rule, so I manually create the installation prefix, What I need your help with is understanding the purpose of all associated data files and scripts. As far as I can tell, these are the non-source files:
$ find -type f -not -iregex '.*\(f\|f90\|cu\|inc\|cpp\|[.]h\|makefile\|[.]fi\|[.]bsh\|[.]md\|gitignore\)$' -exec file {} + | sort
./atomic_mass.dat: ASCII text
./casida-input.dat: ASCII text
./env.sh: Bourne-Again shell script text executable
./input-GA.dat: ASCII text
./IO_file_formats: ASCII text
./IO_file_MM-formats: UTF-8 Unicode English text
./my_eht_parameters.dat: FORTRAN program
./opt_eht_parameters.input.dat: FORTRAN program
./script-vmd: ASCII text
Based on my limited understanding of what the input files are and what the read-only reference files are, following the recommendations of man 7 hier
maybe the installation directory should look something like this?
$ spack cd --install-dir dynemol
$ tree -F
.
├── bin/
│ ├── dynemol*
│ └── dynemol_setup* # renamed from env.sh
└── share/
├── doc/
│ └── dynemol/
│ ├── manual.pdf
│ └── README.md
└── dynemol/
├── data/ # read-only files needed by dynemol
│ ├── atomic_mass.dat
│ ├── IO_file_formats
│ └── IO_file_MM-formats
└── input/ # writable files to be coped to the user's current working directory
├── casida-input.dat
├── input-GA.dat
├── my_eht_parameters.dat
├── opt_eht_parameters.input.dat
└── script-vmd
7 directories, 12 files
Are my guesses of what the input/
files are that should be in the user's directory correct and the data/
read-only files for DynEMol correct?
Note that the env.sh
file has been renamed to dynemol_setup
so that it can be run globally. If DynEMol has a missing file it could say "run dynemol_setup to create input files".
Here is the spack package script I have been working on:
https://github.com/UConn-HPC/spack/blob/bcbdf86136910dc089f4c3794de730496d5e2550/var/spack/repos/builtin/packages/dynemol/package.py
To fully reproduce the setup you could run:
git clone https://github.com/UConn-HPC/spack.git -b package/dynemol
source spack/share/spack/setup-env.sh
# Create the spack.yaml file in this directory from the file below, edit paths to Intel compiler
spack concretize --force
spack install --verbose dynemol
spack load dynemol
dynemol
spack cd --install-dir dynemol
tree -F
Here is my spack.yaml
environment file:
# This is a Spack Environment file.
#
# It describes a set of packages to be installed, along with
# configuration settings.
spack:
specs: [dynemol]
view: false
packages:
intel-mkl:
buildable: false
paths:
[email protected] +ilp64 threads=openmp: /apps2/intelics/2016.1-full-gcc/parallel_studio_xe_2016.1.056/compilers_and_libraries_2016/linux
intel-mpi:
buildable: false
paths:
[email protected]: /apps2/intelics/2016.1-full-gcc/parallel_studio_xe_2016.1.056/compilers_and_libraries_2016/linux/mpi
all:
compiler: [[email protected]]
providers:
blas: [intel-mkl]
lapack: [intel-mkl]
mkl: [intel-mkl]
mpi: [intel-mpi]
compilers:
- compiler:
operating_system: rhel6
paths:
cc: /apps2/intelics/2016.1-full-gcc/bin/icc
cxx: /apps2/intelics/2016.1-full-gcc/bin/icpc
f77: /apps2/intelics/2016.1-full-gcc/bin/ifort
fc: /apps2/intelics/2016.1-full-gcc/bin/ifort
spec: [email protected]
target: x86_64
modules: []
The installation with --verbose
turned off should look similar to this;
$ spack install dynemol
==> [email protected] : externally installed in /apps2/intelics/2016.1-full-gcc/parallel_studio_xe_2016.1.056/compilers_and_libraries_2016/linux
==> [email protected] : already registered in DB
==> [email protected] : externally installed in /apps2/intelics/2016.1-full-gcc/parallel_studio_xe_2016.1.056/compilers_and_libraries_2016/linux/mpi
==> [email protected] : already registered in DB
==> Installing dynemol
==> Searching for binary cache of dynemol
==> Warning: No Spack mirrors are currently configured
==> No binary for dynemol found: installing from source
==> Using cached archive: /shared/admin/sw-src/rhel6/dynemol/18d7aa2/spack/var/spack/cache/dynemol/dynemol-18d7aa2fcc5b9af174af1a5e313644ac3c77bf6b
.tar.gz
==> Staging archive: /shared/admin/sw-src/rhel6/dynemol/18d7aa2/spack/var/spack/stage/dynemol-18d7aa2fcc5b9af174af1a5e313644ac3c77bf6b-mf3lejctlhre
stvuhlzgnyuvvcdd4hs4/18d7aa2fcc5b9af174af1a5e313644ac3c77bf6b
==> Created stage in /shared/admin/sw-src/rhel6/dynemol/18d7aa2/spack/var/spack/stage/dynemol-18d7aa2fcc5b9af174af1a5e313644ac3c77bf6b-mf3lejctlhre
stvuhlzgnyuvvcdd4hs4
==> Ran patch() for dynemol
==> Building dynemol [MakefilePackage]
==> Executing phase: 'edit'
==> Executing phase: 'build'
==> Executing phase: 'install'
==> Successfully installed dynemol
Fetch: 0.13s. Build: 3m 24.68s. Total: 3m 24.81s.
[+] /shared/admin/sw-src/rhel6/dynemol/18d7aa2/spack/opt/spack/linux-rhel6-x86_64/intel-16.1/dynemol-18d7aa2fcc5b9af174af1a5e313644ac3c77bf6b-mf3le
jctlhrestvuhlzgnyuvvcdd4hs4
I suggest adding topics such as chemistry
in the About section at https://github.com/lgcrego/Dynemol
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.