#!/bin/bash
#
# $Id: doqmtests,v 1.63 2008-12-07 19:26:52 jhammond Exp $
#

set -e

let np=1

if [[ "$1" == "all" ]]; then
    $RUNTESTS procs $np 5h2o_core
    $RUNTESTS procs $np acr-camb3lyp-cdfit
    $RUNTESTS procs $np acr-camb3lyp-direct
    $RUNTESTS procs $np acr_lcblyp
    $RUNTESTS procs $np Ar_b2plyp_cc-vqz
    $RUNTESTS procs $np Ar_scf-mp2_cc-vqz
    $RUNTESTS procs $np auh2o
    $RUNTESTS procs $np aump2
    $RUNTESTS procs $np autosym
    $RUNTESTS procs $np band
    $RUNTESTS procs $np be
    $RUNTESTS procs $np bf_cis
    $RUNTESTS procs $np bq_nio
    $RUNTESTS procs $np br2_dk
    $RUNTESTS procs $np bsse_dft_trimer
    $RUNTESTS procs $np bsse_tce_mult
    $RUNTESTS procs $np c2h4
    $RUNTESTS procs $np c4h4_wfn
    $RUNTESTS procs $np c60_ecp
    $RUNTESTS procs $np carbon_fon
    $RUNTESTS procs $np ch2_props4_bp
    $RUNTESTS procs $np ch3f-lc-wpbe
    $RUNTESTS procs $np ch3f-lc-wpbeh
    $RUNTESTS procs $np ch3f_notrans_cosmo
    $RUNTESTS procs $np ch3f_rot
    $RUNTESTS procs $np ch3f_trans
    $RUNTESTS procs $np ch3f_trans_cam_nmr
    $RUNTESTS procs $np ch3f_trans_cosmo
    $RUNTESTS procs $np ch3f_unrot
    $RUNTESTS procs $np ch3f_zora_shielding
    $RUNTESTS procs $np ch3_m06-hf
    $RUNTESTS procs $np ch3_m06-hf
    $RUNTESTS procs $np ch3radical_rot
    $RUNTESTS procs $np ch3radical_unrot
    $RUNTESTS procs $np ch4cl_zts
    $RUNTESTS procs $np ch4_zts
    $RUNTESTS procs $np ch5n_nbo
    $RUNTESTS procs $np ch5n_nbo
    $RUNTESTS procs $np cho_bp_props
    $RUNTESTS procs $np cho_bp_zora_finite
    $RUNTESTS procs $np cnh5_m06-2x
    $RUNTESTS procs $np cnh5_m06-2x
    $RUNTESTS procs $np co_core
    $RUNTESTS procs $np cosmo_cl
    $RUNTESTS procs $np cosmo_h2cco2
    $RUNTESTS procs $np cosmo_h2cco2mg
    $RUNTESTS procs $np cosmo_h2cco2mg_ecp
    $RUNTESTS procs $np cosmo_h2cco2na
    $RUNTESTS procs $np cosmo_h2o
    $RUNTESTS procs $np cosmo_h2o_bq
    $RUNTESTS procs $np cosmo_h2o_dft
    $RUNTESTS procs $np cosmo_h3co
    $RUNTESTS procs $np cosmo_h3co_ecp
    $RUNTESTS procs $np cosmo_h3co_gp
    $RUNTESTS procs $np cosmo_na
    $RUNTESTS procs $np cosmo_nacl
    $RUNTESTS procs $np cosmo_trichloroethene
    $RUNTESTS procs $np cu2_m06-l
    $RUNTESTS procs $np cu2_m06-l
    $RUNTESTS procs $np cytosine_ccsd
    $RUNTESTS procs $np dft_bsse
    $RUNTESTS procs $np dft_bsse_d3
    $RUNTESTS procs $np dft_bsse_d3_opt
    $RUNTESTS procs $np dft_ch3ochch32
    $RUNTESTS procs $np dft_cr2
    $RUNTESTS procs $np dft_feco5
    $RUNTESTS procs $np dft_he2+
    $RUNTESTS procs $np dft_li2freq
    $RUNTESTS procs $np dft_m05nh2ch3
    $RUNTESTS procs $np dft_m05nh2ch3
    $RUNTESTS procs $np dft_meta
    $RUNTESTS procs $np dft_mpw1k
    $RUNTESTS procs $np dft_mpwb1khf
    $RUNTESTS procs $np dft_ozone
    $RUNTESTS procs $np dft_s12gh
    $RUNTESTS procs $np dft_sicperth2o
    $RUNTESTS procs $np dft_siosi3
    $RUNTESTS procs $np dft_x
    $RUNTESTS procs $np dft_xdm1
    $RUNTESTS procs $np dielsalder
    $RUNTESTS procs $np disp_dimer_ch4
    $RUNTESTS procs $np dmo_tddft_cd
    $RUNTESTS procs $np dmo_tddft_cd_velocity
    $RUNTESTS procs $np dplot
    $RUNTESTS procs $np esp
    $RUNTESTS procs $np esp_uhf
    $RUNTESTS procs $np etf_hcons
    $RUNTESTS procs $np ethane_qmmm
    $RUNTESTS procs $np ethanol/ethanol_md
    $RUNTESTS procs $np ethanol/ethanol_ti
    $RUNTESTS procs $np et_zn_dimer
    $RUNTESTS procs $np fh_m06
    $RUNTESTS procs $np geom_load_xyz
    $RUNTESTS procs $np geom_zmatrix
    $RUNTESTS procs $np grad_nh3_trimer
    $RUNTESTS procs $np grad_ozone
    $RUNTESTS procs $np h2_bnl
    $RUNTESTS procs $np h2mp2
    $RUNTESTS procs $np h2o
    $RUNTESTS procs $np h2o2-prop-notrans
    $RUNTESTS procs $np h2o-b3lyp-disp
    $RUNTESTS procs $np h2o_bnl
    $RUNTESTS procs $np h2o-camb3lyp-pol
    $RUNTESTS procs $np h2o-camb3lyp-pol-cdfit
    $RUNTESTS procs $np h2o-cambeckehh
    $RUNTESTS procs $np h2o-campbe0
    $RUNTESTS procs $np h2o_cg_opt
    $RUNTESTS procs $np h2o_cg_opt_rob3lyp
    $RUNTESTS procs $np h2o_cg_opt_ub3lyp
    $RUNTESTS procs $np h2o_cg_to_diag
    $RUNTESTS procs $np h2o_cg_to_diag_ub3lyp
    $RUNTESTS procs $np h2o_core
    $RUNTESTS procs $np h2o_dftmp2_cgmin
    $RUNTESTS procs $np h2o_diag_opt
    $RUNTESTS procs $np h2o_diag_opt_ub3lyp
    $RUNTESTS procs $np h2o_diag_to_cg
    $RUNTESTS procs $np h2o_diag_to_cg_ub3lyp
    $RUNTESTS procs $np h2o_dk
    $RUNTESTS procs $np h2o_frozemb
    $RUNTESTS procs $np h2o_hcons
    $RUNTESTS procs $np h2o-hse
    $RUNTESTS procs $np h2o-lcpbe
    $RUNTESTS procs $np h2o-noscf
    $RUNTESTS procs $np h2o_opt
    $RUNTESTS procs $np h2o_raman_3
    $RUNTESTS procs $np h2o_raman_4
    $RUNTESTS procs $np h2o-response
    $RUNTESTS procs $np h2o_selci
    $RUNTESTS procs $np h2o-ssb-d
    $RUNTESTS procs $np h2o-ssb-d-b3lyp
    $RUNTESTS procs $np h2o-ssb-d-opt
    $RUNTESTS procs $np h2o_udftmp2_cgmin
    $RUNTESTS procs $np h2o_vscf
    $RUNTESTS procs $np h2s_finite
    $RUNTESTS procs $np h3_dirdyvtst
    $RUNTESTS procs $np h3tr1
    $RUNTESTS procs $np He_b2plyp_cc-vqz
    $RUNTESTS procs $np He_scf-mp2_cc-vqz
    $RUNTESTS procs $np hess_actlist
    $RUNTESTS procs $np hess_biph
    $RUNTESTS procs $np hess_c6h6
    $RUNTESTS procs $np hess_ch4
    $RUNTESTS procs $np hess_h2o
    $RUNTESTS procs $np hess_nh3
    $RUNTESTS procs $np hess_nh3_dimer
    $RUNTESTS procs $np hess_nh3_ub3lyp
    $RUNTESTS procs $np hi_zora_sf
    $RUNTESTS procs $np hi_zora_so
    $RUNTESTS procs $np intchk
    $RUNTESTS procs $np k6h2o
    $RUNTESTS procs $np lys_qmmm
    $RUNTESTS procs $np m08hx_ch3
    $RUNTESTS procs $np m08hx_h2o
    $RUNTESTS procs $np m08so_ch3
    $RUNTESTS procs $np m08so_h2o
    $RUNTESTS procs $np m11_ch3
    $RUNTESTS procs $np m11_h2o
    $RUNTESTS procs $np m11-l_ch3
    $RUNTESTS procs $np m11-l_h2o
    $RUNTESTS procs $np mcscf_ch2
    $RUNTESTS procs $np mcscf_ozone
    $RUNTESTS procs $np mep-test
    $RUNTESTS procs $np mp2_si2h6
    $RUNTESTS procs $np n2_ccsd
    $RUNTESTS procs $np n2_rodft_lrc
    $RUNTESTS procs $np Ne_b2plyp_cc-vqz
    $RUNTESTS procs $np neb-fch3cl
    $RUNTESTS procs $np neb-isobutene
    $RUNTESTS procs $np Ne_scf-mp2_cc-vqz
    $RUNTESTS procs $np o2_bnl
    $RUNTESTS procs $np o2_hfattn
    $RUNTESTS procs $np o2_zora_so
    $RUNTESTS procs $np oh2
    $RUNTESTS procs $np oniom1
    $RUNTESTS procs $np oniom2
    $RUNTESTS procs $np oniom3
    $RUNTESTS procs $np oniom3
    $RUNTESTS procs $np oniom4
    $RUNTESTS procs $np paw
    $RUNTESTS procs $np pbo_nesc1e
    $RUNTESTS procs $np pkzb
    $RUNTESTS procs $np prep/aal
    $RUNTESTS procs $np prep/bpx
    $RUNTESTS procs $np prep/caa
    $RUNTESTS procs $np prep/fsc
    $RUNTESTS procs $np prop_cg_nh3_b3lyp
    $RUNTESTS procs $np prop_ch3f
    $RUNTESTS procs $np prop_h2o
    $RUNTESTS procs $np prop_uhf_ch3f
    $RUNTESTS procs $np prop_uhf_h2o
    $RUNTESTS procs $np pspw
    $RUNTESTS procs $np pspw_md
    $RUNTESTS procs $np pspw_polarizability
    $RUNTESTS procs $np pspw_SiC
    $RUNTESTS procs $np pspw_stress
    $RUNTESTS procs $np ptatom
    $RUNTESTS procs $np pyqa3
    $RUNTESTS procs $np qmmm_freq
    $RUNTESTS procs $np qmmm_grad0
    $RUNTESTS procs $np qmmm_opt0
    $RUNTESTS procs $np rimp2_he
    $RUNTESTS procs $np rimp2_ne
    $RUNTESTS procs $np sad_ch3hf
    $RUNTESTS procs $np sadsmall
    $RUNTESTS procs $np scf_feco5
    $RUNTESTS procs $np si2cl6_gc
    $RUNTESTS procs $np small_intchk
    $RUNTESTS procs $np startag
    $RUNTESTS procs $np tagcheck
    $RUNTESTS procs $np talc
    $RUNTESTS procs $np tce_active_ccsdt
    $RUNTESTS procs $np tce_cr_eom_t_ch_rohf
    $RUNTESTS procs $np tce_cr_eom_t_ozone
    $RUNTESTS procs $np tce_eomsd_eomsol1
    $RUNTESTS procs $np tce_eomsd_eomsol2
    $RUNTESTS procs $np tce_h2o
    $RUNTESTS procs $np tce_h2o_dipole
    $RUNTESTS procs $np tce_h2o_eomcc
    $RUNTESTS procs $np tce_hyperpolar_ccsd_big
    $RUNTESTS procs $np tce_hyperpolar_ccsd_small
    $RUNTESTS procs $np tce_lr_ccsd_t
    $RUNTESTS procs $np tce_lr_ccsd_tq
    $RUNTESTS procs $np tce_ozone_2eorb
    $RUNTESTS procs $np tce_polar_ccsd_big
    $RUNTESTS procs $np tce_polar_ccsd_small
    $RUNTESTS procs $np tce_uhf_uccsd
    $RUNTESTS procs $np tce_uracil_creomact
    $RUNTESTS procs $np tddft_ac_co
    $RUNTESTS procs $np tddft_h2o
    $RUNTESTS procs $np tddft_h2o_uhf
    $RUNTESTS procs $np tddft_n2+
    $RUNTESTS procs $np testtab
    $RUNTESTS procs $np trypsin/trypsin_md
    $RUNTESTS procs $np tpss
    $RUNTESTS procs $np tpssh
    $RUNTESTS procs $np tropt-ch3nh2
    $RUNTESTS procs $np uo2_sodft
    $RUNTESTS procs $np uo2_sodft_grad
    $RUNTESTS procs $np uoverlap
    $RUNTESTS procs $np u_sodft
    $RUNTESTS procs $np vectors_rotate
    $RUNTESTS procs $np water/water_md
    $RUNTESTS procs $np water/water_pme
    $RUNTESTS procs $np xe_zora_sf
