diff --git a/docs/source/users_guide/qp_export_as_tgz.rst b/docs/source/users_guide/qp_export_as_tgz.rst new file mode 100644 index 00000000..1333ed77 --- /dev/null +++ b/docs/source/users_guide/qp_export_as_tgz.rst @@ -0,0 +1 @@ +TODO diff --git a/scripts/qp_export_as_tgz.sh b/scripts/qp_export_as_tgz similarity index 60% rename from scripts/qp_export_as_tgz.sh rename to scripts/qp_export_as_tgz index 8fd3e40e..72371ef6 100755 --- a/scripts/qp_export_as_tgz.sh +++ b/scripts/qp_export_as_tgz @@ -2,7 +2,7 @@ # # Creates a self-contained binary distribution in the form of a tar.gz file # -# Tue Jan 13 14:06:25 CET 2015 +# Mon Nov 26 22:57:50 CET 2018 # @@ -20,14 +20,10 @@ if [[ -f quantum_package.rc \ && -d src \ && -d bin \ && -d ocaml \ + && -d external \ && -d scripts ]] then - head -1 README.md | grep "IMPORTANT" > /dev/null - if [[ $? -ne 0 ]] - then - echo "This doesn't look like a quantum_package directory (README.md)" - exit 1 - fi + : # OK, this is a quantum_package directory else echo "This doesn't look like a quantum_package directory" exit 1 @@ -65,10 +61,10 @@ echo "Creating root of static directory" # --------------------------------- rm -rf -- ${QPACKAGE_STATIC} -mkdir -p -- ${QPACKAGE_STATIC}/{bin,lib,extra_lib,install} +mkdir -p -- ${QPACKAGE_STATIC}/{bin,lib,extra_lib,external} if [[ $? -ne 0 ]] ; then - echo "Error creating ${QPACKAGE_STATIC}/{bin,lib,extra_lib,install}" + echo "Error creating ${QPACKAGE_STATIC}/{bin,lib,extra_lib,external}" exit 1 fi @@ -140,18 +136,6 @@ fi cp -- ${QPACKAGE_STATIC}/extra_lib/lib{[gi]omp*,mkl*,lapack*,blas*,z*} ${QPACKAGE_STATIC}/lib/ -# -echo "Copying EMSL_Basis directory" -# ---------------------------- - -cp -r -- ${QP_ROOT}/install/emsl ${QPACKAGE_STATIC}/install -if [[ $? -ne 0 ]] ; -then - echo 'cp -r -- ${QP_ROOT}/install/emsl ${QPACKAGE_STATIC}/' - exit 1 -fi - - # echo "Copying scripts directory" # ------------------------- @@ -162,37 +146,29 @@ then echo 'cp -r -- ${QP_ROOT}/scripts ${QPACKAGE_STATIC}/' exit 1 fi -cp ${QP_ROOT}/install/EZFIO/Python/ezfio.py ${QPACKAGE_STATIC}/scripts/ +# + +echo "Copying external libraries" +# -------------------------- + +cp -r -- ${QP_ROOT}/external/emsl ${QPACKAGE_STATIC}/external +if [[ $? -ne 0 ]] ; +then + echo 'cp -r -- ${QP_ROOT}/external/emsl ${QPACKAGE_STATIC}/' + exit 1 +fi + +cp -r ${QP_ROOT}/external/Python ${QPACKAGE_STATIC}/external/ +mkdir ${QPACKAGE_STATIC}/external/ezfio +cp -r ${QP_ROOT}/external/ezfio/Python ${QPACKAGE_STATIC}/external/ezfio/ +cp -r ${QP_ROOT}/external/ezfio/Bash ${QPACKAGE_STATIC}/external/ezfio/ # echo "Creating quantum_package.rc" # --------------------------- -cat << EOF > ${QPACKAGE_STATIC}/quantum_package.rc -export QP_ROOT=\$( cd \$(dirname "\${BASH_SOURCE}") ; pwd -P ) - -export QP_EZFIO=\${QP_ROOT}/install/EZFIO -export QP_PYTHON=\${QP_ROOT}/scripts:\${QP_ROOT}/scripts/ezfio_interface:\${QP_ROOT}/scripts/utility:\${QP_ROOT}/scripts/module:\${QP_ROOT}/scripts/pseudo:\${QP_ROOT}/scripts/compilation:\${QP_ROOT}/install/bats:\${QP_ROOT}/install/Downloads:\${QP_ROOT}/install/eigen:\${QP_ROOT}/install/p_graphviz:\${QP_ROOT}/install/gmp:\${QP_ROOT}/install/resultsFile:\${QP_ROOT}/install/_build:\${QP_ROOT}/install/emsl:\${QP_ROOT}/install/scripts:\${QP_ROOT}/install/docopt:\${QP_ROOT}/install/irpf90:\${QP_ROOT}/install/zlib:\${QP_ROOT}/install/EZFIO - -export IRPF90=\${QP_ROOT}/bin/irpf90 -export NINJA=\${QP_ROOT}/bin/ninja -function qp_prepend_export () { -eval "value_1="\\\${\$1}"" -if [[ -z \$value_1 ]] ; then - echo "\${2}:" -else - echo "\${2}:\${value_1}" -fi -} -export PYTHONPATH=\$(qp_prepend_export "PYTHONPATH" "\${QP_EZFIO}/Python":"\${QP_PYTHON}") -export PATH=\$(qp_prepend_export "PATH" "\${QP_PYTHON}":"\${QP_ROOT}"/bin:"\${QP_ROOT}"/ocaml) -export LD_LIBRARY_PATH=\$(qp_prepend_export "LD_LIBRARY_PATH" "\${QP_ROOT}"/lib:"\${QP_ROOT}"/extra_lib:"\${QP_ROOT}"/lib64) -export LIBRARY_PATH=\$(qp_prepend_export "LIBRARY_PATH" "\${QP_ROOT}"/lib:"\${QP_ROOT}"/extra_lib:"\${QP_ROOT}"/lib64) -export C_INCLUDE_PATH=\$(qp_prepend_export "C_INCLUDE_PATH" "\${QP_ROOT}"/include) - -# export QP_NIC=ib0 -EOF +sed "s!^export QP_ROOT=.*\$!export QP_ROOT=\$( cd \$(dirname "\${BASH_SOURCE}") ; pwd -P )!" ${QP_ROOT}/quantum_package.rc.default > ${QPACKAGE_STATIC}/quantum_package.rc #exit 0 # diff --git a/scripts/qp_mpirun b/scripts/qp_mpirun new file mode 100755 index 00000000..0ace9b35 --- /dev/null +++ b/scripts/qp_mpirun @@ -0,0 +1,85 @@ +#!/bin/bash + +set -e + +NODES=($(mpirun hostname)) + +# Test that there is one MPI process per node +NPROC=$(echo ${NODES[@]} | tr ' ' '\n' | sort | wc -l) +NUNIQ=$(echo ${NODES[@]} | tr ' ' '\n' | sort | uniq | wc -l) +if [[ $NPROC != $NUNIQ ]] +then + echo " +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Error: + +There are more than one process per host. +In your SLURM script file, use: + + #SBATCH --nodes=$NPROC + #SBATCH --ntasks-per-node=1 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + " + exit -1 +fi + +PROG=$1 +INPUT=$2 + +# Check if quantum_package.rc is sourced + +if [[ -z ${QP_ROOT} ]] +then + echo "Error: quantum_package.rc is not sourced" + exit -1 +fi + + +# Get host names + +MASTER_NODE=${NODES[0]} +SLAVE_NODES=$(echo ${NODES[@]:1}| tr ' ' ',') +if [[ $NPROC -gt 1 ]] +then + echo "Master : $MASTER_NODE" + echo "Slaves : $SLAVE_NODES" +fi + +# Check if the integrals can be read +source ${QP_ROOT}/external/ezfio/Bash/ezfio.sh +ezfio set_file $INPUT +RW=$(ezfio get integrals_bielec disk_access_mo_integrals) +if [[ $RW != Read ]] +then + echo " +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Warning: + +Two-electron integrals were not saved to disk in a previous run. +If the 4-index transformation takes time, you may consider +killing this job and running + + qp_run Four_idx_transform $INPUT + +as a single-node job before re-submitting the current job. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +" +fi +rm -f $INPUT/work/qp_run_address +set -x +mpiexec.hydra -n 1 -hosts "$MASTER_NODE" qp_run $PROG $INPUT & + +if [[ $NPROC -gt 1 ]] +then + while [[ ! -f $INPUT/work/qp_run_address ]] + do + sleep 1 + done + echo "Starting slaves" + mpiexec.hydra -n $((${SLURM_NTASKS}-1)) -hosts "$SLAVE_NODES" qp_run -slave slave_cipsi $INPUT > $INPUT.slaves.out +fi +wait + + diff --git a/scripts/qp_srun b/scripts/qp_srun new file mode 100755 index 00000000..5c7847de --- /dev/null +++ b/scripts/qp_srun @@ -0,0 +1,85 @@ +#!/bin/bash + +set -e + +NODES=($(srun hostname)) + +# Test that there is one MPI process per node +NPROC=$(echo ${NODES[@]} | tr ' ' '\n' | sort | wc -l) +NUNIQ=$(echo ${NODES[@]} | tr ' ' '\n' | sort | uniq | wc -l) +if [[ $NPROC != $NUNIQ ]] +then + echo " +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Error: + +There are more than one process per host. +In your SLURM script file, use: + + #SBATCH --nodes=$NPROC + #SBATCH --ntasks-per-node=1 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + " + exit -1 +fi + +PROG=$1 +INPUT=$2 + +# Check if quantum_package.rc is sourced + +if [[ -z ${QP_ROOT} ]] +then + echo "Error: quantum_package.rc is not sourced" + exit -1 +fi + + +# Get host names + +MASTER_NODE=${NODES[0]} +SLAVE_NODES=$(echo ${NODES[@]:1}| tr ' ' ',') +if [[ $NPROC -gt 1 ]] +then + echo "Master : $MASTER_NODE" + echo "Slaves : $SLAVE_NODES" +fi + +# Check if the integrals can be read +source ${QP_ROOT}/external/ezfio/Bash/ezfio.sh +ezfio set_file $INPUT +RW=$(ezfio get integrals_bielec disk_access_mo_integrals) +if [[ $RW != Read ]] +then + echo " +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Warning: + +Two-electron integrals were not saved to disk in a previous run. +If the 4-index transformation takes time, you may consider +killing this job and running + + qp_run Four_idx_transform $INPUT + +as a single-node job before re-submitting the current job. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +" +fi +rm -f $INPUT/work/qp_run_address +set -x +srun -n 1 qp_run $PROG $INPUT & + +if [[ $NPROC -gt 1 ]] +then + while [[ ! -f $INPUT/work/qp_run_address ]] + do + sleep 1 + done + echo "Starting slaves" + srun -n $((${SLURM_NTASKS}-1)) qp_run -slave slave_cipsi $INPUT > $INPUT.slaves.out +fi +wait + + diff --git a/src/Davidson/EZFIO.cfg b/src/Davidson/EZFIO.cfg index b1b5d013..5beadf2f 100644 --- a/src/Davidson/EZFIO.cfg +++ b/src/Davidson/EZFIO.cfg @@ -34,3 +34,9 @@ doc: If |true|, use the distributed algorithm default: True interface: ezfio,provider,ocaml +[only_expected_s2] +type: logical +doc: If |true|, use filter out all vectors with bad |S^2| values +default: True +interface: ezfio,provider,ocaml + diff --git a/src/Davidson/diagonalization_hs2_dressed.irp.f b/src/Davidson/diagonalization_hs2_dressed.irp.f index d1c52426..1d2f3d7a 100644 --- a/src/Davidson/diagonalization_hs2_dressed.irp.f +++ b/src/Davidson/diagonalization_hs2_dressed.irp.f @@ -404,7 +404,7 @@ subroutine davidson_diag_hjj_sjj(dets_in,u_in,H_jj,s2_out,energies,dim_in,sze,N_ s2(k) = s_(k,k) + S_z2_Sz enddo - if (s2_eig) then + if (only_expected_s2) then do k=1,shift2 state_ok(k) = (dabs(s2(k)-expected_s2) < 0.6d0) enddo diff --git a/src/FCI/zmq_selection.irp.f b/src/FCI/zmq_selection.irp.f index 6d8ee443..ff1a0f0d 100644 --- a/src/FCI/zmq_selection.irp.f +++ b/src/FCI/zmq_selection.irp.f @@ -121,7 +121,7 @@ subroutine ZMQ_selection(N_in, pt2, variance, norm) norm(i) = 0.d0 enddo if (N_in > 0) then - if (s2_eig.or.(N_states > 1) ) then + if (s2_eig) then call make_selection_buffer_s2(b) endif call fill_H_apply_buffer_no_selection(b%cur,b%det,N_int,0)