Code Monkey home page Code Monkey logo

dynemol's Introduction

Dynemol

DynEMol: tools for studying Dynamics of Electrons in Molecules

dynemol's People

Contributors

albertotrj avatar lgcrego avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

dynemol's Issues

DP_main.f(340): error #8807: An OpenMP* directive may not appear in a PURE procedure.

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'

Proposal to allow multi-user installations

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

Current behavior

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

Proposed solution

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".

Spack 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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.