else
    DEB_HOST_ARCH=$( dpkg-architecture -qDEB_HOST_ARCH )

    declare -a BASE_TEST_LIST
    BASE_TEST_LIST=(dft_he2+ qmmm_grad0		\
	auh2o autosym h2mp2 h2o hess_h2o prop_h2o		\
	geom_zmatrix rimp2_ne small_intchk tagcheck testtab	\
	h2o_dk cosmo_h2o ch5n_nbo h2s_finite			\
	pyqa3 startag esp esp_uhf dft_bsse			\
	dplot_dft dft_meta dft_mpwb1khf prop_uhf_h2o		\
	et_zn_dimer vectors_rotate sad_ch3hf			\
	band pspw pspw_stress				\
	mcscf_ch2 dft_li2freq n2_ccsd tce_ccsd_t_h2o		\
	tddft_h2o rt_tddft_dimer_charge				\
	tce_eaccsd_ozone tce_ipccsd_f2				\
	tce_hyperpolar_ccsd_small mp2_scs_n2			\
	tddftgrad_n2_uks tddftgrad_ch2o				\
	water/water_md water/water_pme)

    # mips64el, riscv64 are generally slow and times out. Test a short subset.
    case " mips64el riscv64 " in
	*\ ${DEB_HOST_ARCH}\ *)  echo "running a short test list on ${DEB_HOST_ARCH}";
	BASE_TEST_LIST=(dft_he2+ qmmm_grad0		\
	auh2o autosym h2mp2 h2o hess_h2o prop_h2o		\
	geom_zmatrix rimp2_ne small_intchk tagcheck testtab	\
	h2o_dk cosmo_h2o ch5n_nbo h2s_finite			\
	pyqa3 startag esp esp_uhf dft_bsse			\
	dplot_dft dft_meta dft_mpwb1khf prop_uhf_h2o);;
    esac

    # some tests fail on certain arches.
    # run them only on systems expected to pass
    # cf. https://github.com/nwchemgit/nwchem/issues/864
    #
    # Failing tests:
    # armhf: pspw_md (minor difference in last digit of energy)
    # riscv64: generally slow, times out
    # s390x: cosmo_h3co (sigabort with mpich)

    declare -a EXTRA_TEST_LIST
    NO_EXTRA_ARCH_LIST="armhf mips64el riscv64 s390x"
    case " ${NO_EXTRA_ARCH_LIST} " in
	*\ ${DEB_HOST_ARCH}\ *)  echo "skipping extra tests on ${DEB_HOST_ARCH}";;
	*) EXTRA_TEST_LIST+=(pspw_md cosmo_h3co);;
    esac

    # Currently numerical unstable or failing due to other reasons:
    # h2o_selci
    # tce_cr_eom_t_ch_rohf tce_mrcc_bwcc
    # tce_cc2_c2
    # qmm_grad0

    # support for mpich on mips64el (via armci) and s390x is flakey, skip tests
    SKIP_MPICH_ARCH_LIST="mips64el s390x"
    case " ${SKIP_MPICH_ARCH_LIST} " in
	*\ ${DEB_HOST_ARCH}\ *)  echo "Skipping mpich tests on ${DEB_HOST_ARCH} due to flaky mpich support";
	    exit 0;;
    esac

    $RUNTESTS procs $np ${BASE_TEST_LIST[@]} ${EXTRA_TEST_LIST[@]}

fi
