Merge branch 'ccsd_t2_dgemm_cublas' of https://github.com/jeffhammond/nwchem into ccsd_t2_dgemm_cublas

This commit is contained in:
Jeff Hammond 2024-10-15 15:47:24 +03:00
commit ced49c8d49
296 changed files with 440264 additions and 253090 deletions

39
.github/workflows/check_64_to_32.yml vendored Normal file
View file

@ -0,0 +1,39 @@
name: check_64_to_32
on:
push:
paths-ignore:
- .gitlab-ci.yml
pull_request:
release:
schedule:
- cron: '0 0 * * SUN'
repository_dispatch:
types: [backend_automation]
workflow_dispatch:
jobs:
check:
if: |
github.event_name == 'schedule' ||
(!contains(github.event.head_commit.message, 'ci skip'))
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
show-progress:
fetch-depth: 1
- name: pkg cleanup
run: |
ls -lrt
ls -lrt travis || true
./travis/pkg_cleanup.sh
shell: bash
- name: check
run: |
./travis/check_64_to_32.sh

View file

@ -28,7 +28,7 @@ jobs:
fetch-depth: 5
- name: Setup cache
id: setup-cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: |
~/cache
@ -62,7 +62,7 @@ jobs:
run: |
echo "cache_hit=N" >> $GITHUB_ENV
- name: build_schedule
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
push: false
context: ${{ matrix.folder }}

View file

@ -21,7 +21,7 @@ jobs:
matrix:
blas: [build_openblas]
blas_size: [8]
os: [ubuntu-20.04, macos-11]
os: [ubuntu-20.04, macos-latest]
experimental: [false]
mpi_impl:
- openmpi
@ -37,13 +37,22 @@ jobs:
fc:
- gfortran
exclude:
- os: macos-11
- os: macos-latest
mpi_impl: mpich
nwchem_modules: "tinyqmpw python"
- os: macos-11
- os: macos-latest
mpi_impl: mpich
nwchem_modules: "qmandpw qmd"
include:
- os: ubuntu-22.04
experimental: true
mpi_impl: openmpi
armci_network: MPI-TS
nwchem_modules: "nwdft driver solvation"
fc: gfortran
cc: gcc
blas: "libopenblas64-openmp-dev"
blas_size: 8
- os: ubuntu-20.04
experimental: true
mpi_impl: openmpi
@ -107,6 +116,14 @@ jobs:
nwchem_modules: "all"
fc: gfortran
blas: "build_openblas"
- os: ubuntu-latest
experimental: true
mpi_impl: openmpi
armci_network: GA_DEBIAN
nwchem_modules: "all python"
blas: "libopenblas-pthread-dev"
fc: gfortran
blas_size: 4
- os: ubuntu-20.04
experimental: true
mpi_impl: mpich
@ -208,12 +225,6 @@ jobs:
nwchem_modules: "tinyqmpw python"
fc: ifx
use_openmp: 2
- os: ubuntu-20.04
experimental: true
mpi_impl: mpich
armci_network: MPI-PT
nwchem_modules: "tinyqmpw python"
fc: ifort
- os: ubuntu-20.04
experimental: true
mpi_impl: intel
@ -237,14 +248,23 @@ jobs:
fc: ifort
cc: icx
use_libxc: 1
- os: macos-11
- os: macos-latest
experimental: true
mpi_impl: openmpi
armci_network: MPI-TS
nwchem_modules: "tinyqmpw"
fc: gfortran-10
fc: gfortran-12
cc: gcc
use_libxc: 1
xcode_version: 15.3
- os: macos-15
experimental: true
mpi_impl: openmpi
armci_network: MPI-TS
nwchem_modules: "tinyqmpw python"
fc: gfortran-13
use_libxc: 1
xcode_version: 15.2
- os: ubuntu-20.04
experimental: true
mpi_impl: mpich
@ -277,43 +297,37 @@ jobs:
fc: gfortran-10
cc: gcc-10
use_libxc: 1
- os: macos-13
- os: macos-15
experimental: true
mpi_impl: openmpi
armci_network: MPI-PR
nwchem_modules: "qmandpw qmd"
fc: gfortran-12
xcode_version: 15.0
- os: macos-12
xcode_version: 15.0.1
- os: macos-latest
experimental: true
mpi_impl: openmpi
armci_network: MPI-PR
nwchem_modules: "tce"
fc: gfortran-11
cc: gcc-11
xcode_version: 13.4.1
- os: macos-12
fc: gfortran-12
cc: gcc-12
xcode_version: 15.4
- os: macos-latest
experimental: true
mpi_impl: openmpi
armci_network: MPI-TS
nwchem_modules: "tinyqmpw"
fc: gfortran-11
xcode_version: 13.4.1
- os: macos-11
fc: gfortran-12
cc: gcc-12
xcode_version: 15.4
- os: macos-latest
experimental: true
mpi_impl: openmpi
armci_network: MPI-TS
nwchem_modules: "tinyqmpw"
fc: gfortran-9
fc: gfortran-13
blas: "accelerate"
blas_size: 4
- os: macos-12
experimental: true
mpi_impl: mpich
armci_network: MPI-PT
nwchem_modules: "nwdft solvation driver"
fc: ifort
xcode_version: 14.0.1
- os: ubuntu-20.04
experimental: true
mpi_impl: mpich
@ -365,6 +379,70 @@ jobs:
armci_network: MPI-TS
nwchem_modules: "nwdft driver solvation mp2_grad mcscf ccsd rimp2 fcidump nwc_columbus"
fc: ifx
- os: ubuntu-22.04
experimental: true
mpi_impl: mpich
armci_network: MPI-TS
nwchem_modules: "tinyqmpw"
fc: flang-new-20
- os: ubuntu-22.04
experimental: true
mpi_impl: mpich
armci_network: MPI-TS
nwchem_modules: "tinyqmpw"
fc: flang-new-19
- os: ubuntu-latest
experimental: true
mpi_impl: mpich
armci_network: MPI-TS
nwchem_modules: "tinyqmpw"
fc: flang-new-18
- os: ubuntu-22.04
experimental: true
mpi_impl: openmpi
armci_network: MPI-TS
nwchem_modules: "nwdft driver solvation"
fc: gfortran
cc: gcc
blas: "libopenblas64-pthread-dev"
blas_size: 8
- os: macos-latest
experimental: true
mpi_impl: openmpi
armci_network: MPI-TS
nwchem_modules: "nwdft driver solvation"
fc: gfortran
cc: gcc
blas: "brew_openblas"
blas_size: 4
- os: macos-latest
experimental: true
mpi_impl: openmpi
armci_network: MPI-TS
nwchem_modules: "nwdft driver solvation"
fc: gfortran
cc: gcc
blas: "brew_openblas"
blas_size: 4
- os: macos-15
experimental: true
mpi_impl: openmpi
armci_network: MPI-TS
nwchem_modules: "nwdft driver solvation"
fc: gfortran
cc: gcc
blas: "brew_openblas"
blas_size: 4
xcode_version: 15.0.1
- os: macos-latest
experimental: true
mpi_impl: build_mpich
armci_network: MPI-TS
nwchem_modules: "nwdft driver solvation"
fc: gfortran-14
cc: gcc-14
blas: "brew_openblas"
blas_size: 4
fail-fast: false
env:
MPI_IMPL: ${{ matrix.mpi_impl }}
@ -378,17 +456,44 @@ jobs:
CC: ${{ matrix.cc }}
COMEX_MAX_NB_OUTSTANDING: 4
SIMINT_MAXAM: 4
SIMINT_VECTOR: avx2
BLAS_ENV: ${{ matrix.blas }}
BLAS_SIZE: ${{ matrix.blas_size }}
USE_OPENMP: ${{ matrix.use_openmp }}
XCODE_VERSION: ${{ matrix.xcode_version }}
continue-on-error: ${{ matrix.experimental }}
steps:
- name: pkg cleanup
run: |
df -h
if [[ $(uname -s) == "Linux" ]]; then
ubuntu_ver=$(cat /etc/os-release | grep VERSION_ID |cut -d \" -f 2)
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n
sudo apt-get purge -y azure-cli || true
sudo apt-get purge -y google-cloud-cli microsoft-edge-stable dotnet-sdk-7.0 dotnet-sdk-6.0 google-chrome-stable firefox
sudo apt-get purge -y temurin-17-jdk temurin-11-jdk temurin-8-jdk
if [[ $ubuntu_ver == "20.04" ]]; then
sudo apt-get purge -y llvm-12-dev llvm-11-dev llvm-10-dev
sudo apt-get purge -y hhvm
sudo apt-get purge -y libgl1-mesa-dri
fi
if [[ $ubuntu_ver == "22.04" ]]; then
sudo apt-get purge -y llvm-13-dev llvm-14-dev llvm-15-dev
fi
sudo apt-get -y clean
sudo apt-get autoremove -y
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n
df -h
fi
shell: bash
- name: Checkout code
uses: actions/checkout@v4
with:
show-progress:
fetch-depth: 200
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Get Instruction
id: get-simd
run: |
@ -396,7 +501,7 @@ jobs:
shell: bash
- name: Setup cache
id: setup-cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: |
~/cache
@ -410,6 +515,11 @@ jobs:
if: steps.setup-cache.outputs.cache-hit == 'true'
run: |
./travis/cache_fetch.sh
- name: get external files
if: steps.setup-cache.outputs.cache-hit != 'true'
run: |
mkdir -p ~/cache
NWCHEM_TOP=$(pwd) ./contrib/getfiles.nwchem ~/cache
- name: compile
id: compile
run: |

View file

@ -52,7 +52,7 @@ jobs:
steps:
- name: Setup cache
id: setup-cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: |
~/cache

View file

@ -12,10 +12,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
check-latest: true
python-version: '3.12.3'
- run: pip install --upgrade pip wheel
- run: pip install bandit black codespell flake8 flake8-2020 flake8-bugbear
flake8-comprehensions isort mypy pytest pyupgrade safety
@ -36,4 +35,4 @@ jobs:
- run: pytest . || true
- run: pytest --doctest-modules . || true
- run: shopt -s globstar && pyupgrade --py36-plus **/*.py || true
- run: safety check
# - run: safety check

View file

@ -0,0 +1,62 @@
name: NWChem_Release_Tar
on:
workflow_dispatch:
inputs:
nwchem_version:
description: 'Release version'
required: true
default: 'nightly'
type: choice
options:
- nightly
- 7.2.3
jobs:
do_tar:
runs-on: ubuntu-latest
steps:
- name: install pkg
run: |
sudo apt-get install -y curl make perl bash bzip2 tar gzip openmpi-bin
- name: grab script
run: |
curl -LJO https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/nwchem/$GITHUB_REF_NAME/contrib/git.nwchem/dotar_release.sh
chmod +x ./dotar_release.sh
- name: generate date
run: |
export TZ='America/Los_Angeles'
echo "input_date=$(date +%Y-%m-%d)" >> $GITHUB_ENV
- name: generate tempdir name
run: |
echo "tmpdir_name=temp.${{ env.input_date }}" >> $GITHUB_ENV
- name: run script
run: |
./dotar_release.sh ${{ github.event.inputs.nwchem_version }} ${{ env.input_date }}
- name: check tempdir
run: |
ls -lrt ${{ env.tmpdir_name }}/*tar*
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: nwchem-tarball
path: ${{ env.tmpdir_name }}/*tar*
- if: github.event.inputs.release_version == 'nightly'
name: Nightly
uses: softprops/action-gh-release@v2
with:
prerelease: true
name: nightly
tag_name: nightly
files: ${{ env.tmpdir_name }}/*tar*
fail_on_unmatched_files: true
- if: github.event.inputs.release_version != 'nightly'
name: Release
uses: softprops/action-gh-release@v2
with:
prerelease: true
draft: true
name: NWChem ${{ github.event.inputs.nwchem_version }}
tag_name: v${{ github.event.inputs.nwchem_version }}-release
files: ${{ env.tmpdir_name }}/*tar*
fail_on_unmatched_files: true

View file

@ -57,6 +57,8 @@ fi
#
#--- localization tests
./runtests.mpi.unix procs $np localize-ibo-aa
./runtests.mpi.unix procs $np localize-ibo-allyl
./runtests.mpi.unix procs $np localize-pm-allyl
#
#--- relativity tests
./runtests.mpi.unix procs $np x2c-h2se

View file

@ -346,6 +346,10 @@ let "myexit+=$?"
let "myexit+=$?"
./runtests.mpi.unix procs $np localize-ibo-aa
let "myexit+=$?"
./runtests.mpi.unix procs $np localize-ibo-allyl
let "myexit+=$?"
./runtests.mpi.unix procs $np localize-pm-allyl
let "myexit+=$?"
#
#--- range-separated functionals tests
./runtests.mpi.unix procs $np acr-camb3lyp-cdfit
@ -597,6 +601,10 @@ if [[ ! -z "${BUILD_ELPA}" ]]; then
./runtests.mpi.unix procs $np siosi3_elpa
let "myexit+=$?"
fi
./runtests.mpi.unix procs $np dft_formaldehyde_mom
let "myexit+=$?"
./runtests.mpi.unix procs $np dft_boron_imom
let "myexit+=$?"
#--- if we only want quick tests get out now!
if [[ "$what" == "fast" ]]; then
echo
@ -638,14 +646,8 @@ let "myexit+=$?"
./runtests.mpi.unix procs $np ch4-dft-scf-prop
let "myexit+=$?"
# superheavy elements check
source ./qa_funcs.sh
strings -a $(get_nwchem_executable) |grep Tennessine >& /dev/null
exit_code=$?
if [[ $exit_code == 0 ]]; then
echo NWChem code ready for superheavy elements
./runtests.mpi.unix procs $np dft_tennessine
let "myexit+=$?"
fi
./runtests.mpi.unix procs $np dft_tennessine
let "myexit+=$?"
#
./runtests.mpi.unix procs $np ccsdt_ompt_w3pvdz
let "myexit+=$?"
@ -716,6 +718,16 @@ let "myexit+=$?"
let "myexit+=$?"
./runtests.mpi.unix procs $np mep-test
let "myexit+=$?"
./runtests.mpi.unix procs $np ActnAcntrl_VEMExc_TDB3LYP
let "myexit+=$?"
./runtests.mpi.unix procs $np H2COMetnl_VEMExcSSP_TDB3LYP-2
let "myexit+=$?"
./runtests.mpi.unix procs $np H2COMetnl_VEMExcSSP_TDB3LYP
let "myexit+=$?"
./runtests.mpi.unix procs $np H2COWat_VEMExc_CISHF
let "myexit+=$?"
./runtests.mpi.unix procs $np p2ta-vem
let "myexit+=$?"
if [[ "$what" != "flaky" ]]; then
echo
echo "the number of failed tests is" $myexit

View file

@ -312,7 +312,7 @@ foreach $filename (@FILES_TO_PARSE) {
}
if (! $sgroup) {
if (/Total/ && /energy/) {
if (/SCF/ || /DFT/ || /CCSD/ || /MP2/ || /MCSCF/ || /RIMP2/ || /RISCF/ || /BAND/ || /PAW/ || /PSPW/ || /WFN1/ || /xTB/ ) {
if (/SCF/ || /DFT/ || /CCSD/ || /MP2/ || /MCSCF/ || /RIMP2/ || /RISCF/ || /BAND/ || /PAW/ || /WFN1/ || /xTB/ ) {
if ($debug) {print "\ndebug: $_";}
@line_tokens = split(' ');
$num_line_tokens = @line_tokens;
@ -335,6 +335,30 @@ foreach $filename (@FILES_TO_PARSE) {
}
}
if (! $sgroup) {
if (/Total/ && /energy/) {
if ( /PSPW/ ) {
if ($debug) {print "\ndebug: $_";}
@line_tokens = split(' ');
$num_line_tokens = @line_tokens;
if ($debug) {
print "debug:line_tokens: @line_tokens \n";
print "debug:number : $num_line_tokens \n";
}
for($itok = 0;$itok < ($num_line_tokens-1); $itok++){
if (! $quiet) {
printf "%s ", @line_tokens[$itok];
}
printf FILE_OUTPUT "%s ", @line_tokens[$itok];
}
# *** Assumes $itok was incremented above
if (! $quiet) {
printf "%.5f\n", set_to_digits(@line_tokens[$itok],4);
}
printf FILE_OUTPUT "%.5f\n", set_to_digits(@line_tokens[$itok],4);
}
}
}
if (! $sgroup) {
if (/total/ && /energy/) {
if ( /MBPT/ || /LCCD/ || /CCD/ || /LCCSD/ || /CCSD/ || /CCSDT/ || /CCSDTQ/ || /QCISD/ || /CISD/ || /CISDT/ || /CISDTQ/ ) {
if ($debug) {print "\ndebug: $_";}

View file

@ -32,7 +32,7 @@
export HYDRA_DEBUG=0
# find memory leaks using this glibc feature that
# initialized memory blocks to non-zero values
if [[ -z "${USE_ASAN}" ]]; then
if [[ -z "${USE_ASAN}" ]] && [[ "${FC}" != "flang-new-20" ]]; then
export MALLOC_PERTURB_=$(($RANDOM % 255 + 1))
fi
source ./qa_funcs.sh

View file

@ -0,0 +1,41 @@
# Vertical Emission
echo 'VEM/SMD/TDDFT-B3LYP/6-311+G(d) vertical emission + SMSSP - formaldehyde in methanol'
start H2COMetnl_VEMExcSSP_TDB3LYP-2
geometry nocenter
O 0.0000000000 0.0000000000 0.6743110000
C 0.0000000000 0.0000000000 -0.5278530000
H 0.0000000000 0.9370330000 -1.1136860000
H 0.0000000000 -0.9370330000 -1.1136860000
symmetry c1
end
basis
* library 6-311+G*
end
dft
XC b3lyp
end
cosmo
do_cosmo_vem 2
solvent methanol
end
tddft
nroots 10
target 1
singlet
notriplet
algorithm 1
civecs
grad
root 1
solve_thresh 1d-05
end
end
task tddft gradient

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -24,7 +24,74 @@ dft
end
bq
load bq_charges
1.84775906502257 0.541196100146197 0.541196100146197 2.402225750307932E-003
0.541196100146197 1.84775906502257 0.541196100146197 2.340440231936370E-003
1.15470053837925 1.15470053837925 1.15470053837925 -2.229500828889751E-003
-1.84775906502257 0.541196100146197 0.541196100146197 1.251753089125840E-003
-1.84775906502257 -0.541196100146197 0.541196100146197 1.251752729896357E-003
0.541196100146197 -1.84775906502257 0.541196100146197 2.340440248656548E-003
1.84775906502257 -0.541196100146197 0.541196100146197 2.402232144015150E-003
1.15470053837925 -1.15470053837925 1.15470053837925 -2.229499399085493E-003
0.541196100146197 0.541196100146197 -1.84775906502257 5.691435832485188E-003
0.541196100146197 1.84775906502257 -0.541196100146197 2.407522319053154E-003
1.15470053837925 1.15470053837925 -1.15470053837925 4.098859895536265E-003
-0.541196100146197 0.541196100146197 -1.84775906502257 6.872528263116542E-003
-1.84775906502257 0.541196100146197 -0.541196100146197 4.342143168123500E-003
-0.541196100146197 -0.541196100146197 -1.84775906502257 6.872527593439298E-003
-1.84775906502257 -0.541196100146197 -0.541196100146197 4.342142600524549E-003
0.541196100146197 -0.541196100146197 -1.84775906502257 5.691435494322854E-003
0.541196100146197 -1.84775906502257 -0.541196100146197 2.407521411196576E-003
1.15470053837925 -1.15470053837925 -1.15470053837925 4.098860107325336E-003
0.465428653867602 0.465428653867602 2.97207282235261 -9.546031989698498E-003
1.58907282235182 0.465428653867602 1.84842865386839 -1.042246107387843E-002
0.465428653867602 1.58907282235182 1.84842865386839 -1.066014372638094E-002
0.993042479524280 0.993042479524280 2.37604247952507 -1.153533707161643E-002
-0.465428653867602 0.465428653867602 2.97207282235261 -9.558150002409577E-003
-0.465428653867602 1.58907282235182 1.84842865386839 -1.057860241207540E-002
-1.58907282235182 0.465428653867602 1.84842865386839 -1.095568344503917E-002
-0.993042479524280 0.993042479524280 2.37604247952507 -1.161626614156083E-002
-0.465428653867602 -0.465428653867602 2.97207282235261 -9.558150003666936E-003
-1.58907282235182 -0.465428653867602 1.84842865386839 -1.095568353062446E-002
-0.465428653867602 -1.58907282235182 1.84842865386839 -1.057860250391407E-002
-0.993042479524280 -0.993042479524280 2.37604247952507 -1.161626621910469E-002
0.465428653867602 -0.465428653867602 2.97207282235261 -9.546031938676208E-003
0.465428653867602 -1.58907282235182 1.84842865386839 -1.066014349921333E-002
1.58907282235182 -0.465428653867602 1.84842865386839 -1.042246069009446E-002
0.993042479524280 -0.993042479524280 2.37604247952507 -1.153533680958867E-002
2.22904334821125 0.351777452191907 1.777452191707953E-003 4.284974904853939E-003
1.77855532241689 0.750555322416307 0.400555322416108 1.491749267005234E-003
2.22904334821125 -0.351777452191907 1.777452191707953E-003 4.284976344113607E-003
1.77855532241689 -0.750555322416307 0.400555322416108 1.491760140765194E-003
1.37977745219249 0.351777452191908 -1.55104334821086 3.209514288487084E-003
2.22904334821125 0.351777452191907 -0.701777452192107 4.680138714919202E-003
1.37977745219249 1.20104334821066 -0.701777452192107 1.622423623804581E-003
1.77855532241689 0.750555322416307 -1.10055532241651 4.584825216133325E-003
1.37977745219249 -0.351777452191908 -1.55104334821086 3.209514404546292E-003
1.37977745219249 -1.20104334821066 -0.701777452192107 1.622425573965948E-003
2.22904334821125 -0.351777452191907 -0.701777452192107 4.680139247490079E-003
1.77855532241689 -0.750555322416307 -1.10055532241651 4.584825824007589E-003
-0.162222547808386 2.09104334821117 1.777452191707953E-003 2.614530344880845E-003
-0.865777452192200 2.09104334821117 1.777452191707953E-003 4.493691842964546E-003
-1.71504334821096 1.24177745219241 1.777452191707953E-003 3.405807037640817E-003
-1.26455532241660 1.64055532241681 0.400555322416108 3.799853359020928E-003
-0.162222547808385 1.24177745219241 -1.55104334821086 2.279072849775047E-003
-0.162222547808386 2.09104334821117 -0.701777452192107 4.305354348860498E-003
0.236555322416014 1.64055532241681 -1.10055532241651 1.956928110172396E-003
-0.865777452192201 1.24177745219241 -1.55104334821086 5.274528779024176E-003
-0.865777452192200 2.09104334821117 -0.701777452192107 4.671045598757887E-003
-1.71504334821096 1.24177745219241 -0.701777452192107 4.371801734843838E-003
-1.26455532241660 1.64055532241681 -1.10055532241651 4.942898768175527E-003
-1.71504334821096 -1.24177745219241 1.777452191707953E-003 3.405805847668528E-003
-0.865777452192200 -2.09104334821117 1.777452191707953E-003 4.493690287770890E-003
-1.26455532241660 -1.64055532241681 0.400555322416108 3.799852120341229E-003
-0.162222547808386 -2.09104334821117 1.777452191707953E-003 2.614528748047715E-003
-0.865777452192201 -1.24177745219241 -1.55104334821086 5.274527097879694E-003
-1.71504334821096 -1.24177745219241 -0.701777452192107 4.371800429616148E-003
-0.865777452192200 -2.09104334821117 -0.701777452192107 4.671043749552482E-003
-1.26455532241660 -1.64055532241681 -1.10055532241651 4.942897072592553E-003
-0.162222547808385 -1.24177745219241 -1.55104334821086 2.279069161052804E-003
-0.162222547808386 -2.09104334821117 -0.701777452192107 4.305352500413284E-003
0.236555322416014 -1.64055532241681 -1.10055532241651 1.956924619041098E-003
end
relativistic

View file

@ -24,7 +24,74 @@ dft
end
bq
load bq_charges
2.84775906502314 3.54119610014791 5.54119610014905 2.409541715232177E-003
1.54119610014677 4.84775906502428 5.54119610014905 2.357936588956132E-003
2.15470053837982 4.15470053838096 6.15470053838210 -2.222677086115048E-003
-0.847759065022002 3.54119610014791 5.54119610014905 1.264156578456016E-003
-0.847759065022002 2.45880389985552 5.54119610014905 1.264157318028993E-003
1.54119610014677 1.15224093497914 5.54119610014905 2.357936844587748E-003
2.84775906502314 2.45880389985552 5.54119610014905 2.409544728906696E-003
2.15470053837982 1.84529946162246 6.15470053838210 -2.222676518571642E-003
1.54119610014677 3.54119610014791 3.15224093498028 5.696159465562918E-003
1.54119610014677 4.84775906502428 4.45880389985666 2.414016924653403E-003
2.15470053837982 4.15470053838096 3.84529946162360 4.104687873948283E-003
0.458803899854374 3.54119610014791 3.15224093498028 6.877951634974988E-003
-0.847759065022002 3.54119610014791 4.45880389985666 4.350795513897987E-003
0.458803899854374 2.45880389985551 3.15224093498028 6.877952157877950E-003
-0.847759065022002 2.45880389985552 4.45880389985666 4.350796415852843E-003
1.54119610014677 2.45880389985551 3.15224093498028 5.696159068529854E-003
1.54119610014677 1.15224093497914 4.45880389985666 2.414016158435196E-003
2.15470053837982 1.84529946162246 3.84529946162360 4.104683400807715E-003
1.46542865386817 3.46542865386931 7.97207282235546 -9.580947177468669E-003
2.58907282235239 3.46542865386931 6.84842865387124 -1.043213994335685E-002
1.46542865386817 4.58907282235353 6.84842865387124 -1.067008506158764E-002
1.99304247952485 3.99304247952599 7.37604247952792 -1.155880417552256E-002
0.534571346132969 3.46542865386931 7.97207282235546 -9.593024458698312E-003
0.534571346132969 4.58907282235353 6.84842865387124 -1.058742989201607E-002
-0.589072822351248 3.46542865386931 6.84842865387124 -1.096495093978891E-002
6.957520476290821E-003 3.99304247952599 7.37604247952792 -1.163941922882054E-002
0.534571346132969 2.53457134613411 7.97207282235546 -9.593024332060345E-003
-0.589072822351248 2.53457134613411 6.84842865387124 -1.096495070641879E-002
0.534571346132969 1.41092717764989 6.84842865387124 -1.058742930905373E-002
6.957520476290821E-003 2.00695752047743 7.37604247952792 -1.163941887291981E-002
1.46542865386817 2.53457134613411 7.97207282235546 -9.580947069316184E-003
1.46542865386817 1.41092717764989 6.84842865387124 -1.067008462742926E-002
2.58907282235239 2.53457134613411 6.84842865387124 -1.043213976773929E-002
1.99304247952485 2.00695752047743 7.37604247952792 -1.155880392660084E-002
3.22904334821182 3.35177745219362 5.00177745219456 4.290978035883720E-003
2.77855532241746 3.75055532241802 5.40055532241896 1.494899761378366E-003
3.22904334821182 2.64822254780980 5.00177745219456 4.290978076307125E-003
2.77855532241746 2.24944467758540 5.40055532241896 1.494904962153509E-003
2.37977745219306 3.35177745219362 3.44895665179199 3.211654546676234E-003
3.22904334821182 3.35177745219362 4.29822254781075 4.684723637814719E-003
2.37977745219306 4.20104334821238 4.29822254781075 1.624808994917746E-003
2.77855532241746 3.75055532241802 3.89944467758635 4.589068323141860E-003
2.37977745219306 2.64822254780980 3.44895665179199 3.211652607049959E-003
2.37977745219306 1.79895665179105 4.29822254781075 1.624790957407538E-003
3.22904334821182 2.64822254780980 4.29822254781075 4.684722609617732E-003
2.77855532241746 2.24944467758540 3.89944467758635 4.589064701779141E-003
0.837777452192185 5.09104334821288 5.00177745219456 2.619030553099228E-003
0.134222547808370 5.09104334821288 5.00177745219456 4.500141573271056E-003
-0.715043348210386 4.24177745219413 5.00177745219456 3.411300175276184E-003
-0.264555322416030 4.64055532241853 5.40055532241896 3.808228548934989E-003
0.837777452192185 4.24177745219413 3.44895665179199 2.280570306814806E-003
0.837777452192185 5.09104334821288 4.29822254781075 4.309741591205764E-003
1.23655532241658 4.64055532241853 3.89944467758635 1.958614956973009E-003
0.134222547808370 4.24177745219413 3.44895665179199 5.278408364887415E-003
0.134222547808370 5.09104334821288 4.29822254781075 4.675390643542593E-003
-0.715043348210386 4.24177745219413 4.29822254781075 4.375986720482851E-003
-0.264555322416030 4.64055532241853 3.89944467758635 4.947118016685251E-003
-0.715043348210386 1.75822254780930 5.00177745219456 3.411302533573733E-003
0.134222547808370 0.908956651790540 5.00177745219456 4.500143971475684E-003
-0.264555322416030 1.35944467758490 5.40055532241896 3.808230956659822E-003
0.837777452192185 0.908956651790540 5.00177745219456 2.619032728035417E-003
0.134222547808370 1.75822254780930 3.44895665179199 5.278410123407254E-003
-0.715043348210386 1.75822254780930 4.29822254781075 4.375988851564009E-003
0.134222547808370 0.908956651790540 4.29822254781075 4.675393023897996E-003
-0.264555322416030 1.35944467758490 3.89944467758635 4.947120334453622E-003
0.837777452192185 1.75822254780930 3.44895665179199 2.280573839020017E-003
0.837777452192185 0.908956651790540 4.29822254781075 4.309742946852189E-003
1.23655532241658 1.35944467758490 3.89944467758635 1.958614705954124E-003
end
relativistic

View file

@ -0,0 +1,38 @@
echo
start
# 2 2P (2px -> 3py) state of boron
# https://dx.doi.org/10.1021/acs.jctc.0c00502
geometry
symmetry c2v
B 0. 0. 0.
end
BASIS "ao basis" spherical
* library aug-cc-pvtz
END
dft
xc hfexch
mult 2
vectors input atomic output boron_ground.mos
end
task dft
dft
imom
mult 2
xc hfexch
vectors input boron_ground.mos swap alpha 8 3 output boron_imom.mos
convergence lshift 0. density 1d-9
end
task dft
dft
vectors input boron_ground.mos swap alpha 8 3 output boron_mom.mos
max_ovl
end
task dft

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,38 @@
start
title "formaldehyde n to pi-star excitation"
#https://dx.doi.org/10.1021/acs.jctc.0c00502
geometry
C 0.00000000 0.00000000 -0.6029850807
O 0.00000000 0.00000000 0.6053939853
H 0.00000000 0.934673129 -1.182174761
H 0.00000000 -0.934673129 -1.182174761
end
basis spherical
* library aug-cc-pvtz
end
dft
xc hfexch
vectors input atomic output form_ground.mos
end
task dft
dft
odft
vectors input form_ground.mos swap beta 11 8 output form_excited_mom.mos
convergence lshift 0. density 1d-8
max_ovl
end
task dft
dft
vectors input form_ground.mos swap beta 11 8 output form_excited_imom.mos
end
set dft:imom t
task dft

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,47 @@
echo
start h2co_zts_par_dat
charge 0
geometry geometry nocenter
symmetry c1
h 0.00000000 0.92415102 -1.07411939
h 0.00000000 -0.92415102 -1.07411939
c 0.00000000 0.00000000 -0.49305547
o 0.00000000 0.00000000 0.69129425
end
geometry endgeom nocenter
symmetry c1
h -0.00000000 0.85488575 0.91568825
h -0.00000000 -0.94470138 -1.11116114
c 0.00000000 0.10071217 -0.77208781
o 0.00000000 -0.01089653 0.52279419
end
basis
* library 6-31g*
end
print low
scf
direct
end
string
tol 0.001d0
stepsize 0.20d0
nbeads 24
maxiter 100
interpol 1
mode parallel
end
# We have to freeze the end points since this reaction has no barrier
set string:freezen .true.
set string:freeze1 .true.
task string scf

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,4 @@
running on 6 processors
argument 1 = acrylic-acid.nw
argument 1 = /home/workspace/jochena/nwchem/loc-bugfix/QA/tests/localize-ibo-aa/localize-ibo-aa.nw
@ -80,11 +79,9 @@ property
localization ibo 2
end
#task scf energy
task scf property
================================================================================
@ -92,7 +89,7 @@ task scf property
Northwest Computational Chemistry Package (NWChem) 7.2.0
Northwest Computational Chemistry Package (NWChem) 7.2.1
--------------------------------------------------------
@ -126,20 +123,20 @@ task scf property
---------------
hostname = ja04
program = /home/workspace/jochena/nwchem/github-fork-ibovir-devel/bin/LINUX64/nwchem
date = Tue Feb 14 12:19:49 2023
program = /home/workspace/jochena/nwchem/loc-bugfix/bin/LINUX64/nwchem
date = Wed Jan 3 09:35:21 2024
compiled = Tue_Feb_14_12:19:44_2023
source = /home/workspace/jochena/nwchem/github-fork-ibovir-devel
nwchem branch = 7.2.0
nwchem revision = nwchem_on_git-4622-g8f291f7cfd
compiled = Wed_Jan_03_09:30:30_2024
source = /home/workspace/jochena/nwchem/loc-bugfix
nwchem branch = 7.2.1
nwchem revision = nwchem_on_git-5270-g7a744690ee
ga revision = 5.8.0
use scalapack = F
input = acrylic-acid.nw
input = /home/workspace/jochena/nwchem/loc-bugfix/QA/tests/localize-ibo-aa/localize-ibo-aa.nw
prefix = testjob.
data base = ./testjob.db
status = startup
nproc = 5
nproc = 7
time left = -1s
@ -147,10 +144,10 @@ task scf property
Memory information
------------------
heap = 6553598 doubles = 50.0 Mbytes
stack = 6553595 doubles = 50.0 Mbytes
global = 13107200 doubles = 100.0 Mbytes (distinct from heap & stack)
total = 26214393 doubles = 200.0 Mbytes
heap = 6553594 doubles = 50.0 Mbytes
stack = 6553599 doubles = 50.0 Mbytes
global = 13107200 doubles = 100.0 Mbytes (distinct from heap & stack)
total = 26214393 doubles = 200.0 Mbytes
verify = yes
hardfail = no
@ -159,7 +156,7 @@ task scf property
---------------------
0 permanent = .
0 scratch = /tmp
0 scratch = .
@ -267,7 +264,7 @@ task scf property
library name resolved from: environment
library file name is: <
/home/workspace/jochena/nwchem/github-fork-ibovir-devel/src/basis/libraries/>
/home/workspace/jochena/nwchem/loc-bugfix/src/basis/libraries/>
@ -280,7 +277,7 @@ task scf property
library name resolved from: environment
library file name is: <
/home/workspace/jochena/nwchem/github-fork-ibovir-devel/src/basis/libraries/>
/home/workspace/jochena/nwchem/loc-bugfix/src/basis/libraries/>
Basis "iao basis" -> "" (spherical)
-----
@ -471,7 +468,7 @@ task scf property
Forming initial guess at 0.0s
Forming initial guess at 0.1s
Superposition of Atomic Density Guess
@ -489,7 +486,7 @@ task scf property
LUMO = -0.055429
Starting SCF solution at 0.1s
Starting SCF solution at 0.2s
@ -504,22 +501,22 @@ task scf property
iter energy gnorm gmax time
----- ------------------- --------- --------- --------
1 -265.3310324443 1.42D+00 2.92D-01 0.1
2 -265.4360577045 4.13D-01 8.78D-02 0.2
3 -265.4514376314 3.64D-02 9.22D-03 0.4
4 -265.4516512505 1.03D-03 2.34D-04 0.6
1 -265.3310324443 1.42D+00 2.92D-01 0.2
2 -265.4360577045 4.13D-01 8.78D-02 0.3
3 -265.4514376314 3.64D-02 9.22D-03 0.5
4 -265.4516512505 1.03D-03 2.34D-04 0.7
5 -265.4516513711 7.80D-06 1.92D-06 0.9
Final RHF results
------------------
Total SCF energy = -265.451651371050
Total SCF energy = -265.451651371051
One-electron energy = -682.442839763841
Two-electron energy = 255.473969802116
Nuclear repulsion energy = 161.517218590675
Time for solution = 0.9s
Time for solution = 0.7s
Final eigenvalues
@ -560,7 +557,7 @@ task scf property
-------------------------------------
Vector 6 Occ=2.000000D+00 E=-1.441125D+00
MO Center= -1.1D+00, 2.6D-02, -2.1D-17, r^2= 1.2D+00
MO Center= -1.1D+00, 2.6D-02, 7.5D-17, r^2= 1.2D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
58 0.413566 5 O s 30 0.293845 3 C s
@ -568,7 +565,7 @@ task scf property
57 0.208468 5 O s 45 0.150994 4 O s
Vector 7 Occ=2.000000D+00 E=-1.338769D+00
MO Center= -9.1D-01, -4.1D-01, 6.6D-17, r^2= 1.4D+00
MO Center= -9.1D-01, -4.1D-01, -5.3D-17, r^2= 1.4D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
44 0.424994 4 O s 58 -0.352816 5 O s
@ -577,7 +574,7 @@ task scf property
57 -0.176450 5 O s
Vector 8 Occ=2.000000D+00 E=-1.070923D+00
MO Center= 1.1D+00, 2.8D-01, 3.4D-17, r^2= 1.5D+00
MO Center= 1.1D+00, 2.8D-01, 1.6D-17, r^2= 1.5D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
16 0.400200 2 C s 2 0.337172 1 C s
@ -585,7 +582,7 @@ task scf property
17 0.160365 2 C s
Vector 9 Occ=2.000000D+00 E=-8.974613D-01
MO Center= 2.3D-01, 2.6D-01, -1.0D-16, r^2= 3.3D+00
MO Center= 2.3D-01, 2.6D-01, -3.0D-17, r^2= 3.3D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
30 -0.305983 3 C s 2 0.303431 1 C s
@ -594,7 +591,7 @@ task scf property
1 -0.152955 1 C s
Vector 10 Occ=2.000000D+00 E=-7.642057D-01
MO Center= 1.6D-01, 3.0D-01, 5.3D-16, r^2= 4.1D+00
MO Center= 1.6D-01, 3.0D-01, 1.4D-16, r^2= 4.1D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
60 0.316925 5 O px 16 -0.241192 2 C s
@ -604,7 +601,7 @@ task scf property
4 0.156757 1 C px 71 0.155748 6 H s
Vector 11 Occ=2.000000D+00 E=-7.114488D-01
MO Center= 2.7D-01, 9.8D-03, -3.3D-16, r^2= 3.1D+00
MO Center= 2.7D-01, 9.8D-03, -2.5D-16, r^2= 3.1D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
19 0.248395 2 C py 81 0.212079 8 H s
@ -614,7 +611,7 @@ task scf property
44 0.168207 4 O s 46 -0.165171 4 O px
Vector 12 Occ=2.000000D+00 E=-6.942998D-01
MO Center= -5.7D-01, -1.8D-01, -2.1D-16, r^2= 3.0D+00
MO Center= -5.7D-01, -1.8D-01, -7.4D-17, r^2= 3.0D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
61 0.332130 5 O py 47 -0.285481 4 O py
@ -624,7 +621,7 @@ task scf property
33 0.150516 3 C py
Vector 13 Occ=2.000000D+00 E=-6.290129D-01
MO Center= -9.9D-01, 1.2D-01, -3.2D-16, r^2= 1.6D+00
MO Center= -9.9D-01, 1.2D-01, 4.4D-16, r^2= 1.6D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
62 0.438625 5 O pz 65 0.308876 5 O pz
@ -632,7 +629,7 @@ task scf property
51 0.167682 4 O pz 37 0.158757 3 C pz
Vector 14 Occ=2.000000D+00 E=-6.234118D-01
MO Center= 8.0D-01, 1.3D-02, 4.5D-16, r^2= 3.8D+00
MO Center= 8.0D-01, 1.3D-02, -4.6D-16, r^2= 3.8D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
4 0.334286 1 C px 76 0.262842 7 H s
@ -641,7 +638,7 @@ task scf property
18 -0.161739 2 C px
Vector 15 Occ=2.000000D+00 E=-5.982438D-01
MO Center= -2.3D-02, 2.4D-01, -3.8D-17, r^2= 3.5D+00
MO Center= -2.3D-02, 2.4D-01, -8.4D-17, r^2= 3.5D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
61 0.305744 5 O py 18 0.273635 2 C px
@ -651,7 +648,7 @@ task scf property
33 -0.180575 3 C py 71 -0.170295 6 H s
Vector 16 Occ=2.000000D+00 E=-5.496397D-01
MO Center= 1.1D+00, 6.0D-02, 3.0D-16, r^2= 3.3D+00
MO Center= 1.1D+00, 6.0D-02, 5.2D-17, r^2= 3.3D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
5 0.298431 1 C py 71 -0.271981 6 H s
@ -660,7 +657,7 @@ task scf property
33 0.163556 3 C py 61 -0.150120 5 O py
Vector 17 Occ=2.000000D+00 E=-4.889073D-01
MO Center= -9.0D-01, -2.5D-01, -5.3D-16, r^2= 2.0D+00
MO Center= -9.0D-01, -2.5D-01, -2.7D-16, r^2= 2.0D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
62 -0.430815 5 O pz 48 0.407766 4 O pz
@ -668,7 +665,7 @@ task scf property
34 0.166236 3 C pz
Vector 18 Occ=2.000000D+00 E=-4.582158D-01
MO Center= -5.2D-01, -7.3D-01, -1.6D-16, r^2= 1.9D+00
MO Center= -5.2D-01, -7.3D-01, 1.5D-18, r^2= 1.9D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
46 0.549426 4 O px 49 0.417524 4 O px
@ -676,7 +673,7 @@ task scf property
64 -0.174821 5 O py 18 0.151160 2 C px
Vector 19 Occ=2.000000D+00 E=-4.009704D-01
MO Center= 1.1D+00, 1.5D-01, -4.1D-16, r^2= 2.0D+00
MO Center= 1.1D+00, 1.5D-01, 2.8D-16, r^2= 2.0D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
20 0.384445 2 C pz 6 0.352495 1 C pz
@ -684,7 +681,7 @@ task scf property
48 -0.214439 4 O pz 51 -0.173233 4 O pz
Vector 20 Occ=0.000000D+00 E= 9.067747D-02
MO Center= 8.9D-01, 1.5D-02, 9.9D-17, r^2= 3.0D+00
MO Center= 8.9D-01, 1.5D-02, 1.4D-16, r^2= 3.0D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
9 0.621145 1 C pz 23 -0.459696 2 C pz
@ -694,7 +691,7 @@ task scf property
65 0.155474 5 O pz
Vector 21 Occ=0.000000D+00 E= 1.933962D-01
MO Center= -2.6D+00, 1.3D-01, 2.0D-16, r^2= 2.6D+00
MO Center= -2.6D+00, 1.3D-01, -3.8D-16, r^2= 2.6D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
87 1.532433 9 H s 17 -0.762684 2 C s
@ -704,7 +701,7 @@ task scf property
60 0.181785 5 O px 3 0.180050 1 C s
Vector 22 Occ=0.000000D+00 E= 1.990748D-01
MO Center= 2.4D+00, 1.2D+00, 5.2D-17, r^2= 4.4D+00
MO Center= 2.4D+00, 1.2D+00, 7.7D-17, r^2= 4.4D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
3 1.857859 1 C s 77 -1.791874 7 H s
@ -714,7 +711,7 @@ task scf property
8 0.218519 1 C py 35 0.169789 3 C px
Vector 23 Occ=0.000000D+00 E= 2.314259D-01
MO Center= 1.7D+00, -2.0D-01, 9.0D-16, r^2= 6.0D+00
MO Center= 1.7D+00, -2.0D-01, -1.4D-15, r^2= 6.0D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
3 1.936960 1 C s 72 -1.805329 6 H s
@ -723,7 +720,7 @@ task scf property
8 -0.489914 1 C py 5 -0.154259 1 C py
Vector 24 Occ=0.000000D+00 E= 2.626515D-01
MO Center= 1.3D-01, -2.5D-02, 7.6D-16, r^2= 2.9D+00
MO Center= 1.3D-01, -2.5D-02, 3.0D-15, r^2= 2.9D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
37 -0.804941 3 C pz 23 0.756689 2 C pz
@ -733,7 +730,7 @@ task scf property
62 0.158924 5 O pz
Vector 25 Occ=0.000000D+00 E= 2.688800D-01
MO Center= 1.9D+00, 3.8D-01, -1.8D-15, r^2= 6.9D+00
MO Center= 1.9D+00, 3.8D-01, -1.9D-16, r^2= 6.9D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
77 -1.706163 7 H s 72 1.689090 6 H s
@ -743,7 +740,7 @@ task scf property
87 -0.319009 9 H s 3 -0.288918 1 C s
Vector 26 Occ=0.000000D+00 E= 3.855495D-01
MO Center= -4.6D-01, -2.3D-01, -1.7D-16, r^2= 3.7D+00
MO Center= -4.6D-01, -2.3D-01, -1.3D-15, r^2= 3.7D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
31 4.026240 3 C s 45 -1.439431 4 O s
@ -753,7 +750,7 @@ task scf property
50 -0.560923 4 O py 82 -0.528079 8 H s
Vector 27 Occ=0.000000D+00 E= 4.475195D-01
MO Center= 5.8D-01, 2.5D-01, 3.4D-16, r^2= 3.9D+00
MO Center= 5.8D-01, 2.5D-01, 3.0D-16, r^2= 3.9D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
21 3.533345 2 C px 3 -2.731556 1 C s
@ -763,7 +760,7 @@ task scf property
7 0.878572 1 C px 30 0.524028 3 C s
Vector 28 Occ=0.000000D+00 E= 4.523376D-01
MO Center= 1.5D+00, -1.4D-01, -3.7D-16, r^2= 4.3D+00
MO Center= 1.5D+00, -1.4D-01, 5.7D-17, r^2= 4.3D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
17 6.048068 2 C s 3 -4.672145 1 C s
@ -773,7 +770,7 @@ task scf property
59 -0.983223 5 O s 36 0.975052 3 C py
Vector 29 Occ=0.000000D+00 E= 4.789847D-01
MO Center= 2.6D-01, 3.3D-01, 2.1D-18, r^2= 3.8D+00
MO Center= 2.6D-01, 3.3D-01, -2.4D-17, r^2= 3.8D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
17 2.858248 2 C s 3 -2.090889 1 C s
@ -783,7 +780,7 @@ task scf property
35 0.814942 3 C px 63 0.614144 5 O px
Vector 30 Occ=0.000000D+00 E= 5.702926D-01
MO Center= 1.4D+00, 5.8D-01, -1.9D-15, r^2= 2.8D+00
MO Center= 1.4D+00, 5.8D-01, 4.7D-15, r^2= 2.8D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
17 2.332617 2 C s 31 -1.303425 3 C s
@ -831,9 +828,9 @@ task scf property
2 2 0 0 -15.439146 0.000000 246.890742
2 1 1 0 0.077897 0.000000 0.000002
2 1 0 1 0.000000 0.000000 0.000000
2 1 0 1 -0.000000 0.000000 0.000000
2 0 2 0 -24.880694 0.000000 90.697964
2 0 1 1 -0.000000 0.000000 0.000000
2 0 1 1 0.000000 0.000000 0.000000
2 0 0 2 -22.450650 0.000000 0.000000
@ -866,7 +863,7 @@ task scf property
6 2.1555070209 1.5083589529 8.63D-05
7 2.1555070209 1.5083589538 6.36D-06
8 2.1555070209 1.5083589538 9.22D-08
9 2.1555070209 1.5083589538 3.73D-09
9 2.1555070209 1.5083589538 5.27D-09
IBO loc: largest element in C(MO,T) C(MO) -1: 0.00000000
should be zero, for IBOs in the IAO basis
@ -910,17 +907,16 @@ task scf property
iter Max. delocal Mean delocal Converge
---- ------------ ------------ --------
1 5.7963239473 4.2732750386 0.00D+00
2 2.4941110119 2.1820228090 7.23D-01
3 2.1364906389 1.9920797446 4.32D-01
4 2.1348072188 1.9904017968 1.39D-01
5 2.1348013497 1.9903805756 9.02D-03
6 2.1348017491 1.9903804736 7.84D-04
7 2.1348017624 1.9903804751 5.13D-05
8 2.1348017624 1.9903804751 3.41D-06
9 2.1348017624 1.9903804751 2.26D-07
10 2.1348017624 1.9903804751 1.34D-08
11 2.1348017624 1.9903804751 5.27D-09
1 7.4855751970 4.3168336458 0.00D+00
2 2.3398085416 2.0873841008 7.55D-01
3 2.1346570467 1.9908868937 3.58D-01
4 2.1348158454 1.9903813928 2.36D-02
5 2.1348018590 1.9903804763 1.30D-03
6 2.1348017645 1.9903804752 8.92D-05
7 2.1348017626 1.9903804751 5.81D-06
8 2.1348017626 1.9903804751 3.87D-07
9 2.1348017626 1.9903804751 2.53D-08
10 2.1348017626 1.9903804751 0.00D+00
IBO loc: largest element in C(MO,T) C(MO) -1: 0.00000000
should be zero, for IBOs in the IAO basis
@ -943,9 +939,35 @@ task scf property
in file locorb.movecs, number
20 to 29
IBO transformation (occ.) written to file
./testjob.lmotrans
Exiting Localization driver routine
Task times cpu: 1.0s wall: 1.2s
-------------
Dipole Moment
-------------
Center of charge (in au) is the expansion point
X = 0.0000000 Y = -0.0000000 Z = 0.0000000
Dipole moment 0.6842748873 A.U.
DMX 0.3687094649 DMXEFC 0.0000000000
DMY 0.5764420629 DMYEFC 0.0000000000
DMZ 0.0000000000 DMZEFC 0.0000000000
-EFC- dipole 0.0000000000 A.U.
Total dipole 0.6842748873 A.U.
Dipole moment 1.7392664243 Debye(s)
DMX 0.9371730637 DMXEFC 0.0000000000
DMY 1.4651806521 DMYEFC 0.0000000000
DMZ 0.0000000000 DMZEFC 0.0000000000
-EFC- dipole 0.0000000000 DEBYE(S)
Total dipole 1.7392664243 DEBYE(S)
1 a.u. = 2.541766 Debyes
Task times cpu: 0.9s wall: 0.9s
NWChem Input Module
@ -967,7 +989,7 @@ MA usage statistics:
current number of blocks 0 0
maximum number of blocks 22 14
current total bytes 0 0
maximum total bytes 139376 22511288
maximum total bytes 139408 22511320
maximum total K-bytes 140 22512
maximum total M-bytes 1 23
@ -1025,4 +1047,4 @@ MA usage statistics:
K. Glaesemann, G. Sandrone, M. Stave, H. Taylor, G. Thomas, J. H. van Lenthe,
A. T. Wong, Z. Zhang.
Total times cpu: 1.0s wall: 1.2s
Total times cpu: 1.0s wall: 1.0s

View file

@ -0,0 +1,553 @@
start testjob
title "allylic_radical IBO localization"
geometry units angstrom
C -0.25784636 1.21851111 0.00000000
H -1.34417006 1.24248062 0.00000000
H 0.25678777 2.17304362 0.00000000
C 0.43614025 0.01428420 0.00000000
H 1.52527261 0.06222464 0.00000000
C -0.14953749 -1.24624893 0.00000000
H -1.22943924 -1.36577805 0.00000000
H 0.44767502 -2.15141880 0.00000000
end
basis "ao basis"
* library 6-31G*
end
basis "iao basis"
* library STO-6G
end
dft
xc b3lyp
mult 2
end
property
localization ibo 2
end
#task dft property
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;1
output allyl_radical-alpha-00001.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;2
output allyl_radical-alpha-00002.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;3
output allyl_radical-alpha-00003.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;4
output allyl_radical-alpha-00004.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;5
output allyl_radical-alpha-00005.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;6
output allyl_radical-alpha-00006.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;7
output allyl_radical-alpha-00007.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;8
output allyl_radical-alpha-00008.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;9
output allyl_radical-alpha-00009.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;10
output allyl_radical-alpha-00010.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;11
output allyl_radical-alpha-00011.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;12
output allyl_radical-alpha-00012.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;13
output allyl_radical-alpha-00013.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;14
output allyl_radical-alpha-00014.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;15
output allyl_radical-alpha-00015.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;16
output allyl_radical-alpha-00016.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;17
output allyl_radical-alpha-00017.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;18
output allyl_radical-alpha-00018.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;19
output allyl_radical-alpha-00019.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin alpha
orbitals view;1;20
output allyl_radical-alpha-00020.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;1
output allyl_radical-beta-00001.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;2
output allyl_radical-beta-00002.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;3
output allyl_radical-beta-00003.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;4
output allyl_radical-beta-00004.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;5
output allyl_radical-beta-00005.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;6
output allyl_radical-beta-00006.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;7
output allyl_radical-beta-00007.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;8
output allyl_radical-beta-00008.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;9
output allyl_radical-beta-00009.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;10
output allyl_radical-beta-00010.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;11
output allyl_radical-beta-00011.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;12
output allyl_radical-beta-00012.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;13
output allyl_radical-beta-00013.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;14
output allyl_radical-beta-00014.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;15
output allyl_radical-beta-00015.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;16
output allyl_radical-beta-00016.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;17
output allyl_radical-beta-00017.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;18
output allyl_radical-beta-00018.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;19
output allyl_radical-beta-00019.cube
end
task dplot
dplot
vectors locorb.movecs
limitxyz
-5.34417006 5.52527261 50
-6.1514188 6.17304362 50
-4.0 4.0 50
gaussian
spin beta
orbitals view;1;20
output allyl_radical-beta-00020.cube
end
task dplot

View file

@ -0,0 +1,33 @@
start testjob
title "allylic_radical IBO localization"
geometry units angstrom
C -0.25784636 1.21851111 0.00000000
H -1.34417006 1.24248062 0.00000000
H 0.25678777 2.17304362 0.00000000
C 0.43614025 0.01428420 0.00000000
H 1.52527261 0.06222464 0.00000000
C -0.14953749 -1.24624893 0.00000000
H -1.22943924 -1.36577805 0.00000000
H 0.44767502 -2.15141880 0.00000000
end
basis "ao basis"
* library 6-31G*
end
basis "iao basis"
* library STO-6G
end
dft
xc b3lyp
mult 2
end
property
localization ibo 2
end
task dft property

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,29 @@
start testjob
title "allylic_radical IBO localization"
geometry units angstrom
C -0.25784636 1.21851111 0.00000000
H -1.34417006 1.24248062 0.00000000
H 0.25678777 2.17304362 0.00000000
C 0.43614025 0.01428420 0.00000000
H 1.52527261 0.06222464 0.00000000
C -0.14953749 -1.24624893 0.00000000
H -1.22943924 -1.36577805 0.00000000
H 0.44767502 -2.15141880 0.00000000
end
basis "ao basis"
* library 6-31G
end
dft
xc b3lyp
mult 2
end
property
localization pm 2
end
task dft property

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -12,14 +12,11 @@
# (9) 1/2 * delV * delQdyn term = -0.0000281700 ( -0.0008 eV)
# (10) VEM vertical excitation energy (6) - (1) = 0.0721102600 ( 1.9622 eV)
#
echo 'p2ta_VEMExc_StressTest: Porphyrin in DMSO'
echo
title "p2ta_VEMExc_StressTest: Porphyrin in DMSO"
start p2ta-vem
scratch_dir /scratch
permanent_dir ./perm
memory stack 1200 mb heap 100 mb global 1500 mb noverify
geometry units angstrom
symmetry d2h

File diff suppressed because it is too large Load diff

View file

@ -13,10 +13,10 @@ end
python
print ("value check:")
print ("INT = "), INT
print ("DBL = "), DBL
print ("CHAR = "), CHAR
print ("LOGICAL = "), LOGICAL
print ("INT = ", INT)
print ("DBL = ", DBL)
print ("CHAR = ", CHAR)
print ("LOGICAL = ", LOGICAL)
rtdb_put("test_int2", 22)
print (' Done 1')

File diff suppressed because it is too large Load diff

View file

@ -58,18 +58,19 @@ END
scf
thresh 1.0e-10
tol2e 1.0e-10
doublet
tol2e 1.0e-13
doublet
rohf
end
tce
freeze atomic
creomsd(t)
eomsol 1
tilesize 10
thresh 1.0d-6
thresh 5.0d-6
nroots 2
end
task tce energy
task tce energy

File diff suppressed because it is too large Load diff

View file

@ -2,15 +2,21 @@
[![NWChem_CI](https://img.shields.io/github/actions/workflow/status/nwchemgit/nwchem/github_actions.yml?style=plastic)](https://github.com/nwchemgit/nwchem/actions)
<!---[![Build Travis-CI Status](https://img.shields.io/travis/nwchemgit/nwchem.svg)](https://travis-ci.org/nwchemgit/nwchem/builds)--->
[![License](https://img.shields.io/badge/license-ECL2-blue.svg)](https://raw.githubusercontent.com/nwchemgit/nwchem/master/LICENSE.md)
[![Github Downloads All Releases](https://img.shields.io/github/downloads/nwchemgit/nwchem/total.svg)](https://github.com/nwchemgit/nwchem/releases)
![GitHub top language](https://img.shields.io/github/languages/top/nwchemgit/nwchem)
![Github Downloads All Releases](https://img.shields.io/github/downloads/nwchemgit/nwchem/total)
![Homebrew Downloads](https://img.shields.io/homebrew/installs/dy/nwchem?label=Homebrew%20downloads)![Conda-Forge Downloads](https://img.shields.io/conda/dn/conda-forge/nwchem?label=Conda-forge%20downloads)![Docker Pulls](https://img.shields.io/docker/pulls/nwchemorg/nwchem-700.fedora.sockets?label=Docker%20pulls)
[![Github Downloads Release 6.8](https://img.shields.io/github/downloads/nwchemgit/nwchem/v6.8-release/total.svg)](https://github.com/nwchemgit/nwchem/releases/tag/v6.8-release)
[![Github Downloads Release 6.8.1](https://img.shields.io/github/downloads/nwchemgit/nwchem/6.8.1-release/total.svg)](https://github.com/nwchemgit/nwchem/releases/tag/6.8.1-release)
[![Github Downloads Release 7.0.0](https://img.shields.io/github/downloads/nwchemgit/nwchem/v7.0.0-release/total.svg)](https://github.com/nwchemgit/nwchem/releases/tag/v7.0.0-release)
[![Github Downloads Release 7.0.2](https://img.shields.io/github/downloads/nwchemgit/nwchem/v7.0.2-release/total.svg)](https://github.com/nwchemgit/nwchem/releases/tag/v7.0.2-release)
[![Github Downloads Release 7.2.0](https://img.shields.io/github/downloads/nwchemgit/nwchem/v7.2.0-release/total.svg)](https://github.com/nwchemgit/nwchem/releases/tag/v7.2.0-release)
![Github Downloads Release 6.8](https://img.shields.io/github/downloads/nwchemgit/nwchem/v6.8-release/total)
![Github Downloads Release 6.8.1](https://img.shields.io/github/downloads/nwchemgit/nwchem/6.8.1-release/total)
![Github Downloads Release 7.0.0](https://img.shields.io/github/downloads/nwchemgit/nwchem/v7.0.0-release/total)
![Github Downloads Release 7.0.2](https://img.shields.io/github/downloads/nwchemgit/nwchem/v7.0.2-release/total)
![Github Downloads Release 7.2.0](https://img.shields.io/github/downloads/nwchemgit/nwchem/v7.2.0-release/total)
![Github Downloads Release 7.2.1](https://img.shields.io/github/downloads/nwchemgit/nwchem/v7.2.1-release/total)
![Github Downloads Release 7.2.2](https://img.shields.io/github/downloads/nwchemgit/nwchem/v7.2.2-release/total)
![Github Downloads Release 7.2.3](https://img.shields.io/github/downloads/nwchemgit/nwchem/v7.2.3-release/total)
[![All Releases tags](https://img.shields.io/github/release/nwchemgit/nwchem/all.svg)](https://github.com/nwchemgit/nwchem/releases)
[![All Releases tags](https://img.shields.io/github/release/nwchemgit/nwchem/all.svg)](https://github.com/nwchemgit/nwchem/releases)
![GitHub Release Date](https://img.shields.io/github/release-date/nwchemgit/nwchem)
[![EMSL](https://rawgit.com/nwchemgit/nwchem/master/contrib/git.nwchem/emsl_logo2.svg)](https://www.emsl.pnl.gov)
## NWChem: Open Source High-Performance Computational Chemistry
@ -20,25 +26,25 @@ located at the Pacific Northwest National Laboratory (PNNL) in Washington State
### Scalable computational chemistry tools
Source download instructions
Source download instructions for developers
* Master
```
git clone https://github.com/nwchemgit/nwchem.git
* 7.2.0 Release
git clone -b release-7-2-0 https://github.com/nwchemgit/nwchem.git nwchem-7.2.0
### Release 7.2.0
```
* 7.2.3 Release
```
git clone -b hotfix/release-7-2-0 https://github.com/nwchemgit/nwchem.git nwchem-7.2.3
```
### Release 7.2.3
Release files available at the page
https://github.com/nwchemgit/nwchem/releases/tag/v7.2.0-release
https://github.com/nwchemgit/nwchem/releases/tag/v7.2.3-release
Tar files for download:
https://github.com/nwchemgit/nwchem/releases/download/v7.2.0-release/nwchem-7.2.0-release.revision-d0d141fd-srconly.2023-03-10.tar.bz2
https://github.com/nwchemgit/nwchem/releases/download/v7.2.0-release/nwchem-7.2.0-release.revision-d0d141fd-nonsrconly.2023-03-10.tar.bz2
https://github.com/nwchemgit/nwchem/releases/download/v7.2.3-release/nwchem-7.2.3-release.revision-d690e065-srconly.2024-08-27.tar.bz2
https://github.com/nwchemgit/nwchem/releases/download/v7.2.3-release/nwchem-7.2.3-release.revision-d690e065-nonsrconly.2024-08-27.tar.bz2
Release notes available at
https://raw.githubusercontent.com/nwchemgit/nwchem/v7.2.0-release/release.notes.7.2.0
https://github.com/nwchemgit/nwchem/blob/master/release.notes.7.2.3.md
### Documentation
https://nwchemgit.github.io

13
contrib/getfiles.nwchem Normal file → Executable file
View file

@ -3,13 +3,18 @@
# $Id$
cd $NWCHEM_TOP/src/nwpw/nwpwlib/nwpwxc/
rm -f dftd3.tgz
wget https://www.chemie.uni-bonn.de/pctc/mulliken-center/software/dft-d3/dftd3.tgz
wget https://www.chemie.uni-bonn.de/grimme/de/software/dft-d3/dftd3.tgz
cd $NWCHEM_TOP/src/libext/openblas
VERSION=0.3.13
VERSION=0.3.27
rm -rf OpenBLAS*gz
curl -L https://github.com/xianyi/OpenBLAS/archive/v${VERSION}.tar.gz -o OpenBLAS-${VERSION}.tar.gz
cd $NWCHEM_TOP/src/libext/scalapack
COMMIT=bc6cad585362aa58e05186bb85d4b619080c45a9
COMMIT=782e739f8eb0e7f4d51ad7dd23fc1d03dc99d240
rm -f scalapack-$COMMIT.zip
curl -L https://github.com/Reference-ScaLAPACK/scalapack/archive/$COMMIT.zip -o scalapack-$COMMIT.zip
#caching
if [ ! -z "$1" ]; then
rsync -av $NWCHEM_TOP/src/nwpw/nwpwlib/nwpwxc/dftd3.tgz "$1"/.
rsync -av $NWCHEM_TOP/src/libext/openblas/OpenBLAS*gz "$1"/.
rsync -av $NWCHEM_TOP/src/libext/scalapack/scalapack*zip "$1"/.
fi

View file

@ -1,18 +1,29 @@
#!/usr/bin/env bash
Vx=7
Vy=2
Vz=0
NWVER="$Vx"."$Vy"."$Vz"-release
#arg #1 release name
#arg #2 input_date
if [ $# != 2 ]; then echo need 2 arguments: version and date \(format: YYYY-MM-DD\) ; exit 123 ;fi
release_version=$1
input_date=$2
echo " input arguments "
echo " version = $release_version"
echo " input_date = $input_date"
#Vx=7
#Vy=2
#Vz=3
#NWVER="$Vx"."$Vy"."$Vz"-release
NWVER="$release_version"-release
unset NWCHEM_TOP
export USE_MPI=y
TOPDIR=nwchem-"$Vx"."$Vy"."$Vz"
BRANCH=release-"$Vx"-"$Vy"-"$Vz"
TOPDIR=nwchem-"$release_version"
echo TOPDIR is $TOPDIR
#BRANCH=release-"$Vx"-"$Vy"-"$Vz"
BRANCH=hotfix/release-7-2-0
#TOPDIR=nwchem
#BRANCH=master
# need to change BRANCH for patch releases
rm -rf temp.`date +%Y%m%d`
mkdir -p temp.`date +%Y%m%d`
cd temp.`date +%Y%m%d`
rm -rf temp.$input_date
mkdir -p temp.$input_date
cd temp.$input_date
git clone --depth 1 --shallow-submodules -b $BRANCH https://github.com/nwchemgit/nwchem $TOPDIR
cd $TOPDIR/src/tools
rm -f *.tar.*
@ -23,9 +34,11 @@ cd ../util
cd ..
# set USE_64TO32=y on by default since we do make 64_to_32 for this tarball
patch -p1 < ../contrib/git.nwchem/use6432y.patch
# do make 64_to_32
export NWCHEM_MODULES=all\ python\ gwmol
make nwchem_config NWCHEM_MODULES=all\ python
# do make 64_to_32
export BLAS_SIZE=4
export USE_TBLITE=1
export NWCHEM_MODULES=all\ python\ gwmol\ xtb
make nwchem_config NWCHEM_MODULES=all\ python\ xtb
export EACCSD=1
export IPCCSD=1
export CCSDTQ=1
@ -36,6 +49,7 @@ make 64_to_32 USE_INTERNALBLAS=y
#rm `find peigs -name peigs_stamp.*`
# cleanup on make nwchem_config output to address https://github.com/nwchemgit/nwchem/issues/178
rm -f config/nwchem_config.h config/NWCHEM_CONFIG stubs.F
rm -f *txt
cd ..
rm -rf bin lib
REVGIT="$(git describe --always)"
@ -43,15 +57,21 @@ cd ..
echo 'revision ' $REVGIT
pwd
rm -f *md5 *tar*
tar --exclude=".git" -czf nwchem-"${NWVER}".revision-"${REVGIT}"-src.`date +%Y-%m-%d`.tar.gz $TOPDIR/*
md5sum nwchem-"${NWVER}".revision-"${REVGIT}"-src.`date +%Y-%m-%d`.tar.gz > nwchem-"${NWVER}".revision"${REVGIT}"-src.`date +%Y-%m-%d`.tar.gz.md5
tar --exclude=".git" -cjf nwchem-"${NWVER}".revision-"${REVGIT}"-src.`date +%Y-%m-%d`.tar.bz2 $TOPDIR/*
md5sum nwchem-"${NWVER}".revision-"${REVGIT}"-src.`date +%Y-%m-%d`.tar.bz2 > nwchem-"${NWVER}".revision"${REVGIT}"-src.`date +%Y-%m-%d`.tar.bz2.md5
tar --exclude=".git" -cJf nwchem-"${NWVER}".revision-"${REVGIT}"-src.`date +%Y-%m-%d`.tar.xz $TOPDIR/*
md5sum nwchem-"${NWVER}".revision-"${REVGIT}"-src.`date +%Y-%m-%d`.tar.xz > nwchem-"${NWVER}".revision"${REVGIT}"-src.`date +%Y-%m-%d`.tar.xz.md5
tar --exclude=".git" -cjf nwchem-"${NWVER}".revision-"${REVGIT}"-srconly.`date +%Y-%m-%d`.tar.bz2 $TOPDIR/src/*
md5sum nwchem-"${NWVER}".revision-"${REVGIT}"-srconly.`date +%Y-%m-%d`.tar.bz2> nwchem-"${NWVER}".revision"${REVGIT}"-srconly.`date +%Y-%m-%d`.tar.bz2.md5
tar --exclude=".git" --exclude="src" -cjf nwchem-"${NWVER}".revision-"${REVGIT}"-nonsrconly.`date +%Y-%m-%d`.tar.bz2 $TOPDIR/*
md5sum nwchem-"${NWVER}".revision-"${REVGIT}"-nonsrconly.`date +%Y-%m-%d`.tar.bz2 > nwchem-"${NWVER}".revision"${REVGIT}"-nonsrconly.`date +%Y-%m-%d`.tar.bz2.md5
echo 'generating tarballs '
tar --exclude=".git" -czf nwchem-"${NWVER}".revision-"${REVGIT}"-src."$input_date".tar.gz $TOPDIR/*
echo 'tarball #1 done'
md5sum nwchem-"${NWVER}".revision-"${REVGIT}"-src."$input_date".tar.gz > nwchem-"${NWVER}".revision"${REVGIT}"-src."$input_date".tar.gz.md5
tar --exclude=".git" -cjf nwchem-"${NWVER}".revision-"${REVGIT}"-src."$input_date".tar.bz2 $TOPDIR/*
echo 'tarball #2 done'
md5sum nwchem-"${NWVER}".revision-"${REVGIT}"-src."$input_date".tar.bz2 > nwchem-"${NWVER}".revision"${REVGIT}"-src."$input_date".tar.bz2.md5
tar --exclude=".git" -cJf nwchem-"${NWVER}".revision-"${REVGIT}"-src."$input_date".tar.xz $TOPDIR/*
echo 'tarball #3 done'
md5sum nwchem-"${NWVER}".revision-"${REVGIT}"-src."$input_date".tar.xz > nwchem-"${NWVER}".revision"${REVGIT}"-src."$input_date".tar.xz.md5
tar --exclude=".git" -cjf nwchem-"${NWVER}".revision-"${REVGIT}"-srconly."$input_date".tar.bz2 $TOPDIR/src/*
echo 'tarball #4 done'
md5sum nwchem-"${NWVER}".revision-"${REVGIT}"-srconly."$input_date".tar.bz2> nwchem-"${NWVER}".revision"${REVGIT}"-srconly."$input_date".tar.bz2.md5
tar --exclude=".git" --exclude="src" -cjf nwchem-"${NWVER}".revision-"${REVGIT}"-nonsrconly."$input_date".tar.bz2 $TOPDIR/*
echo 'tarball #5 done'
md5sum nwchem-"${NWVER}".revision-"${REVGIT}"-nonsrconly."$input_date".tar.bz2 > nwchem-"${NWVER}".revision"${REVGIT}"-nonsrconly."$input_date".tar.bz2.md5
ls -lrt
echo 'upload to http://192.101.105.206/'
#echo 'upload to http://192.101.105.206/'

View file

@ -23,7 +23,6 @@ jobs:
matrix:
os:
- [self-hosted, ubuntu1604]
- [self-hosted, osx-arm64]
blas: [build_openblas]
blas_size:
- 8
@ -43,7 +42,7 @@ jobs:
build_plumed:
- 1
branch:
- master
- main
include:
- os: [self-hosted, ubuntu1804]
experimental: false
@ -55,16 +54,7 @@ jobs:
use_libxc: 1
use_openmp: 2
use_tblite: 1
- os: [self-hosted, osx-arm64]
experimental: false
mpi_impl: build_mpich
armci_network: MPI-PT
nwchem_modules: "all python xtb"
fc: ifort
blas: "build_openblas"
use_libxc: 1
use_openmp: 2
use_tblite: 1
simint_vector: avx2
- os: [self-hosted, ubuntu1604]
experimental: false
mpi_impl: intel
@ -74,6 +64,7 @@ jobs:
blas: "build_openblas"
use_libxc: 1
use_tblite: 1
simint_vector: avx2
- os: [self-hosted, fedora]
experimental: false
mpi_impl: openmpi
@ -85,7 +76,8 @@ jobs:
use_simint: 1
use_openmp: 2
use_tblite: 1
branch: hotfix/release-7-2-0
simint_vector: scalar
branch: main
- os: [self-hosted, ubuntu2304]
experimental: false
mpi_impl: openmpi
@ -96,28 +88,53 @@ jobs:
use_libxc: 1
use_openmp: 2
use_tblite: 1
branch: hotfix/release-7-2-0
simint_vector: scalar
branch: main
- os: [self-hosted, osx-arm64, ajay]
experimental: false
mpi_impl: openmpi
armci_network: MPI-TS
nwchem_modules: "all python "
fc: gfortran
blas: "build_openblas"
use_libxc: 1
use_simint: 1
simint_vector: scalar
branch: main
- os: [self-hosted, osx-x64]
experimental: false
mpi_impl: openmpi
armci_network: MPI-TS
nwchem_modules: "all python xtb"
fc: gfortran
blas: "build_openblas"
use_libxc: 1
use_simint: 1
use_openmp: 2
use_tblite: 1
simint_vector: avx2
branch: main
fail-fast: false
env:
MPI_IMPL: ${{ matrix.mpi_impl }}
ARMCI_NETWORK: ${{ matrix.armci_network }}
NWCHEM_MODULES: ${{ matrix.nwchem_modules }}
USE_SIMINT: ${{ matrix.use_simint }}
USE_LIBXC: ${{ matrix.use_libxc }}
USE_TBLITE: ${{ matrix.use_tblite }}
BUILD_PLUMED: ${{ matrix.build_plumed }}
FC: ${{ matrix.fc }}
CC: ${{ matrix.cc }}
COMEX_MAX_NB_OUTSTANDING: 16
SIMINT_MAXAM: 4
SIMINT_VECTOR: avx2
BLAS_ENV: ${{ matrix.blas }}
BLAS_SIZE: ${{ matrix.blas_size }}
USE_OPENMP: ${{ matrix.use_openmp }}
MPI_IMPL: ${{ matrix.mpi_impl }}
ARMCI_NETWORK: ${{ matrix.armci_network }}
NWCHEM_MODULES: ${{ matrix.nwchem_modules }}
USE_SIMINT: ${{ matrix.use_simint }}
USE_LIBXC: ${{ matrix.use_libxc }}
USE_TBLITE: ${{ matrix.use_tblite }}
BUILD_PLUMED: ${{ matrix.build_plumed }}
FC: ${{ matrix.fc }}
CC: ${{ matrix.cc }}
COMEX_MAX_NB_OUTSTANDING: 16
SIMINT_MAXAM: 4
SIMINT_VECTOR: ${{ matrix.simint_vector }}
BLAS_ENV: ${{ matrix.blas }}
BLAS_SIZE: ${{ matrix.blas_size }}
USE_OPENMP: ${{ matrix.use_openmp }}
continue-on-error: ${{ matrix.experimental }}
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 32
ref: ${{ matrix.branch }}
@ -133,11 +150,16 @@ jobs:
shell: bash
- name: Setup cache
id: setup-cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: |
~/cache
key: ${{ runner.os }}-${{ matrix.mpi_impl}}-${{ matrix.fc}}-xcode${{ matrix.xcode_version}}-simint${{ matrix.use_simint}}-blas${{ matrix.blas}}-blas_size${{ matrix.blas_size}}-libxc${{matrix.use_libxc}}-tblite${{matrix.use_tblite}}-simd${{ env.simd }}-nwchemcache-v003
key: |
${{ runner.os }}-${{ matrix.mpi_impl}}-${{ matrix.fc}}
-xcode${{ matrix.xcode_version}}-simint${{ matrix.use_simint}}
-blas${{ matrix.blas}}-blas_size${{ matrix.blas_size}}
-libxc${{matrix.use_libxc}}-tblite${{matrix.use_tblite}}
-simd${{ env.simd }}-nwchemcache-v003
- name: fetch cache
if: steps.setup-cache.outputs.cache-hit == 'true'
run: |
@ -145,8 +167,10 @@ jobs:
- name: compile
id: compile
run: |
./travis/config_nwchem.sh
./travis/compile_nwchem.sh
mytee=tee
if [[ `uname -s` == "Darwin" ]]; then mytee=gtee; fi
./travis/config_nwchem.sh | $mytee >(ts "%d%b%Y %H:%M:%S" > ../../../config.log.` date +%b%d%Y_%H:%M`)
./travis/compile_nwchem.sh | $mytee >(ts "%d%b%Y %H:%M:%S" > ../../../compile.log.` date +%b%d%Y_%H:%M`)
- name: Check compilation result
if: ${{ failure() }}
run: |
@ -171,9 +195,3 @@ jobs:
if: ${{ failure() }} && steps.qa_test.outcome == 'failure'
run: |
./travis/check_qas.sh

View file

@ -15,7 +15,7 @@ jobs:
runs-on: [ubuntu-latest]
steps:
- name: Checkout nwchem
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
repository: nwchemgit/nwchem
persist-credentials: false

46
release.notes.7.2.1.md Normal file
View file

@ -0,0 +1,46 @@
NWChem Version 7.2.1 Release Notes
==================================
NWChem is now available on Github at
https://github.com/nwchemgit/nwchem
User Manual available from the NWChem website
https://nwchemgit.github.io
NWChem 7.2.1 is released as open-source under the ECL 2.0 license.
NWChem 7.2.1 will be released with the latest Global Arrays Toolkit (v5.8.2).
The 7.2.1 release is a maintenance release containing fixes/enhancements for the NWChem 7.2.0 tree
NEW FUNCTIONALITY
-----
N/A
BUG FIXES/ENHANCEMENTS
-----
* fix compilation for Cray compilers
* fixes for macOS Xcode 15
* fixes for Intel OneAPI 2023 releases
* memory fixes for ARMCI_NETWORK=MPI-PR https://github.com/GlobalArrays/ga/pull/310
GITHUB ISSUES ADDRESSED
----
* [Shifter Image Parallelization Issues](https://github.com/nwchemgit/nwchem/issues/775)
* [Custom dielectric constant is ignored in COSMO calculations](https://github.com/nwchemgit/nwchem/issues/776)
* [NMR hyperfine coupling when wavefunction is closed-shell](https://github.com/nwchemgit/nwchem/issues/788)
* [Triplet CDSpectrum calculations failing](https://github.com/nwchemgit/nwchem/issues/796)
* [7.2.0 fails computing gradients of bare ECPs](https://github.com/nwchemgit/nwchem/issues/801)
* [SegV when USE_INTERNALBLAS=1 for version 7.2.0](https://github.com/nwchemgit/nwchem/issues/804)
* [Undefined symbol "ycnrm2"](https://github.com/nwchemgit/nwchem/issues/817)
* [Wrong symmetry assignments in TDDFT](https://github.com/nwchemgit/nwchem/issues/828)
* [GW might lead to incorrect results when symmetry is on](https://github.com/nwchemgit/nwchem/issues/829)
* [ch5n_nbo QA test fails](https://github.com/nwchemgit/nwchem/issues/864)

54
release.notes.7.2.2.md Normal file
View file

@ -0,0 +1,54 @@
NWChem Version 7.2.2 Release Notes
==================================
NWChem is now available on Github at
https://github.com/nwchemgit/nwchem
User Manual available from the NWChem website
https://nwchemgit.github.io
NWChem 7.2.2 is released as open-source under the ECL 2.0 license.
NWChem 7.2.2 will be released with the latest Global Arrays Toolkit (v5.8.2).
The 7.2.2 release is a maintenance release containing fixes/enhancements for the NWChem 7.2.0 tree
The change log below is relative to the 7.2.0 code base.
NEW FUNCTIONALITY
-----
N/A
BUG FIXES/ENHANCEMENTS
-----
* header of the output file prints version 7.2.2
* various fixes for big endian architectures (e.g.: sparc64, s390x)
* compilation fixes for 64-bit architectures other than x86_64 and aarch64
* fix compilation for Cray compilers
* fixes for macOS Xcode 15
* fixes for Intel OneAPI 2023 releases
* memory fixes for ARMCI_NETWORK=MPI-PR https://github.com/GlobalArrays/ga/pull/310
GITHUB ISSUES ADDRESSED
----
* [pyqa3: Segmentation fault on Python 3.12](https://github.com/nwchemgit/nwchem/issues/892)
* [Shifter Image Parallelization Issues](https://github.com/nwchemgit/nwchem/issues/775)
* [Custom dielectric constant is ignored in COSMO calculations](https://github.com/nwchemgit/nwchem/issues/776)
* [NMR hyperfine coupling when wavefunction is closed-shell](https://github.com/nwchemgit/nwchem/issues/788)
* [Triplet CDSpectrum calculations failing](https://github.com/nwchemgit/nwchem/issues/796)
* [7.2.0 fails computing gradients of bare ECPs](https://github.com/nwchemgit/nwchem/issues/801)
* [SegV when USE_INTERNALBLAS=1 for version 7.2.0](https://github.com/nwchemgit/nwchem/issues/804)
* [Undefined symbol "ycnrm2"](https://github.com/nwchemgit/nwchem/issues/817)
* [Wrong symmetry assignments in TDDFT](https://github.com/nwchemgit/nwchem/issues/828)
* [GW might lead to incorrect results when symmetry is on](https://github.com/nwchemgit/nwchem/issues/829)
* [ch5n_nbo QA test fails](https://github.com/nwchemgit/nwchem/issues/864)

45
release.notes.7.2.3.md Normal file
View file

@ -0,0 +1,45 @@
NWChem Version 7.2.3 Release Notes
==================================
NWChem is now available on Github at
https://github.com/nwchemgit/nwchem
User Manual available from the NWChem website
https://nwchemgit.github.io
NWChem 7.2.3 is released as open-source under the ECL 2.0 license.
NWChem 7.2.3 will be released with the latest Global Arrays Toolkit (v5.8.2).
The 7.2.3 release is a maintenance release containing fixes/enhancements for the NWChem 7.2.0 tree
The change log below is relative to the 7.2.2 code base.
NEW FUNCTIONALITY
-----
N/A
BUG FIXES/ENHANCEMENTS
-----
* added code to deal with elements up to Z=120
* added IMOM (Initial Maximum Overlap Method)
* reworked makefile structure to compile with GNU make 4.4
* fixes for Python interfaces
* avoid need of USE_MPI for make clean
* compiler updates
* bug fix for VEM in TDDFT
* updates for IBO and Pipek-Mezey localization
GITHUB ISSUES ADDRESSED
----
* [Cosmo generates NaN when lineq=1](https://github.com/nwchemgit/nwchem/issues/990)
* [dft-3d URL update](https://github.com/nwchemgit/nwchem/issues/962)
* [x2c incompatible with cd fitting ](https://github.com/nwchemgit/nwchem/issues/931)
* [wrong memory setup with floating point input ](https://github.com/nwchemgit/nwchem/issues/930)
* [modelpotential input not processing bq elements](https://github.com/nwchemgit/nwchem/issues/926)
* [memory printout cannot handle large memory sizes](https://github.com/nwchemgit/nwchem/issues/838)
* [O(10^3) global arrays are created from the property code](https://github.com/nwchemgit/nwchem/issues/831)

View file

@ -104,7 +104,11 @@ endif
libraries:
@for dir in $(SUBDIRS); do \
echo Making $@ in $$dir; \
$(MAKE) -C $$dir || exit 1 ; \
if [ $@ == "include_stamp" ] || [ $@ == "dependencies" ]; then \
$(MAKE) SKIP_COMPILERS=1 -C $$dir || exit 1 ; \
else \
$(MAKE) -C $$dir || exit 1 ; \
fi \
done
showdir:
@ -129,6 +133,7 @@ realclean:
-$(RM) $(LIBDIR)/*.a $(BINDIR)/*
-$(RM) *.db movecs fort.41 fort.44
-$(RM) util/util_version.F
-$(RM) mpi_include.txt ga_cppflags.txt ga_ldflags.txt ga_use_scalapack.txt oblas_ompcheck_done.txt
@# -$(RM) 64_to_32 32_to_64 deps_stamp # This conversion is such a hassle that realclean should not force it.
.PHONY: cleanF
@ -156,16 +161,16 @@ sngl_to_dbl dbl_to_sngl 64_to_32 32_to_64:
@$(MAKE) directories
@$(MAKE) clear_$@
for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir $@ || exit 1 ; \
$(MAKE) SKIP_COMPILERS=1 QUICK_BUILD=1 -C $$dir $@ || exit 1 ; \
done
touch $@
ifndef QUICK_BUILD
deps_stamp:
for dir in $(SUBDIRS); do \
$(MAKE) -i -C $$dir dependencies include_stamp ; \
if [ $@ == "include_stamp" ] || [ $@ == "dependencies" ]; then \
$(MAKE) -i SKIP_COMPILERS=1 -C $$dir dependencies include_stamp ; \
fi \
done
touch $@
endif
clear_64_to_32:
-$(RM) 32_to_64
@ -183,8 +188,8 @@ clear_dbl_to_sngl:
directories:
test \! -f 64_to_32 -o \! -f 32_to_64 || rm -f 64_to_32 32_to_64
test -d $(LIBDIR) || $(MKDIR) -p $(LIBDIR)
test -d $(BINDIR) || $(MKDIR) -p $(BINDIR)
test -d $(LIBDIR) || mkdir -p $(LIBDIR)
test -d $(BINDIR) || mkdir -p $(BINDIR)
./util/util_nwchem_version.bash
auxiliary:
@ -245,7 +250,7 @@ source:
cat stubs.F nwchem.F > source
ifdef SUBDIRS
for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir $@ || exit 1 ; \
echo TARGET is $@ ; $(MAKE) -C $$dir $@ || exit 1 ; \
done
endif

View file

@ -23,7 +23,8 @@ c
character*32 pname
c
integer i,j,k
character*16 tagi ! tag of atom i
character*16 tagi ! tag of atom i
integer iptr
character*2 symi
character*16 elemi
double precision ci(3),chgi
@ -41,8 +42,15 @@ c
c map the model potential onto the geometry
do i = 1,natoms
if (.not.geom_cent_get(geom,i,tagi,ci,chgi))
& call errquit(pname//'geom_cent_get failed:i',911, GEOM_ERR)
status = geom_tag_to_element(tagi,symi,elemi,atni)
& call errquit(pname//'geom_cent_get failed:i',911, GEOM_ERR)
c handle bqs
if (inp_compare(.false.,tagi(1:2),'bq')) then
iptr=3
else
iptr=1
endif
if(.not.geom_tag_to_element(tagi(iptr:),symi,elemi,atni))
& call errquit(pname//'geom_tag2elem failed:i',i, GEOM_ERR)
call inp_lcase(symi)
cinit
do k = 1,50
@ -62,8 +70,11 @@ cinit
end if
end do ! j = 1,mpmaxelem
1984 continue
if(ga_nodeid().eq.0.and.(.not.status)) write(6,'(a,i3,2x,a)')
if(ga_nodeid().eq.0.and.(.not.status)) then
write(6,'(a,i3,2x,a)')
W ' modelpotential warning: no entry found for atom ',i,tagi
call errquit(' set_modelpotential error ',0,0)
endif
end do ! i = 1,natoms
c
c set parameters in rtdb

View file

@ -32,8 +32,8 @@ else
arch=$(uname -m)
fi
if [[ ${UNAME_S} == Linux ]]; then
CPU_FLAGS=$(cat /proc/cpuinfo | grep flags |tail -n 1)
CPU_FLAGS_2=$(cat /proc/cpuinfo | grep flags |tail -n 1)
CPU_FLAGS=$(cat /proc/cpuinfo | grep flags |grep -v vmx\ f |tail -n 1)
CPU_FLAGS_2=$(cat /proc/cpuinfo | grep flags | grep -v vmx\ f |tail -n 1)
elif [[ ${UNAME_S} == Darwin ]]; then
CPU_FLAGS=$(sysctl -n machdep.cpu.features)
if [[ "$arch" == "x86_64" ]]; then
@ -43,6 +43,8 @@ else
echo Operating system not supported yet
exit 1
fi
echo CPU_FLAGS $CPU_FLAGS
echo CPU_FLAGS_2 $CPU_FLAGS_2
GOTSSE2=$(echo ${CPU_FLAGS} | tr 'A-Z' 'a-z'| awk ' /sse2/ {print "Y"}')
GOTAVX=$(echo ${CPU_FLAGS} | tr 'A-Z' 'a-z'| awk ' /avx/ {print "Y"}')
GOTAVX2=$(echo ${CPU_FLAGS_2} | tr 'A-Z' 'a-z'| awk ' /avx2/ {print "Y"}')

View file

@ -182,6 +182,12 @@ c
call swatch(topdat,toptim)
#ifdef USE_POSIXF
call pxfgetlogin(user, ilen, ierror)
#elif USE_GETENV_LOGNAME
! From https://linux.die.net/man/3/getlogin:
! For most purposes, it is more useful to use the environment variable
! LOGNAME to find out who the user is. This is more flexible precisely
! because the user can set LOGNAME arbitrarily.
call util_getenv('LOGNAME',user)
#else
call getlog(user)
#endif

View file

@ -182,6 +182,12 @@ c
call swatch(topdat,toptim)
#ifdef USE_POSIXF
call pxfgetlogin(user, ilen, ierror)
#elif USE_GETENV_LOGNAME
! From https://linux.die.net/man/3/getlogin:
! For most purposes, it is more useful to use the environment variable
! LOGNAME to find out who the user is. This is more flexible precisely
! because the user can set LOGNAME arbitrarily.
call util_getenv('LOGNAME',user)
#else
call getlog(user)
#endif

View file

@ -28,6 +28,12 @@ c
call swatch(rdate,rtime)
#ifdef USE_POSIXF
call pxfgetlogin(user, ilen, ierror)
#elif USE_GETENV_LOGNAME
! From https://linux.die.net/man/3/getlogin:
! For most purposes, it is more useful to use the environment variable
! LOGNAME to find out who the user is. This is more flexible precisely
! because the user can set LOGNAME arbitrarily.
call util_getenv('LOGNAME',user)
#else
call getlog(user)
#endif

View file

@ -39,6 +39,12 @@ c
call swatch(rdate,rtime)
#ifdef USE_POSIXF
call pxfgetlogin(user, ilen, ierror)
#elif USE_GETENV_LOGNAME
! From https://linux.die.net/man/3/getlogin:
! For most purposes, it is more useful to use the environment variable
! LOGNAME to find out who the user is. This is more flexible precisely
! because the user can set LOGNAME arbitrarily.
call util_getenv('LOGNAME',user)
#else
call getlog(user)
#endif

View file

@ -5,6 +5,7 @@ endif
include ../config/makefile.h
LIBRARY = libnwcblas.a
# LIB_INCLUDES = -I../util
#
# USE both double and single now (short term solution for added single precision

View file

@ -1,5 +1,4 @@
SUBROUTINE XERBLA( SRNAME, INFO )
#include "errquit.fh"
*
* -- LAPACK auxiliary routine (version 2.0) --
* Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
@ -40,8 +39,7 @@ c
*
WRITE( *, FMT = 9999 )SRNAME, INFO
*
* STOP
call errquit('xerbla:double: lapack error',911, BASIS_ERR)
STOP
*
9999 FORMAT( ' ** On entry to ', A6, ' parameter number ', I2, ' had ',
$ 'an illegal value' )

View file

@ -7,7 +7,7 @@ OBJ = cckohn.o cckohn_input.o cknew.o obftrans.o hbftrans.o \
bforthog.o fforth1.o fforth2.o denom.o top.o
OBJ_OPTIMIZE =
USES_BLAS =
USES_BLAS = cknew.F
SUBDIRS = bessel

View file

@ -9,7 +9,7 @@ OBJ_OPTIMIZE =
LIBRARY = libcckohn.a
USES_BLAS =
USES_BLAS = ubesplg.F
include ../../config/makefile.h
include ../../config/makelib.h

View file

@ -2,6 +2,10 @@
include ../config/makefile.h
ifdef USE_IMAX_OPENMP_TRPDRV
SUBDIRS += module
endif
OBJ_OPTIMIZE = \
ccden_driver.o \
ccden_interm2.o \
@ -24,7 +28,6 @@ include ../config/makefile.h
ccsd_idx34.o \
ccsd_tengy.o \
ccsd_trpdrv.o \
ccsd_trpdrv_nb.o \
ccsd_trpdrv_omp.o \
ccsd_trpdrv_omp_mixprec.o \
moints_trp.o \
@ -72,7 +75,6 @@ endif
ccsd_pdiis.F \
ccsd_sortmo.F \
ccsd_trpdrv.F \
ccsd_trpdrv_nb.F \
ccsd_trpdrv_omp.F \
ccsd_trpdrv_omp_mixprec.F \
moints_trp.F \
@ -88,17 +90,15 @@ endif
ccsd_mktau_ga.F \
ccden_2pdmb.F \
aoccsd2.F \
ccsd_fsig1.F \
ccsd_fsig2.F \
ccsd_trpdrv_offload.F \
ccsd_trpdrv_openacc.F \
ccsd_trpdrv_openmp_imax.F \
moints_trp.F
ifeq ($(TARGET),BGP)
OBJ_OPTIMIZE += ccsd_trpdrv_bgp2.o ccsd_tengy_bgp2.o ccsd_tengy_bgp.o
USES_BLAS += ccsd_trpdrv_bgp2.F
LIB_DEFINES += -DBGP
endif
ifdef USE_MIC_TRPDRV
OBJ_OPTIMIZE += ccsd_trpdrv_offload.o
USES_BLAS += ccsd_trpdrv_offload.F
LIB_DEFINES += -DUSE_MIC_TRPDRV
endif
ifeq ($(_FC),xlf)
@ -114,9 +114,22 @@ ifeq ($(HAVE_SET_GA_PROPERTY),Y)
LIB_DEFINES += -DHAVE_SET_GA_PROPERTY
endif
ifdef USE_IMAX_OPENMP_TRPDRV
OBJ_OPTIMIZE += ccsd_trpdrv_openmp_imax.o
OBJ_OPTIMIZE += ccsd_trpdrv_omp_reduce_f.o
FOPTIONS += -O3 -fiopenmp -fopenmp-targets=spir64="-mllvm -vpo-paropt-atomic-free-reduction-par-global=false" -switch offload_modvars -mllvm -vpo-paropt-atomic-free-reduction-slm=true -qmkl
DEFINES += -DMKL_ILP64
INCLUDES += -I"${MKLROOT}/include" -I ${NWCHEM_TOP}/src/ccsd/module
endif
ifdef USE_OPENACC_TRPDRV
OBJ_OPTIMIZE += ccsd_trpdrv_openacc.o
USES_BLAS += ccsd_trpdrv_openacc.F
FOPTIONS += -DUSE_OPENACC_TRPDRV
ifeq ($(_FC),pgf90)
FOPTIONS += -Mextend -acc -cuda -cudalib=cublas
@ -126,6 +139,9 @@ ifdef USE_OPENACC_TRPDRV
endif
endif
ifdef USE_BATCHDGEMM_TRPDRV
DEFINES += -DUSE_BATCHDGEMM_TRPDRV
endif
ifeq ($(ARMCI_NETWORK),MPI-PR)
LIB_DEFINES += -DACC_STRIPS

View file

@ -2,7 +2,11 @@ c#define DOGRAD
subroutine aoccsd(basis,ncor,nocc,nvir,ndel,nact,nbf,maxit,
& convi,iprt,cmo,eorb,blen,
& g_ncoul, g_nexch, RefEner,
$ CC_Theory, rtdb, mxvec, geom, Tol2e, occd, oconverged)
$ CC_Theory, rtdb, mxvec, geom, Tol2e, occd,
& oconverged)
#if defined(USE_IMAX_OPENMP_TRPDRV)
use omp_lib, only: omp_interop_kind, omp_interop_none
#endif
implicit none
#include "errquit.fh"
C $Id$
@ -13,9 +17,10 @@ c
Double Precision RefEner, Convi, Tol2E
Character*(*) CC_Theory
Integer RTDB, geom
logical oconverged, occd, use_trpdrv_nb
logical use_trpdrv_omp, use_trpdrv_bgp2
logical oconverged, occd
logical use_trpdrv_omp
logical use_trpdrv_omp_mp
logical use_trpdrv_openmp_imax
logical use_trpdrv_openacc
logical use_trpdrv_offload
c
@ -31,7 +36,10 @@ c
#include "msgids.fh"
#include "ccsdps.fh"
c
#if defined(USE_IMAX_OPENMP_TRPDRV)
c ccsd
integer(kind = omp_interop_kind) :: dummy_obj = omp_interop_none
#endif
Integer i
logical stat
integer nsh,maxbfsh,max2e,mem2
@ -709,9 +717,6 @@ C
!
! Determine if OpenMP, etc. should be used in (T) code
!
if (.not. rtdb_get(rtdb, 'ccsd:use_trpdrv_nb', mt_log, 1,
1 use_trpdrv_nb))
2 use_trpdrv_nb=.false.
if (.not. rtdb_get(rtdb, 'ccsd:use_trpdrv_omp', mt_log, 1,
1 use_trpdrv_omp))
2 use_trpdrv_omp=.false.
@ -721,12 +726,12 @@ C
if (.not. rtdb_get(rtdb, 'ccsd:use_trpdrv_openacc', mt_log, 1,
1 use_trpdrv_openacc))
2 use_trpdrv_openacc=.false.
if (.not. rtdb_get(rtdb, 'ccsd:use_trpdrv_openmp_imax', mt_log,
1 1, use_trpdrv_openmp_imax))
2 use_trpdrv_openmp_imax=.false.
if (.not. rtdb_get(rtdb, 'ccsd:use_trpdrv_offload', mt_log, 1,
1 use_trpdrv_offload))
2 use_trpdrv_offload=.false.
if (.not. rtdb_get(rtdb, 'ccsd:use_trpdrv_bgp2', mt_log, 1,
1 use_trpdrv_bgp2))
2 use_trpdrv_bgp2=.false.
!
mem_avail = ma_inquire_avail(MT_DBL)
if(iam.eq.0.and.oprint)write(luout,*)'memory',mem_avail
@ -955,6 +960,20 @@ c
& blen, cmo, ncor, nocc, nvir, ndel, Tol2E)
c print *,'call trpdrv ',nvpass
call ga_sync()
#if defined(USE_IMAX_OPENMP_TRPDRV)
! Dummy parallel construct
!$omp parallel num_threads(8)
!$omp end parallel
! Dummy target construct
!$omp target
!$omp end target
! Dummy interop object
!$omp interop init(prefer_type("sycl"),targetsync: dummy_obj)
!$omp interop destroy(dummy_obj)
#endif
tx(2)=tcgtime()
c
if (use_trpdrv_omp) then
@ -992,8 +1011,23 @@ c
call ccsd_trpdrv_openacc(dbl_mb(k_t1),eorb,
$ g_objo,g_objv,g_coul,g_exch,ncor,nocc,nvir,iprt,
$ empt(1),empt(2),oseg_lo,oseg_hi,kchunk)
!!#else
!! call errquit('aoccsd: trpdrv_openacc disabled ',0,0)
!!#endif
! use_trpdrv_openmp_imax
else if (use_trpdrv_openmp_imax) then
#elif defined(USE_IMAX_OPENMP_TRPDRV)
if (iam.eq.0.and.oprint) then
write(luout,1818) nvpass,util_wallsec()
call util_flush(luout)
endif
1818 format(' commencing triples evaluation - OpenMP',
I 'MAX GPU version',i8,' at ',f20.2,' secs')
call ccsd_trpdrv_offload_xe(dbl_mb(k_t1),eorb,
$ g_objo,g_objv,g_coul,g_exch,ncor,nocc,nvir,iprt,
$ empt(1),empt(2),oseg_lo,oseg_hi,kchunk)
#else
call errquit('aoccsd: trpdrv_openacc disabled ',0,0)
call errquit('aoccsd: trpdrv_openmp_gpu disabled ',0,0)
#endif
c
elseif (use_trpdrv_omp_mp) then
@ -1017,29 +1051,6 @@ c
#else
call errquit('aoccsd: trpdrv_omp_mixprec disabled ',0,0)
#endif
c
elseif (use_trpdrv_nb) then
c
if (iam.eq.0.and.oprint) then
write(luout,1847) nvpass
call util_flush(luout)
endif
1847 format(' commencing triples evaluation - non-blocking',i8)
call ccsd_trpdrv_nb(dbl_mb(k_t1),
#ifdef USE_F90_ALLOCATABLE
$ f1n,f1t,f2n,f2t,f3n,f3t,f4n,f4t,
#else
$ dbl_mb(k_f1n),dbl_mb(k_f1t),dbl_mb(k_f2n),dbl_mb(k_f2t),
$ dbl_mb(k_f3n),dbl_mb(k_f3t),dbl_mb(k_f4n),dbl_mb(k_f4t),
#endif
$ eorb,g_objo,g_objv,g_coul,g_exch,ncor,nocc,nvir,iprt,
$ empt(1),empt(2),oseg_lo,oseg_hi,kchunk,
$ dbl_mb(k_trp_Tij), dbl_mb(k_trp_Tkj), dbl_mb(k_trp_Tia),
$ dbl_mb(k_trp_Tka), dbl_mb(k_trp_Xia), dbl_mb(k_trp_Xka),
$ dbl_mb(k_trp_Jia), dbl_mb(k_trp_Jka), dbl_mb(k_trp_Kia),
$ dbl_mb(k_trp_Kka), dbl_mb(k_trp_Jij), dbl_mb(k_trp_Jkj),
$ dbl_mb(k_trp_Kij), dbl_mb(k_trp_Kkj), dbl_mb(k_trp_Dja),
$ dbl_mb(k_trp_Djka), dbl_mb(k_trp_Djia))
c
#ifdef USE_MIC_TRPDRV
elseif (use_trpdrv_offload) then
@ -1065,31 +1076,6 @@ c
$ dbl_mb(k_trp_Kij), dbl_mb(k_trp_Kkj), dbl_mb(k_trp_Dja),
$ dbl_mb(k_trp_Djka), dbl_mb(k_trp_Djia))
c
#endif
#ifdef BGP
elseif (use_trpdrv_bgp2) then
c
if (iam.eq.0.and.oprint) then
write(luout,1849)nvpass
call util_flush(luout)
endif
1849 format(' commencing triples evaluation - Blue Gene v2',i8)
call ccsd_trpdrv_bgp2(dbl_mb(k_t1),
#ifdef USE_F90_ALLOCATABLE
$ f1n,f1t,f2n,f2t,f3n,f3t,f4n,f4t,
#else
$ dbl_mb(k_f1n),dbl_mb(k_f1t),dbl_mb(k_f2n),dbl_mb(k_f2t),
$ dbl_mb(k_f3n),dbl_mb(k_f3t),dbl_mb(k_f4n),dbl_mb(k_f4t),
#endif
$ eorb,g_objo,g_objv,g_coul,g_exch,ncor,nocc,nvir,iprt,
$ empt(1),empt(2),oseg_lo,oseg_hi,kchunk,
$ dbl_mb(k_trp_Tij), dbl_mb(k_trp_Tkj), dbl_mb(k_trp_Tia),
$ dbl_mb(k_trp_Tka), dbl_mb(k_trp_Xia), dbl_mb(k_trp_Xka),
$ dbl_mb(k_trp_Jia), dbl_mb(k_trp_Jka), dbl_mb(k_trp_Kia),
$ dbl_mb(k_trp_Kka), dbl_mb(k_trp_Jij), dbl_mb(k_trp_Jkj),
$ dbl_mb(k_trp_Kij), dbl_mb(k_trp_Kkj), dbl_mb(k_trp_Dja),
$ dbl_mb(k_trp_Djka), dbl_mb(k_trp_Djia))
c
#endif
else
c

View file

@ -1,70 +0,0 @@
!
! Argonne Leadership Computing Facility
! BlueGene/P version
! Written by Vitali Morozov <morozov@anl.gov>
! Updated 20091022
! -O5 -qipa=noinline -qsmp=omp
!
! modified from the original (use of einv)
!
subroutine ccsd_tengy_bgp(f1n,f1t,f2n,f2t,f3n,f3t,f4n,f4t,
1 dintc,dintx,t1v,einv,
2 emp4,emp5,nvir)
implicit none
integer nvir,b,c
double precision emp4,emp5,denom
double precision two,three,four
double precision f1n(nvir,nvir),f1t(nvir,nvir)
double precision f2n(nvir,nvir),f2t(nvir,nvir)
double precision f3n(nvir,nvir),f3t(nvir,nvir)
double precision f4n(nvir,nvir),f4t(nvir,nvir)
double precision dintc(nvir),dintx(nvir),t1v(nvir)
double precision einv(nvir,nvir)
double precision e1, e2, e3, e4
double precision t0, t1, t2, t3, t4, t5, t6, t7, t8, t9
double precision z0, z1, z3, z5, z9, s0
c
!$omp parallel do
!$omp& private(b,c,e1,e2,e3,e4,z0,z1,z3,z5,z9,s0,
!$omp& t0,t1,t2,t3,t4,t5,t6,t7,t8,t9)
!$omp& shared(f1n,f2n,f3n,f4n,f1t,f2t,f3t,f4t,dintx,dintc,t1v,einv)
!$omp& reduction(+:emp5,emp4) schedule(static)
do b = 1, nvir
do c = 1, nvir
s0 = einv(c,b)
e1 = f1n(c,b) + f4n(c,b) - 2d0*( f2n(c,b) + f3n(c,b) )
e2 = e1 + 3d0*f1n(c,b)
e3 = f1t(c,b) -2d0 * f2t(c,b)
e4 = e3 + f2n(c,b) - 2d0*( f3t(c,b) + f4n(c,b) + f1n(c,b)
1 - 2d0*( f3n(c,b) + f4t(c,b) ) )
emp5 = emp5 + ( t1v(c)*( e1*dintc(b) + e4*dintx(b) )
1 + t1v(b)*( e2*dintx(c) + e3*dintc(c) ) ) * s0
t1 = f1t(c,b) + f3n(c,b)
t2 = f1n(c,b) + f2t(c,b) + f4n(c,b)
t9 = f1t(c,b) + f4t(c,b)
t0 = f2t(c,b) + f3t(c,b)
t3 = t9 - 2d0*t0
t4 = t1 + f2n(c,b)
t5 = 2d0*t9 - t0
t6 = f3n(c,b) + 2d0*f4t(c,b)
t7 = f3n(c,b) * f4t(c,b)
t8 = t1*t3 - f1n(c,b)*t5 +3d0*( f1n(c,b)*f1n(c,b) + t7 )
z0 = f2t(b,c) + f3t(b,c)
z9 = f1t(b,c) + f4t(b,c)
z1 = f1t(b,c) + f3n(b,c)
z3 = z9 - 2d0*z0
z5 = 2d0*z9 - z0
emp4 = emp4 + ( t8 + t2*z3 - t4*z5
1 + 3d0*( t6*f1n(b,c) + f2t(c,b)*f2n(b,c) ) ) * s0
enddo
enddo
c
return
end

View file

@ -1,200 +0,0 @@
c!
c! 1) eorb_m( 0 ) => eorb( ncor + nocc ), allos to have 1 pointer instead of 3
c! 2) #include "ccsdps.fh" is unnecessary
c! 3) constants to variables is bad
c! 4) remove if (occsdps) for a moment
c!
c! Original 60794725
c! Computed 42410408, intrinsics for d0-d9
subroutine ccsd_tengy_bgp2(f1n,f1t,f2n,f2t,f3n,f3t,f4n,f4t,
1 dintc,dintx,t1v,eorb_r,eaijk,emp4,emp5,nvir)
implicit none
integer ncor,nocc,nvir
integer b,c
double precision eaijk,emp4,emp5,denom
double precision f1n(nvir,nvir),f1t(nvir,nvir)
double precision f2n(nvir,nvir),f2t(nvir,nvir)
double precision f3n(nvir,nvir),f3t(nvir,nvir)
double precision f4n(nvir,nvir),f4t(nvir,nvir)
double precision dintc(nvir),dintx(nvir),t1v(nvir),eorb_r(*)
complex(8), parameter :: two = (2d0,2d0), three = (3d0,3d0)
complex(8) af1t,af1n,af2t,af2n,af3t,af3n,af4t,af4n,
1 adix,adiv,at1v,axmp,adic,b1,b2,b3,b4,b5,b6,b0,b9
complex(8) c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,ca,
1 bf1t,bf2t,bf3t,bf4t,bf1n,bf2n,bf3n
complex(8) d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,da,
1 cf1t,cf2t,cf3t,cf4t,cf1n,cf2n,cf3n,cf4n
complex(8) e0,e1,e3,e5,e9,ef1t,ef2t,ef3t,ef4t,ef1n,ef2n,ef3n,
1 bxmp,bdiv
real(8) f0,f1
real(8) ediv(nvir,nvir)
c! ediv is symmetric => ediv( b,c ) = ediv( c,b )
do b = 1, nvir
do c = b, nvir
ediv( c,b ) = 1d0 / ( eaijk - eorb_r( b ) - eorb_r( c ) )
ediv( b,c ) = ediv( c,b )
enddo
enddo
axmp = ( emp5,0d0 )
do b = 1, nvir
do c = 1, nvir, 2
af1n = LOADFP( f1n( c,b ) )
af1t = LOADFP( f1t( c,b ) )
af2n = LOADFP( f2n( c,b ) )
af2t = LOADFP( f2t( c,b ) )
af3n = LOADFP( f3n( c,b ) )
af3t = LOADFP( f3t( c,b ) )
af4n = LOADFP( f4n( c,b ) )
af4t = LOADFP( f4t( c,b ) )
at1v = LOADFP( t1v( c ) )
adic = LOADFP( dintc( c ) )
adix = LOADFP( dintx( c ) )
adiv = LOADFP( ediv( c,b ) )
b5 = FPADD( af1n, af4n )
b5 = FPNMSUB( b5, two, af3n )
b1 = FPNMSUB( b5, two, af2n )
b2 = FPMADD( b1,three,af1n )
b3 = FPNMSUB( af1t, two, af2t )
b4 = FPADD( b3, af2n )
b6 = FPNMSUB( b5, two, af4t )
b4 = FPNMSUB( b4, two, af3t )
b4 = FPNMSUB( b4, two, b6 )
b4 = FXPMUL( b4, dintx(b) )
b4 = FXCPMADD( b4, b1, dintc(b) )
b4 = FPMUL( b4, at1v )
b3 = FPMUL( b3, adic )
b3 = FPMADD( b3, b2, adix )
b3 = FXCPMADD( b4, b3, t1v(b) )
axmp = FPMADD( axmp, b3, adiv )
enddo
enddo
emp5 = DBLE( axmp ) + IMAG( axmp )
bxmp = ( 0d0,0d0 )
do b = 1, nvir, 2
do c = 1, nvir, 2
af1t = LOADFP( f1t( c,b ) )
af2t = LOADFP( f2t( c,b ) )
af3t = LOADFP( f3t( c,b ) )
af4t = LOADFP( f4t( c,b ) )
af1n = LOADFP( f1n( c,b ) )
af2n = LOADFP( f2n( c,b ) )
af3n = LOADFP( f3n( c,b ) )
af4n = LOADFP( f4n( c,b ) )
adiv = LOADFP( ediv( c,b ) )
c1 = FPADD( af1t, af3n )
c2 = FPADD( af1n, af2t )
c2 = FPADD( c2, af4n )
c9 = FPADD( af1t, af4t )
c0 = FPADD( af2t, af3t )
c3 = FPNMSUB( c9, two, c0 )
c4 = FPADD( c1, af2n )
c5 = FPMSUB( c0, two, c9 )
c6 = FPMADD( af3n, two, af4t )
c7 = FPMUL( af3n, af4t )
c8 = FPMUL( c1, c3 )
ca = FPMADD( c7, af1n, af1n )
c8 = FPNMSUB( c8, c5, af1n )
c8 = FPMADD( c8, three, ca )
bf1t = LOADFP( f1t( b,c ) )
bf2t = LOADFP( f2t( b,c ) )
bf3t = LOADFP( f3t( b,c ) )
bf4t = LOADFP( f4t( b,c ) )
bf1n = LOADFP( f1n( b,c ) )
bf2n = LOADFP( f2n( b,c ) )
bf3n = LOADFP( f3n( b,c ) )
b0 = FPADD( bf2t, bf3t )
b9 = FPADD( bf1t, bf4t )
b1 = FPADD( bf1t, bf3n )
b3 = FPNMSUB( b9, two, b0 )
b5 = FPMSUB( b0, two, b9 )
cf1t = LOADFP( f1t( c,b+1 ) )
cf2t = LOADFP( f2t( c,b+1 ) )
cf3t = LOADFP( f3t( c,b+1 ) )
cf4t = LOADFP( f4t( c,b+1 ) )
cf1n = LOADFP( f1n( c,b+1 ) )
cf2n = LOADFP( f2n( c,b+1 ) )
cf3n = LOADFP( f3n( c,b+1 ) )
cf4n = LOADFP( f4n( c,b+1 ) )
bdiv = LOADFP( ediv( c,b+1 ) )
d1 = FPADD( cf1t, cf3n )
d2 = FPADD( cf1n, cf2t )
d2 = FPADD( d2, cf4n )
d9 = FPADD( cf1t, cf4t )
d0 = FPADD( cf2t, cf3t )
d3 = FPNMSUB( d9, two, d0 )
d4 = FPADD( d1, cf2n )
d5 = FPMSUB( d0, two, d9 )
d6 = FPMADD( cf3n, two, cf4t )
!d7 = FPMUL( cf3n, cf4t )
!d8 = FPMUL( d1, d3 )
!da = FPMADD( d7, cf1n, cf1n )
!d8 = FPNMSUB( d8, d5, cf1n )
!d8 = FPMADD( d8, three, da )
d5 = FPNMSUB( d5, three, cf1n )
d7 = FPMUL( d1, d3 )
d8 = FPNMSUB( d7, d5, cf1n )
ef1t = LOADFP( f1t( b,c+1 ) )
ef2t = LOADFP( f2t( b,c+1 ) )
ef3t = LOADFP( f3t( b,c+1 ) )
ef4t = LOADFP( f4t( b,c+1 ) )
ef1n = LOADFP( f1n( b,c+1 ) )
ef2n = LOADFP( f2n( b,c+1 ) )
ef3n = LOADFP( f3n( b,c+1 ) )
e0 = FPADD( ef2t, ef3t )
e9 = FPADD( ef1t, ef4t )
e1 = FPADD( ef1t, ef3n )
e3 = FPNMSUB( e9, two, e0 )
e5 = FPMSUB( e0, two, e9 )
f0 = IMAG( b3 )
b3 = ( DBLE(b3),DBLE(e3) )
e3 = ( f0,IMAG(e3) )
f0 = IMAG( b5 )
b5 = ( DBLE(b5),DBLE(e5) )
e5 = ( f0,IMAG(e5) )
f0 = IMAG( bf1n )
bf1n = ( DBLE(bf1n),DBLE(ef1n) )
ef1n = ( f0,IMAG(ef1n) )
f0 = IMAG( bf2n )
bf2n = ( DBLE(bf2n),DBLE(ef2n) )
ef2n = ( f0,IMAG(ef2n) )
c8 = FPMADD( c8, c2, b3 )
c6 = FPMUL( c6, bf1n )
c8 = FPNMSUB( c8, c4, b5 )
c6 = FPMADD( c6, af2t, bf2n )
c8 = FPMADD( c8, three, c6 )
bxmp = FPMADD( bxmp, c8, adiv )
d8 = FPMADD( d8, d2, e3 )
d6 = FPMUL( d6, ef1n )
d8 = FPNMSUB( d8, d4, e5 )
d6 = FPMADD( d6, cf2t, ef2n )
d6 = FPMADD( d6, cf3n, cf4t )
d8 = FPMADD( d8, three, d6 )
bxmp = FPMADD( bxmp, d8, bdiv )
enddo
enddo
emp4 = emp4 + DBLE( bxmp ) + IMAG( bxmp )
return
end
c $Id$

View file

@ -361,12 +361,15 @@ c -- f4n(b,c)=f4n(b,c)+vvvo(a,d,b,i)*t2(d,k,c,j)
integer av,klo,khi,j
c
integer k,l_kk,k_kk,lenk,start,end,iptr,i,startc
double precision mem_avail
logical failed
c
start = 1 + (j-1)*nvir + (klo-1)*lnov
end = (j-1)*nvir + (khi)*lnov
lenk=end-start+1
lenk=min(lenk,(ma_inquire_avail(MT_DBL)*66)/100)
c protect from integer overflowing on 32bit archs
mem_avail=0.66d0*dble(ma_inquire_avail(MT_DBL))
lenk=min(lenk,int(mem_avail))
crestrict to 5M to avoid OOMs
lenk=min(lenk,5000000)
1 continue

View file

@ -1,478 +0,0 @@
subroutine ccsd_trpdrv_bgp2(t1,
& f1n,f1t,f2n,f2t,f3n,f3t,f4n,f4t,eorb,
& g_objo,g_objv,g_coul,g_exch,
& ncor,nocc,nvir,iprt,emp4,emp5,
& oseg_lo,oseg_hi,
$ kchunk, Tij, Tkj, Tia, Tka, Xia, Xka, Jia, Jka, Kia, Kka,
$ Jij, Jkj, Kij, Kkj, Dja, Djka, Djia)
C $Id$
implicit none
c
#include "global.fh"
#include "ccsd_len.fh"
#include "ccsdps.fh"
c
double precision t1(*),
& f1n(*),f1t(*),f2n(*),
& f2t(*),f3n(*),f3t(*),f4n(*),f4t(*),eorb(*),
& emp4,emp5
double precision Tij(*), Tkj(*), Tia(*), Tka(*), Xia(*), Xka(*),
$ Jia(*), Jka(*), Kia(*), Kka(*),
$ Jij(*), Jkj(*), Kij(*), Kkj(*), Dja(*), Djka(*), Djia(*)
integer g_objo,g_objv,ncor,nocc,nvir,iprt,g_coul,
& g_exch,oseg_lo,oseg_hi
c
double precision eaijk
integer a,b,c,i,j,k,akold,av,inode,len,next,nxtask
external nxtask
C
Integer Nodes, IAm
c
integer klo, khi, start, end
integer kchunk
c
#ifdef DEBUG_PRINT
integer tt
double precision tt0,tt1,trp_time(26)
#endif
c
double precision zip
data zip/0.0d00/
c
c apr call ga_print(g_coul)
c apr call ga_print(g_exch)
Nodes = GA_NNodes()
IAm = GA_NodeID()
C
call ga_sync()
if (occsdps) then
call pstat_on(ps_trpdrv)
else
call qenter('trpdrv',0)
endif
inode=-1
next=nxtask(nodes, 1)
c
#ifdef DEBUG_PRINT
do tt = 1, 26
trp_time(tt) = 0.0d0
enddo
#endif
c
do klo = 1, nocc, kchunk
akold=0
khi = min(nocc, klo+kchunk-1)
do a=oseg_lo,oseg_hi
av=a-ncor-nocc
do j=1,nocc
inode=inode+1
if (inode.eq.next)then
c
c Get Dja = Dci,ja for given j, a, all ci
c
start = 1 + (j-1)*lnov
len = lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objv,start,end,av,av,Dja,len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(1) = trp_time(1) + (tt1-tt0)
#endif
c
c Get Tkj = T(b,c,k,j) for given j, klo<=k<=khi, all bc
c
start = (klo-1)*lnvv + 1
len = (khi-klo+1)*lnvv
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objo,start,end,j,j,Tkj,len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(2) = trp_time(2) + (tt1-tt0)
#endif
c
c Get Jkj = J(c,l,k,j) for given j, klo<=k<=khi, all cl
c
start = lnovv + (klo-1)*lnov + 1
len = (khi-klo+1)*lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objo,start,end,j,j,Jkj,len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(3) = trp_time(3) + (tt1-tt0)
#endif
c
c Get Kkj = K(c,l,k,j) for given j, klo<=k<=khi, all cl
c
start = lnovv + lnoov + (klo-1)*lnov + 1
len = (khi-klo+1)*lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objo,start,end,j,j,Kkj,len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(4) = trp_time(4) + (tt1-tt0)
#endif
c
if (akold .ne. a) then
akold = a
c
c Get Jka = J(b,c,k,a) for given a, klo<=k<=khi, all bc
c
start = (a-oseg_lo)*nocc + klo
len = (khi-klo+1)
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_coul,1,lnvv,start,end,Jka,lnvv)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(5) = trp_time(5) + (tt1-tt0)
#endif
c
c Get Kka = K(b,c,k,a) for given a, klo<=k<=khi, all bc
c
start = (a-oseg_lo)*nocc + klo
len = (khi-klo+1)
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_exch,1,lnvv,start,end,Kka,lnvv)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(6) = trp_time(6) + (tt1-tt0)
#endif
c
c Get Tka = Tbl,ka for given a, klo<=k<=khi, all bl
c
start = 1 + lnoov + (klo-1)*lnov
len = (khi-klo+1)*lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objv,start,end,av,av,Tka,len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(7) = trp_time(7) + (tt1-tt0)
#endif
c
c Get Xka = Tal,kb for given a, klo<=k<=khi, all bl
c
start = 1 + lnoov + lnoov + (klo-1)*lnov
len = (khi-klo+1)*lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objv,start,end,av,av,Xka,len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(8) = trp_time(8) + (tt1-tt0)
#endif
endif
c
c Get Djka = Dcj,ka for given j, a, klo<=k<=khi, all c
c
do k = klo, khi
start = 1 + (j-1)*nvir + (k-1)*lnov
len = nvir
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objv,start,end,av,av,
$ Djka(1+(k-klo)*nvir),len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(9) = trp_time(9) + (tt1-tt0)
#endif
enddo
c
do i=1,nocc
c
c Get Tij = T(b,c,i,j) for given j, i, all bc
c
start = (i-1)*lnvv + 1
len = lnvv
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objo,start,end,j,j,Tij,len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(10) = trp_time(10) + (tt1-tt0)
#endif
c
c Get Jij = J(c,l,i,j) for given j, i, all cl
c
start = lnovv + (i-1)*lnov + 1
len = lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objo,start,end,j,j,Jij,len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(11) = trp_time(11) + (tt1-tt0)
#endif
c
c Get Kij = K(c,l,i,j) for given j, i, all cl
c
start = lnovv + lnoov + (i-1)*lnov + 1
len = lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objo,start,end,j,j,Kij,len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(12) = trp_time(12) + (tt1-tt0)
#endif
c
c Get Jia = J(b,c,i,a) for given a, i, all bc
c
start = (a-oseg_lo)*nocc + i
len = 1
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_coul,1,lnvv,start,end,Jia,lnvv)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(13) = trp_time(13) + (tt1-tt0)
#endif
c
c Get Kia = K(b,c,i,a) for given a, i, all bc
c
start = (a-oseg_lo)*nocc + i
len = 1
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_exch,1,lnvv,start,end,Kia,lnvv)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(14) = trp_time(14) + (tt1-tt0)
#endif
c
c Get Dia = Dcj,ia for given j, i, a, all c
c
start = 1 + (j-1)*nvir + (i-1)*lnov
len = nvir
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objv,start,end,av,av,Djia,len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(15) = trp_time(15) + (tt1-tt0)
#endif
c
c Get Tia = Tbl,ia for given a, i, all bl
c
start = 1 + lnoov + (i-1)*lnov
len = lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objv,start,end,av,av,Tia,len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(16) = trp_time(16) + (tt1-tt0)
#endif
c
c Get Xia = Tal,ib for given a, i, all bl
c
start = 1 + lnoov + lnoov + (i-1)*lnov
len = lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_get(g_objv,start,end,av,av,Xia,len)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(17) = trp_time(17) + (tt1-tt0)
#endif
c
do k=klo,min(khi,i)
call dfill(lnvv,zip,f1n,1)
call dfill(lnvv,zip,f1t,1)
call dfill(lnvv,zip,f2n,1)
call dfill(lnvv,zip,f2t,1)
call dfill(lnvv,zip,f3n,1)
call dfill(lnvv,zip,f3t,1)
call dfill(lnvv,zip,f4n,1)
call dfill(lnvv,zip,f4t,1)
c
c sum(d) (Jia, Kia)bd * Tkj,cd -> Fbc
c
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ccsd_dovvv(Jia, Kia,
$ Tkj(1+(k-klo)*lnvv),f1n,f2n,f3n,f4n,
$ nocc,nvir)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(18) = trp_time(18) + (tt1-tt0)
#endif
c
c sum(d) (Jka, Kka)bd * Tij,cd -> Fbc
c
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ccsd_dovvv(Jka(1+(k-klo)*lnvv),
$ Kka(1+(k-klo)*lnvv),
$ Tij,f1t,f2t,f3t,f4t,nocc,nvir)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(19) = trp_time(19) + (tt1-tt0)
#endif
c
c sum(l) (Jij, Kij)cl * Tkl,ab -> Fbc
c
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ccsd_doooo(Jkj(1+(k-klo)*lnov),
$ Kkj(1+(k-klo)*lnov),
$ Tia,Xia,
$ f1n,f2n,
$ f3n,f4n,nocc,nvir)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(20) = trp_time(20) + (tt1-tt0)
#endif
c
c sum(l) (Jkj, Kkj)cl * Tli,ba -> Fbc
c
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ccsd_doooo(Jij, Kij,
$ Tka(1+(k-klo)*lnov),Xka(1+(k-klo)*lnov),
$ f1t,f2t,
$ f3t,f4t,nocc,nvir)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(21) = trp_time(21) + (tt1-tt0)
#endif
c
c if (iprt.gt.50)then
c call prtfmat(f1n,f1t,f2n,f2t,f3n,f3t,f4n,
c $ f4t, nvir)
c end if
c
eaijk=eorb(ncor+i)+eorb(ncor+j)+eorb(ncor+k)
$ -eorb(a)
c
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ccsd_tengy_bgp2(f1n,f1t,f2n,f2t,
$ f3n,f3t,f4n,f4t,
$ Dja(1+(i-1)*nvir),
$ Djia,
$ t1((k-1)*nvir+1),
$ eorb(nocc+ncor+1),
$ eaijk,emp4,emp5,
$ ncor,nocc,nvir)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(22) = trp_time(22) + (tt1-tt0)
#endif
c
if (i.ne.k)then
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ccsd_tengy_bgp2(f1t,f1n,f2t,f2n,
$ f3t,f3n,f4t,f4n,
$ Dja(1+(k-1)*nvir),
$ Djka(1+(k-klo)*nvir),
$ t1((i-1)*nvir+1),
$ eorb(nocc+ncor+1),
$ eaijk,emp4,emp5,
$ ncor,nocc,nvir)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(23) = trp_time(23) + (tt1-tt0)
#endif
c
end if
end do
end do
if (iprt.gt.50)then
write(6,1234)iam,a,j,emp4,emp5
1234 format(' iam aijk',3i5,2e15.5)
end if
next=nxtask(nodes, 1)
end if
end do
end do
end do
c
#ifdef DEBUG_PRINT
c
do tt = 1, 17
!write(6,97) IAm,tt,trp_time(tt)
trp_time(24) = trp_time(24) + trp_time(tt)
enddo
call util_flush(6)
97 format('node ',i5,': ga_get timer(',i2,') = ',1e15.5)
c
do tt = 18, 21
!write(6,98) IAm,tt,trp_time(tt)
trp_time(25) = trp_time(25) + trp_time(tt)
enddo
call util_flush(6)
98 format('node ',i5,': dgemm timer(',i2,') = ',1e15.5)
c
do tt = 22, 23
!write(6,99) IAm,tt,trp_time(tt)
trp_time(26) = trp_time(26) + trp_time(tt)
enddo
call util_flush(6)
99 format('node ',i5,': tengy timer(',i2,') = ',1e15.5)
c
call ga_sync()
if (IAm.eq.0) write(6,87)
87 format(2x,'node',6x,'ga_get',9x,'dgemm',10x,'tengy')
call ga_sync()
write(6,88) IAm,trp_time(24),trp_time(25),trp_time(26)
88 format(i7,3e15.5)
c
#endif
c
next=nxtask(-nodes, 1)
call ga_sync()
if (occsdps) then
call pstat_off(ps_trpdrv)
else
call qexit('trpdrv',0)
endif
c
end

View file

@ -1,649 +0,0 @@
subroutine ccsd_trpdrv_nb(t1,
& f1n,f1t,f2n,f2t,f3n,f3t,f4n,f4t,eorb,
& g_objo,g_objv,g_coul,g_exch,
& ncor,nocc,nvir,iprt,emp4,emp5,
& oseg_lo,oseg_hi,
$ kchunk, Tij, Tkj, Tia, Tka, Xia, Xka, Jia, Jka, Kia, Kka,
$ Jij, Jkj, Kij, Kkj, Dja, Djka, Djia)
c
C $Id$
c
c CCSD(T) non-blocking modifications written by
c Jeff Hammond, Argonne Leadership Computing Facility
c Fall 2009
c
implicit none
c
#include "global.fh"
#include "ccsd_len.fh"
#include "ccsdps.fh"
c
double precision t1(*),
& f1n(*),f1t(*),f2n(*),
& f2t(*),f3n(*),f3t(*),f4n(*),f4t(*),eorb(*),
& emp4,emp5
double precision Tij(*), Tkj(*), Tia(*), Tka(*), Xia(*), Xka(*),
$ Jia(*), Jka(*), Kia(*), Kka(*),
$ Jij(*), Jkj(*), Kij(*), Kkj(*), Dja(*), Djka(*), Djia(*)
integer g_objo,g_objv,ncor,nocc,nvir,iprt,g_coul,
& g_exch,oseg_lo,oseg_hi
c
double precision eaijk
integer a,i,j,k,akold,av,inode,len,ad3,next
integer nxtask
external nxtask
c
Integer Nodes, IAm
c
integer klo, khi, start, end
integer kchunk
c
c==================================================
c
c NON-BLOCKING stuff
c
c==================================================
c
c Dependencies (global array, local array, handle):
c
c g_objv, Dja, nbh_objv1
c g_objv, Tka, nbh_objv2
c g_objv, Xka, nbh_objv3
c g_objv, Djka(1+(k-klo)*nvir), nbh_objv4(k)
c g_objv, Djia, nbh_objv5
c g_objv, Tia, nbh_objv6
c g_objv, Xia, nbh_objv7
c g_objo, Tkj, nbh_objo1
c g_objo, Jkj, nbh_objo2
c g_objo, Kkj, nbh_objo3
c g_objo, Tij, nbh_objo4
c g_objo, Jij, nbh_objo5
c g_objo, Kij, nbh_objo6
c g_exch, Kka, nbh_exch1
c g_exch, Kia, nbh_exch2
c g_coul, Jka, nbh_coul1
c g_coul, Jia, nbh_coul2
c
c non-blocking handles
c
integer nbh_objv1,nbh_objv2,nbh_objv3
integer nbh_objv5,nbh_objv6,nbh_objv7
integer nbh_objv4(nocc)
c
integer nbh_objo1,nbh_objo2,nbh_objo3
integer nbh_objo4,nbh_objo5,nbh_objo6
c
integer nbh_exch1,nbh_exch2,nbh_coul1,nbh_coul2
c
logical need_ccsd_dovvv1
logical need_ccsd_dovvv2
logical need_ccsd_doooo1
logical need_ccsd_doooo2
c
#ifdef DEBUG_PRINT
integer tt
double precision tt0,tt1,trp_time(26)
#endif
c
c==================================================
c
double precision zip
data zip/0.0d00/
c
Nodes = GA_NNodes()
IAm = GA_NodeID()
c
call ga_sync()
c
if (occsdps) then
call pstat_on(ps_trpdrv)
else
call qenter('trpdrv',0)
endif
inode=-1
next=nxtask(nodes, 1)
c
#ifdef DEBUG_PRINT
do tt = 1, 26
trp_time(tt) = 0.0d0
enddo
#endif
c
do klo = 1, nocc, kchunk
akold=0
khi = min(nocc, klo+kchunk-1)
do a=oseg_lo,oseg_hi
av=a-ncor-nocc
do j=1,nocc
inode=inode+1
if (inode.eq.next)then
c
c Get Dja = Dci,ja for given j, a, all ci
c
start = 1 + (j-1)*lnov
len = lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objv,start,end,av,av,Dja,len,
1 nbh_objv1)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(1) = trp_time(1) + (tt1-tt0)
#endif
c
c Get Tkj = T(b,c,k,j) for given j, klo<=k<=khi, all bc
c
start = (klo-1)*lnvv + 1
len = (khi-klo+1)*lnvv
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objo,start,end,j,j,Tkj,len,
1 nbh_objo1)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(2) = trp_time(2) + (tt1-tt0)
#endif
c
c Get Jkj = J(c,l,k,j) for given j, klo<=k<=khi, all cl
c
start = lnovv + (klo-1)*lnov + 1
len = (khi-klo+1)*lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objo,start,end,j,j,Jkj,len,
1 nbh_objo2)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(3) = trp_time(3) + (tt1-tt0)
#endif
c
c Get Kkj = K(c,l,k,j) for given j, klo<=k<=khi, all cl
c
start = lnovv + lnoov + (klo-1)*lnov + 1
len = (khi-klo+1)*lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objo,start,end,j,j,Kkj,len,
1 nbh_objo3)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(4) = trp_time(4) + (tt1-tt0)
#endif
c
if (akold .ne. a) then
akold = a
c
c Get Jka = J(b,c,k,a) for given a, klo<=k<=khi, all bc
c
start = (a-oseg_lo)*nocc + klo
len = (khi-klo+1)
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_coul,1,lnvv,start,end,Jka,lnvv,
1 nbh_coul1)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(5) = trp_time(5) + (tt1-tt0)
#endif
c
c Get Kka = K(b,c,k,a) for given a, klo<=k<=khi, all bc
c
start = (a-oseg_lo)*nocc + klo
len = (khi-klo+1)
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_exch,1,lnvv,start,end,Kka,lnvv,
1 nbh_exch1)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(6) = trp_time(6) + (tt1-tt0)
#endif
c
c Get Tka = Tbl,ka for given a, klo<=k<=khi, all bl
c
start = 1 + lnoov + (klo-1)*lnov
len = (khi-klo+1)*lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objv,start,end,av,av,Tka,len,
1 nbh_objv2)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(7) = trp_time(7) + (tt1-tt0)
#endif
c
c Get Xka = Tal,kb for given a, klo<=k<=khi, all bl
c
start = 1 + lnoov + lnoov + (klo-1)*lnov
len = (khi-klo+1)*lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objv,start,end,av,av,Xka,len,
1 nbh_objv3)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(8) = trp_time(8) + (tt1-tt0)
#endif
endif
c
c Get Djka = Dcj,ka for given j, a, klo<=k<=khi, all c
c
do k = klo, khi
start = 1 + (j-1)*nvir + (k-1)*lnov
len = nvir
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objv,start,end,av,av,
1 Djka(1+(k-klo)*nvir),len,nbh_objv4(k)) ! k <= nocc
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(9) = trp_time(9) + (tt1-tt0)
#endif
enddo
c
do i=1,nocc
c
c Get Tij = T(b,c,i,j) for given j, i, all bc
c
start = (i-1)*lnvv + 1
len = lnvv
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objo,start,end,j,j,Tij,len,
1 nbh_objo4)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(10) = trp_time(10) + (tt1-tt0)
#endif
c
c Get Jij = J(c,l,i,j) for given j, i, all cl
c
start = lnovv + (i-1)*lnov + 1
len = lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objo,start,end,j,j,Jij,len,
1 nbh_objo5)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(11) = trp_time(11) + (tt1-tt0)
#endif
c
c Get Kij = K(c,l,i,j) for given j, i, all cl
c
start = lnovv + lnoov + (i-1)*lnov + 1
len = lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objo,start,end,j,j,Kij,len,
1 nbh_objo6)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(12) = trp_time(12) + (tt1-tt0)
#endif
c
c Get Jia = J(b,c,i,a) for given a, i, all bc
c
start = (a-oseg_lo)*nocc + i
len = 1
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_coul,1,lnvv,start,end,Jia,lnvv,
1 nbh_coul2)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(13) = trp_time(13) + (tt1-tt0)
#endif
c
c Get Kia = K(b,c,i,a) for given a, i, all bc
c
start = (a-oseg_lo)*nocc + i
len = 1
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_exch,1,lnvv,start,end,Kia,lnvv,
1 nbh_exch2)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(14) = trp_time(14) + (tt1-tt0)
#endif
c
c Get Dia = Dcj,ia for given j, i, a, all c
c
start = 1 + (j-1)*nvir + (i-1)*lnov
len = nvir
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objv,start,end,av,av,Djia,len,
1 nbh_objv5)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(15) = trp_time(15) + (tt1-tt0)
#endif
c
c Get Tia = Tbl,ia for given a, i, all bl
c
start = 1 + lnoov + (i-1)*lnov
len = lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objv,start,end,av,av,Tia,len,
1 nbh_objv6)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(16) = trp_time(16) + (tt1-tt0)
#endif
c
c Get Xia = Tal,ib for given a, i, all bl
c
start = 1 + lnoov + lnoov + (i-1)*lnov
len = lnov
end = start + len - 1
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ga_nbget(g_objv,start,end,av,av,Xia,len,
1 nbh_objv7)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(17) = trp_time(17) + (tt1-tt0)
#endif
c
do k=klo,min(khi,i)
call dfill(lnvv,zip,f1n,1)
call dfill(lnvv,zip,f1t,1)
call dfill(lnvv,zip,f2n,1)
call dfill(lnvv,zip,f2t,1)
call dfill(lnvv,zip,f3n,1)
call dfill(lnvv,zip,f3t,1)
call dfill(lnvv,zip,f4n,1)
call dfill(lnvv,zip,f4t,1)
c
need_ccsd_dovvv1 = .true.
need_ccsd_dovvv2 = .true.
need_ccsd_doooo1 = .true.
need_ccsd_doooo2 = .true.
c
#ifdef DEBUG_PRINT
!write(6,*) IAm,'before do-while loop'
#endif
c
do while ( need_ccsd_dovvv1 .or. need_ccsd_dovvv2
1 .or. need_ccsd_doooo1 .or. need_ccsd_doooo2 )
c
c sum(d) (Jia, Kia)bd * Tkj,cd -> Fbc
c
c g_coul, Jia, nbh_coul2
c g_exch, Kia, nbh_exch2
c g_objo, Tkj, nbh_objo1
c
if ( need_ccsd_dovvv1 ) then
if ( (0.eq.ga_nbtest(nbh_coul2)) .and.
1 (0.eq.ga_nbtest(nbh_exch2)) .and.
2 (0.eq.ga_nbtest(nbh_objo1)) ) then
#ifdef DEBUG_PRINT
!write(6,55) IAm,'ccsd_dovvv1'
#endif
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ccsd_dovvv(Jia, Kia,
$ Tkj(1+(k-klo)*lnvv),
$ f1n,f2n,f3n,f4n,nocc,nvir)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(18) = trp_time(18) + (tt1-tt0)
#endif
c
need_ccsd_dovvv1 = .false.
c
endif
endif
c
c sum(d) (Jka, Kka)bd * Tij,cd -> Fbc
c
c g_coul, Jka, nbh_coul1
c g_exch, Kka, nbh_exch1
c g_objo, Tij, nbh_objo4
c
if ( need_ccsd_dovvv2 ) then
if ( (0.eq.ga_nbtest(nbh_coul1)) .and.
1 (0.eq.ga_nbtest(nbh_exch1)) .and.
2 (0.eq.ga_nbtest(nbh_objo4)) ) then
#ifdef DEBUG_PRINT
!write(6,55) IAm,'ccsd_dovvv2'
#endif
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ccsd_dovvv(Jka(1+(k-klo)*lnvv),
$ Kka(1+(k-klo)*lnvv),Tij,
$ f1t,f2t,f3t,f4t,nocc,nvir)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(19) = trp_time(19) + (tt1-tt0)
#endif
c
need_ccsd_dovvv2 = .false.
c
endif
endif
c
c sum(l) (Jij, Kij)cl * Tkl,ab -> Fbc
c
c g_objo, Jkj, nbh_objo2
c g_objo, Kkj, nbh_objo3
c g_objv, Tia, nbh_objv6
c g_objv, Xia, nbh_objv7
c
if ( need_ccsd_doooo1 ) then
if ( (0.eq.ga_nbtest(nbh_objo2)) .and.
1 (0.eq.ga_nbtest(nbh_objo3)) .and.
2 (0.eq.ga_nbtest(nbh_objv6)) .and.
3 (0.eq.ga_nbtest(nbh_objv7)) ) then
#ifdef DEBUG_PRINT
!write(6,55) IAm,'ccsd_doooo1'
#endif
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ccsd_doooo(Jkj(1+(k-klo)*lnov),
$ Kkj(1+(k-klo)*lnov),Tia,Xia,
$ f1n,f2n,f3n,f4n,nocc,nvir)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(20) = trp_time(20) + (tt1-tt0)
#endif
c
need_ccsd_doooo1 = .false.
c
endif
endif
c
c sum(l) (Jkj, Kkj)cl * Tli,ba -> Fbc
c
c g_objo, Jij, nbh_objo5
c g_objo, Kij, nbh_objo6
c g_objv, Tka, nbh_objv2
c g_objv, Xka, nbh_objv3
c
if ( need_ccsd_doooo2 ) then
if ( (0.eq.ga_nbtest(nbh_objo5)) .and.
1 (0.eq.ga_nbtest(nbh_objo6)) .and.
2 (0.eq.ga_nbtest(nbh_objv2)) .and.
3 (0.eq.ga_nbtest(nbh_objv3)) ) then
#ifdef DEBUG_PRINT
!write(6,55) IAm,'ccsd_doooo2'
#endif
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ccsd_doooo(Jij, Kij,
$ Tka(1+(k-klo)*lnov),Xka(1+(k-klo)*lnov),
$ f1t,f2t,f3t,f4t,nocc,nvir)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(21) = trp_time(21) + (tt1-tt0)
#endif
c
need_ccsd_doooo2 = .false.
c
endif
endif
c
enddo ! while need...
#ifdef DEBUG_PRINT
!write(6,*) IAm,'after do-while loop and before ga_nbwaits'
#endif
c
c g_objv, Dja, nbh_objv1
c g_objv, Djka(1+(k-klo)*nvir), nbh_objv4(k)
c g_objv, Djia, nbh_objv5
c
c just do waits since it is unlikely that these get calls
c will not finish during the time that ccsd_do... is running
c
call ga_nbwait(nbh_objv1)
!do k = klo, khi
call ga_nbwait(nbh_objv4(k))
!enddo
call ga_nbwait(nbh_objv5)
c
#ifdef DEBUG_PRINT
!write(6,*) IAm,'after ga_nbwaits'
#endif
c
eaijk=eorb(ncor+i)+eorb(ncor+j)+eorb(ncor+k)-
$ eorb(a)
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ccsd_tengy(f1n,f1t,f2n,f2t,
$ f3n,f3t,f4n,f4t,
& Dja(1+(i-1)*nvir),Djia,
$ t1((k-1)*nvir+1),
$ eorb,eaijk,emp4,emp5,
$ ncor,nocc,nvir)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(22) = trp_time(22) + (tt1-tt0)
#endif
c
if (i.ne.k)then
#ifdef DEBUG_PRINT
tt0 = ga_wtime()
#endif
call ccsd_tengy(f1t,f1n,f2t,f2n,
$ f3t,f3n,f4t,f4n,
$ Dja(1+(k-1)*nvir),
$ Djka(1+(k-klo)*nvir),
$ t1((i-1)*nvir+1),
$ eorb,eaijk,emp4,emp5,
$ ncor,nocc,nvir)
#ifdef DEBUG_PRINT
tt1 = ga_wtime()
trp_time(23) = trp_time(23) + (tt1-tt0)
#endif
c
end if
end do
end do
if (iprt.gt.50)then
write(6,1234)iam,a,j,emp4,emp5
1234 format(' iam aijk',3i5,2e15.5)
end if
next=nxtask(nodes, 1)
end if
end do
end do
end do
c
#ifdef DEBUG_PRINT
c
do tt = 1, 17
!write(6,97) IAm,tt,trp_time(tt)
trp_time(24) = trp_time(24) + trp_time(tt)
enddo
call util_flush(6)
97 format('node ',i5,': ga_nbget timer(',i2,') = ',1e15.5)
c
do tt = 18, 21
!write(6,98) IAm,tt,trp_time(tt)
trp_time(25) = trp_time(25) + trp_time(tt)
enddo
call util_flush(6)
98 format('node ',i5,': dgemm timer(',i2,') = ',1e15.5)
c
do tt = 22, 23
!write(6,99) IAm,tt,trp_time(tt)
trp_time(26) = trp_time(26) + trp_time(tt)
enddo
call util_flush(6)
99 format('node ',i5,': tengy timer(',i2,') = ',1e15.5)
c
call ga_sync()
if (IAm.eq.0) write(6,87)
87 format(2x,'node',6x,'ga_nbget',9x,'dgemm',10x,'tengy')
call ga_sync()
write(6,88) IAm,trp_time(24),trp_time(25),trp_time(26)
88 format(i7,3e15.5)
c
#endif
c
next=nxtask(-nodes, 1)
call ga_sync
if (occsdps) then
call pstat_off(ps_trpdrv)
else
call qexit('trpdrv',0)
endif
c
55 format('node ',i5,': ',a12)
c
end

View file

@ -0,0 +1,121 @@
subroutine ccsd_trpdrv_omp_fbody_reduce_new (f1n, f1t, f2n, f2t,
& f3n, f3t, f4n, f4t,
& eorb,
& ncor, nocc, nvir,
& emp4, emp5,
& i, k,
& eaijk,
& dintc1, dintx1, t1v1,
& dintc2, dintx2, t1v2)
use omp_lib
use iso_fortran_env
implicit none
double precision, intent(inout) :: emp4, emp5
double precision, intent(inout) :: f1n(nvir,nvir), f1t(nvir,nvir)
double precision, intent(inout) :: f2n(nvir,nvir), f2t(nvir,nvir)
double precision, intent(inout) :: f3n(nvir,nvir), f3t(nvir,nvir)
double precision, intent(inout) :: f4n(nvir,nvir), f4t(nvir,nvir)
double precision, intent(in) :: eorb(*)
double precision, intent(in) :: eaijk
double precision, intent(in) :: dintc1(nvir), dintx1(nvir)
double precision, intent(in) :: dintc2(nvir), dintx2(nvir)
double precision, intent(in) :: t1v1(nvir), t1v2(nvir)
integer, intent(in) :: ncor, nocc, nvir
integer, intent(in) :: i, k
double precision :: emp4i,emp5i,emp4k,emp5k, denom
double precision :: f1nbc,f1tbc,f1ncb,f1tcb
double precision :: f2nbc,f2tbc,f2ncb,f2tcb
double precision :: f3nbc,f3tbc,f3ncb,f3tcb
double precision :: f4nbc,f4tbc,f4ncb,f4tcb
double precision :: t1v1b,t1v2b,dintx1c,dintx2c,dintc1c,dintc2c
integer :: b,c
emp4i = 0.0
emp5i = 0.0
emp4k = 0.0
emp5k = 0.0
!$omp target teams distribute parallel do collapse(2)
& reduction(+:emp5i,emp4i,emp5k,emp4k)
& private(f1nbc,f1tbc,f1ncb,f1tcb,f2nbc,f2tbc,f2ncb,f2tcb)
& private(f3nbc,f3tbc,f3ncb,f3tcb,f4nbc,f4tbc,f4ncb,f4tcb)
& private(t1v1b,t1v2b,dintx1c,dintx2c,dintc1c,dintc2c)
& private(denom) firstprivate(eaijk,nvir,ncor,nocc)
do b=1,nvir
do c=1,nvir
denom=-1.0/( eorb(ncor+nocc+b)+eorb(ncor+nocc+c)+eaijk )
f1nbc = f1n(b,c);
f1tbc = f1t(b,c);
f1ncb = f1n(c,b);
f1tcb = f1t(c,b);
f2nbc = f2n(b,c);
f2tbc = f2t(b,c);
f2ncb = f2n(c,b);
f2tcb = f2t(c,b);
f3nbc = f3n(b,c);
f3tbc = f3t(b,c);
f3ncb = f3n(c,b);
f3tcb = f3t(c,b);
f4nbc = f4n(b,c);
f4tbc = f4t(b,c);
f4ncb = f4n(c,b);
f4tcb = f4t(c,b);
t1v1b = t1v1(b);
t1v2b = t1v2(b);
dintx1c = dintx1(c);
dintx2c = dintx2(c);
dintc1c = dintc1(c);
dintc2c = dintc2(c);
emp4i = emp4i
& + (denom * (f1tbc+f1ncb+f2tcb+f3nbc+f4ncb)
& * (f1tbc-f2tbc*2-f3tbc*2+f4tbc)
& - denom * (f1nbc+f1tcb+f2ncb+f3ncb)
& * (f1tbc*2-f2tbc-f3tbc+f4tbc*2)
& + denom * 3 * (f1nbc*(f1nbc+f3ncb+f4tcb*2)
& + f2nbc*f2tcb+f3nbc*f4tbc))
emp4k = emp4k
& + (denom * (f1nbc+f1tcb+f2ncb+f3tbc+f4tcb)
& * (f1nbc-f2nbc*2-f3nbc*2+f4nbc)
& - denom * (f1tbc+f1ncb+f2tcb+f3tcb)
& * (f1nbc*2-f2nbc-f3nbc+f4nbc*2)
& + denom * 3 * (f1tbc*(f1tbc+f3tcb+f4ncb*2)
& + f2tbc*f2ncb+f3tbc*f4nbc))
emp5i = emp5i
& + (denom * t1v1b * dintx1c
& * (f1tbc+f2nbc+f4ncb
& - (f3tbc+f4nbc+f2ncb+f1nbc+f2tbc+f3ncb)*2
& + (f3nbc+f4tbc+f1ncb)*4)
& + denom * t1v1b * dintc1c
& * (f1nbc+f4nbc+f1tcb -(f2nbc+f3nbc+f2tcb)*2))
emp5k = emp5k
& + (denom * t1v2b * dintx2c
& * (f1nbc+f2tbc+f4tcb
& - (f3nbc+f4tbc+f2tcb +f1tbc+f2nbc+f3tcb)*2
& + (f3tbc+f4nbc+f1tcb)*4)
& + denom * t1v2b * dintc2c
& * (f1tbc+f4tbc+f1ncb -(f2tbc+f3tbc+f2ncb)*2))
enddo
enddo
!$omp end target teams distribute parallel do
emp4 = emp4 + emp4i
emp5 = emp5 + emp5i
if (i.ne.k) then
emp4 = emp4 + emp4k
emp5 = emp5 + emp5k
end if ! (i.ne.k)
end

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,32 @@
# $Id$
include ../../config/makefile.h
ifdef USE_IMAX_OPENMP_TRPDRV
OBJ_OPTIMIZE = \
OBJ_OPTIMIZE += ccsd_trpdrv_mkl_module.o
FOPTIONS += -fiopenmp -fopenmp-targets=spir64="-mllvm -vpo-paropt-enable-64bit-opencl-atomics=true -mllvm -vpo-paropt-opt-data-sharing-for-reduction=false" -qmkl -DMKL_ILP64 -I"${MKLROOT}/include" -fpp -fixed -free
#OBJ_OPTIMIZE += ccsd_trpdrv_mkl_module.o
#.SECONDARY: ccsd_trpdrv_mkl_module.o
#ccsd_trpdrv_mkl_module.o: ccsd_trpdrv_mkl_module.F
# $(FC) $(MK_MODULE_FLAG) -c $< -o $@
#-include $(ccsd_trpdrv_mkl_module_)
#.PRECIOUS: ccsd_trpdrv_mkl_module.F
# $(FC) $(MK_MODULE_FLAG) -c $< -o $@
#USES_BLAS += ccsd_trpdrv_mkl_module.F
#ccsd_trpdrv_mkl_module.o : ccsd_trpdrv_mkl_module.F
# $(FC) $(MK_MODULE_FLAG) -c $< -o $@
endif
LIB_DEFINES +=-DUSE_F90INTERFACE
LIBRARY = libccsd.a
include ../../config/makelib.h

View file

@ -0,0 +1,5 @@
include "mkl_omp_offload.f90"
module ccsd_mklmodule
end module ccsd_mklmodule

View file

@ -6,6 +6,8 @@
chelp_atom_rad.o\
chelp_grid_data.o
USES_BLAS = chelp_grid.F chelp_grid_data.F
LIBRARY=libchelp.a
HEADERS=

View file

@ -25,14 +25,14 @@ fi
perlscript=${NWCHEM_TOP}/src/config/32_to_64.pl
JOB_LIMIT=4
JOB_LIMIT=6
njob=0
for file in "$@"
do
echo converting "$file" to 32-bit integers for BLAS/LAPACK
echo converting "$file" to 64-bit integers for BLAS/LAPACK
($perlexe $perlscript $file) &
let njob++

View file

@ -25,7 +25,7 @@ fi
perlscript=${NWCHEM_TOP}/src/config/64_to_32.pl
JOB_LIMIT=8
JOB_LIMIT=6
njob=0

View file

@ -87,16 +87,12 @@ foreach my $file (@ARGV){
rename($file,$filebak);
$file = '>' . $file;
my $my_pid = $pid;
if (open(FILETOFIX,$filebak)) {
# print " open OK\n";
}else{
print "Exiting: Could not open file: $filebak\n";
kill 15, -$my_pid;
}
open(FIXEDFILE,$file) || die "Could not open file: $file\n";
while (<FILETOFIX>) {
my $str = "";
open my $fh, '<', $filebak or die "Can't open file $!";
my $file_content = "1234";
while (<$fh>) {
if ( /^c/ || /^C/ || /^\*/ || /^$/){
print FIXEDFILE $_;
$str .= $_;
}
else {
for ($compare = 0; $compare < $num_compare ; $compare++)
@ -122,11 +118,13 @@ foreach my $file (@ARGV){
}
}
}
print FIXEDFILE $_;
$str .= $_;
}
}
close $fh or die $!;
open(FIXEDFILE,$file) || die "Could not open file: $file\n";
print FIXEDFILE $str;
close(FIXEDFILE);
close(FILETOFIX);
unlink($filebak);
my $filesize = stat("$orgfile")->size;
if($filesize eq "0") {

View file

@ -1,12 +1,15 @@
#!/usr/bin/env bash
if [[ $(uname -s) == "Darwin" ]]; then
xcode_v=$(/usr/bin/xcodebuild -version |head -n1 |cut -d ' ' -f 2|cut -d '.' -f 1)
xcode_v=$(clang --version 2>&1 |head -1 |cut -d ' ' -f 4 |cut -d . -f 1)
# echo $xcode_v
if [[ $( [ $xcode_v -ge 15 ] && echo 1) ]] ; then
echo got xcode15
export GOT_XCODE15=1
export OMPI_FCFLAGS=" -Wl,-ld_classic "
export OMPI_CFLAGS=" -Wl,-ld_classic -Wno-unused-command-line-argument "
#figure out where the open-mpi libs are
OMPILIBDIR=$(brew --cellar)/../opt/open-mpi/lib
export OMPI_LDFLAGS=" -ld_classic -L$OMPILIBDIR"
# export OMPI_FCFLAGS=" -Wl,-ld_classic "
# export OMPI_CFLAGS=" -Wl,-ld_classic -Wno-unused-command-line-argument "
# export MPICH_FC="mpif90 -Wl,-ld_classic "
# export MPICH_CC="mpicc -Wl,-ld_classic "
# env|egrep MPICH_

File diff suppressed because it is too large Load diff

View file

@ -147,12 +147,10 @@ optimized:
endif
dummy:
else
LIBOBJ := $(patsubst %,$(LIBRARY_PATH)(%),$(OBJ_OPTIMIZE))
$(LIBRARY_PATH): $(LIBOBJ)
# Previous line must contain tab for empty command
endif
@ -189,7 +187,7 @@ endif
if [ "$$list" ] ; then \
$(CNFDIR)/lockfile -steal $(LOCKFILE) || exit 1 ; \
echo $(AR) $(ARFLAGS) $(LIBRARY_PATH) $$list ; \
echo $$list|grep -v truncated | xargs -n 300 $(AR) $(ARFLAGS) $(LIBRARY_PATH) 2>&1 ; \
echo $$list|grep -v truncated | xargs -n 300 $(AR) $(ARFLAGS) $(LIBRARY_PATH) 2>&1 ; \
/bin/rm -f $$list ; \
echo $(RANLIB) $(LIBRARY_PATH) ; $(RANLIB) $(LIBRARY_PATH) ; \
/bin/rm -f $(LOCKFILE) ; \
@ -212,7 +210,11 @@ endif
MAKESUBDIRS = +@for dir in $(SUBDIRS); do \
echo Making $@ in $$dir; \
$(MAKE) -C $$dir $@ || exit 1 ; done
if [ $@ == "include_stamp" ] || [ $@ == "dependencies" ]; then \
$(MAKE) SKIP_COMPILERS=1 -C $$dir $@ || exit 1 ; \
else \
$(MAKE) QUICK_BUILD=1 SKIP_COMPILERS=1 -C $$dir $@ || exit 1 ; \
fi ; done
ifdef SUBDIRS
ifndef OPTIMIZE
@ -223,7 +225,12 @@ $(LIBRARY_PATH): subdirs
subdirs:
@for dir in $(SUBDIRS); do \
echo Making all in $$dir; \
if [ $@ == "include_stamp" ] || [ $@ == "dependencies" ]; then \
echo skipping ; \
$(MAKE) SKIP_COMPILERS=1 -C $$dir || exit 1 ; \
else \
$(MAKE) -C $$dir || exit 1 ; \
fi \
done
endif
endif
@ -254,7 +261,7 @@ ifdef SUBDIRS
endif
touch include_stamp
endif
endif
endif # QUICKBUILD
ifdef CONVERT_ALL
64_to_32:
$(CNFDIR)/64_to_32 *.F *.f *.c *.f90
@ -309,7 +316,7 @@ ifdef SUBDIRS
endif
-$(RM) -f *.o *.a *.mod *__genmod.f90 *core *stamp *trace mputil.mp* *events* *ipo *optrpt $(LIB_TARGETS)
if [ -f $(LIBRARY_PATH) ] ; then \
echo $(OBJ) $(OBJ_OPTIMIZE)| xargs -n 300 $(AR) d $(LIBRARY_PATH) ; \
echo $(OBJ) $(OBJ_OPTIMIZE)| xargs -n 300 $(AR) d $(LIBRARY_PATH) ; \
if [ `$(AR) t $(LIBRARY_PATH) | wc | awk ' {print $$1;}'` -eq 0 ] ; then \
$(RM) -f $(LIBRARY_PATH) ; \
fi ; \
@ -327,7 +334,7 @@ tags_file:
.PHONY: tags_clean
tags_clean:
find . -name TAGS -print -exec rm -f "{}" ";"
.PHONY: cleanF
cleanF:
ifdef SUBDIRS
@ -392,7 +399,20 @@ $(BINDIR)/depend.x:
dependencies: $(wildcard *.c) $(wildcard *.F) $(BINDIR)/depend.x
ifndef QUICK_BUILD
$(BINDIR)/depend.x $(LIB_INCLUDES) $(INCPATH) > dependencies
# if [ $V == '-1' ]; then \
# $$MYSTDERR = " 2> /dev/null" \
# fi \
# echo MYSTDERROR $$MYSTDERR \
# ifeq ($(V),-1)
# MYSTDERR = " 2> /dev/null"
# else
# MYSTDERR = " "
# endif
ifeq ($(V),-1)
@$(BINDIR)/depend.x $(LIB_INCLUDES) $(INCPATH) > dependencies
else
$(BINDIR)/depend.x $(LIB_INCLUDES) $(INCPATH) > dependencies
endif
endif
-include dependencies

61
src/config/oblas_ompcheck.sh Executable file
View file

@ -0,0 +1,61 @@
#!/usr/bin/env bash
# oblas_dir directory where libopenblas is located
# oblas_name "openblas" suffix in lib"openblas".
# e.g. for debian pkg libopenblas64-pthread-dev
# oblas_dir=/usr/lib/x86_64-linux-gnu/openblas64-pthread/
# oblas_name=openblas64
#echo "USE_OPENMP is equal to " $USE_OPENMP
mylog=/tmp/mylog.txt
NWCHEM_TOP=$1
file_check=$NWCHEM_TOP/src/oblas_ompcheck_done.txt
if [ -f $file_check ]; then
# echo $file_check present >> $mylog
cat $file_check
exit 0
fi
echo BLASOPT is $BLASOPT >> $mylog
if [[ -z "${BLASOPT}" ]]; then
echo BLASOPT is empty >> $mylog
echo 0 > $NWCHEM_TOP/src/oblas_ompcheck_done.txt
exit 0
else
echo BLASOPT is not empty @$BLASOPT@ >> $mylog
fi
#extract oblas_dir & oblas_name from BLASOPT
#
oblas_dir=$(echo $BLASOPT | awk 'sub(/.*-L */,""){f=1} f{if ( sub(/ * .*/,"") ) f=0; print}')
oblas_name=$(echo $BLASOPT | awk 'sub(/.* -l */,""){f=1} f{if ( sub(/ * .*/,"") ) f=0; print}')
echo oblas_dir is $oblas_dir oblas_name is $oblas_name >> $mylog
find $oblas_dir -name "lib*openblas*.*"|| true
if [ $(uname -s) == 'Darwin' ]; then
MYLDD='otool -L'
SOSUFFIX=dylib
else
MYLDD=ldd
SOSUFFIX=so
fi
# check first against clang libomp
if [ -f "$oblas_dir/lib$oblas_name.$SOSUFFIX" ];
then
gotomp=$($MYLDD $oblas_dir/lib$oblas_name.$SOSUFFIX | grep libomp | wc -l )
# next check against gcc libgomp
if [ $gotomp -eq 0 ]
then
gotomp=$($MYLDD $oblas_dir/lib$oblas_name.$SOSUFFIX | grep libgomp | wc -l )
fi
else
gotomp=0
fi
echo gotomp $gotomp >> $mylog
#conda packages might use OpenMP to thread OpenBLAS
if [ $gotomp -ne 0 ]
then
echo openblas built with OpenMP >> $mylog
export OPENBLAS_USES_OPENMP=1
unset USE_OPENMP
else
echo openblas built without OpenMP >> $mylog
fi
echo $gotomp > $NWCHEM_TOP/src/oblas_ompcheck_done.txt
echo $gotomp
exit 0

View file

@ -1,4 +1,4 @@
#/usr/bin/env bash
#!/usr/bin/env bash
# ifeq ($(shell basename -- $(FC)| cut -d \- -f 1),nvfortran)
#gcc or gfortran?
if [[ "$1" == *fortran* ]] && [[ ! -z $_FC ]]; then
@ -7,6 +7,8 @@ elif [[ "$1" == *cc* ]] && [[ ! -z $_CC ]]; then
echo $_CC
elif [[ "$1" == *gfortran* ]] ; then
echo gfortran
elif [[ "$1" == *flang* ]] ; then
echo flang
else
echo $(basename -- $1 | cut -d \- -f 1 | sed 's/[0-9]*//g')
fi

View file

@ -3,6 +3,7 @@
OBJ = cons_input.o cons.o cons_utils.o cons_springs.o cons_rtdb.o cons_data.o
USES_BLAS = cons_data.F

View file

@ -529,6 +529,7 @@ c
double precision s52,s63,s1263,s5263
integer k
double precision phi0
double precision acos_in
character*30 pname
c
pname = "cons_dihed"
@ -544,8 +545,10 @@ c
call cons_ddot(r52,r52,s52)
call cons_ddot(r63,r63,s63)
call cons_ddot(r52,r63,s5263)
phi0 = acos(s5263/sqrt(s52*s63))
acos_in=s5263/sqrt(s52*s63)
c keeps acos value between -1 and 1
acos_in=sign(min(1d0,abs(acos_in)),acos_in)
phi0 = acos(acos_in)
call cons_ddot(r12,r63,s1263)

View file

@ -48,6 +48,7 @@ c
external file_write_ga,file_read_ga, file_read_ga_info
integer vlen, nvirt, nmos(2), nbf_vecs, nsets
integer bases(2), nbases, nvec, ncol,ndata
integer gtype,a_nrow,a_ncol
character*255 title_vecs, basis_vecs
character*20 scftype_vecs
double precision residual
@ -428,6 +429,20 @@ c == copy solution (g_work) --> g_grad 2nd subspace===START
shift=3 ! skip first subspace that corresponds to g_b
m1=shift+1
m2=shift+nvec
call ga_inquire(g_grad, gtype, a_nrow, a_ncol)
if(m2.gt.a_ncol) then
if(ga_nodeid().eq.0)
W write(luout,*)
W ' cphf_solve2: g_grad wrong col indices',
M m2, ' gt ',a_ncol
chack
shift=a_ncol-1
if(ga_nodeid().eq.0)
W write(luout,*) ' cph_solve2: reset shift=',shift
m1=1
m2=nvec
! call errquit(' cphf_solve2: wrong patch indices',1,0)
endif
call ga_copy_patch('n',g_work,1,vlen,1 ,nvec,
& g_grad,1,vlen,m1,m2)
c == copy solution (g_work) --> g_grad 2nd subspace===END

View file

@ -855,6 +855,9 @@ c Date : 03-15-12
& g_grad_re(ncomp),
& g_grad_im(ncomp)
logical use_my_guess,lifetime
integer a_nrow,a_ncol
integer b_nrow,b_ncol
integer gtype
c Note.- use_my_guess, stored in rtdb and used
c to indicate if we are using a vector solution
c taken from a file or not
@ -889,10 +892,30 @@ c n1= [sum_i nocc(i)*nvir(i)] * ncomp
m1=shift+1
m2=shift+nvec
endif ! ------------------------if-use_my_guess--END
do ipm = 1,ncomp
do ipm = 1,ncomp
call ga_inquire(g_grad_re(ipm), gtype, a_nrow, a_ncol)
if(m1.gt.a_nrow.or.m2.gt.a_ncol) then
if(ga_nodeid().eq.0)
W write(luout,*)
W ' cphf_solve3: g_grad_re wrong col indices',
M m2, ' gt ',a_ncol
chack
shift=a_ncol-1
if(ga_nodeid().eq.0)
W write(luout,*) ' cph_solve2: reset shift=',shift
m1=1
m2=nvec
c call errquit(' cphf_solve3: wrong patch indices',1,0)
endif
call ga_copy_patch('n',g_grad_re(ipm),1,vlen,m1,m2,
$ g_work_re(ipm),1,vlen,1 ,nvec)
if (lifetime) then
call ga_inquire(g_grad_im(ipm), gtype, b_nrow, b_ncol)
if(1.gt.b_nrow.or.nvec.gt.b_ncol) then
write(luout,*) ipm,' g_grad_im wrong indices',1, nvec,
A ' gt ',b_nrow, b_ncol
call errquit(' cphf_solve3: wrong patch indices',2,0)
endif
call ga_copy_patch('n',g_grad_im(ipm),1,vlen,m1,m2,
$ g_work_im(ipm),1,vlen,1 ,nvec)
endif

View file

@ -70,7 +70,7 @@
USES_BLAS = ao_fock_2e.F ao_replicated.F fock_2e_file.F fock_2e_slab.F int2e_file.F \
movecs_lock.F movecs_phase.F riscf_fock.F riscf_trans.F rohf_diis.F \
rohf_k2cf.F scf_movecs.F scf_vec_guess.F uhf.F movecs_frag.F localize.F fock_2e.F \
fock_2e_cam.F int_1e_ga.F movecs_rotate.F vectors.F ga_get2eri.F
fock_2e_cam.F int_1e_ga.F movecs_rotate.F vectors.F ga_get2eri.F cosmo_fock.F
HEADERS = schwarz.fh cscfps.fh cfock.fh cscf.fh cint2efile.fh cfockmul.fh crohf.fh cosmo.fh cuhf.fh frozemb.fh

View file

@ -19,7 +19,7 @@ ifdef TESTING
OBJ_OPTIMIZE =
endif
USES_BLAS = potential.F pot_shell.F fmm.F newfmm.F testfmm.F cart_trans.F xlm_poles.F fastj.F solver.F
USES_BLAS = potential.F pot_shell.F fmm.F newfmm.F testfmm.F cart_trans.F xlm_poles.F fastj.F solver.F cheby.F
LIB_TARGETS = solver testcheby testcarttrans testfmm

View file

@ -248,30 +248,25 @@ c
#include "bas.fh"
#include "util.fh"
c
c Localize the nloc orbitals in iloc(*) by mixing with each other
c Localize the nloc orbitals in iloc() by mixing with each other
c
integer basis, nloc, iloc(*), nbf, nmo
double precision c(nbf, 2), sc(nbf, 2)
integer basis, nloc, iloc(nmo), nbf, nmo
integer g_c, g_sc
integer maxat, nlist
*............................ these should be dynamically allocated ?
parameter (maxat = nw_max_atom)
integer list(maxat)
double precision pop(maxat)
c
integer iter, ss, s, tt, t, a, u, bflo, bfhi, natoms, geom
double precision c(nbf, 2), sc(nbf, 2)
integer iter, ss, s, tt, t, a, u, bflo, bfhi, geom, natoms
double precision ast, bst, qast, qat, qas, gamma, cosg, sing, d,
$ qs, dprev, tol, dmax, gamma_tol, gamma_max, tmp
integer nrot, set, pair, neven
integer nrot, set, pair, neven, locpow
c
if (.not. bas_geom(basis, geom)) call errquit
$ ('localize: basis ', 0, BASIS_ERR)
if (.not. geom_ncent(geom, natoms)) call errquit
$ ('localize: geom',0, GEOM_ERR)
c
if (natoms.gt.maxat) call errquit
& ('localize: maxat too small ', 911, UNKNOWN_ERR)
c
c locpow (localization sum exponent) should be 2 or 4
locpow = 2
tol = 1d-8
gamma_tol = 1d-10
c
@ -368,8 +363,20 @@ c
end do
qast = qast * 0.5d0
c
if (locpow.eq.2) then
ast = ast + qast**2 - 0.25d0*(qas - qat)**2
bst = bst + qast*(qas - qat)
elseif (locpow.eq.4) then
tmp = -1.0d0*(qas**4 + qat**4)
tmp = tmp + 6.0d0*((qas**2 + qat**2)* qast**2)
tmp = tmp + qas**3 * qat + qas * qat**3
ast = ast + 0.25d0*tmp
tmp = 4.0d0 * qast*(qas**3 - qat**3)
bst = bst + 0.25d0*tmp
else
call errquit('pmloc: locpow ', locpow,
& UNKNOWN_ERR)
end if
end do
c
gamma = 0.25d0*acos(-ast/sqrt(ast**2+bst**2))
@ -401,53 +408,8 @@ c
c
1000 continue
c Analyze localization of each mo:
c per lmo, a list of atomic populations is printed
c in decreasing magnitude, with the polulations in parentheses.
c
if (ga_nodeid() .eq. 0) then
write(6,*)
do ss = 1, nloc
s = iloc(ss)
call ga_get(g_c, 1, nbf, s, s, c(1,1), 1)
call ga_get(g_sc, 1, nbf, s, s,sc(1,1), 1)
nlist = 0
do a = 1, natoms
if (.not. bas_ce2bfr(basis, a, bflo, bfhi))
$ call errquit('localized: basis ', 0,
& BASIS_ERR)
qas = 0.0d0
do u = bflo, bfhi
qas = qas + c(u,1)*sc(u,1)
end do
if (abs(qas) .gt. 0.01d0) then
nlist = nlist + 1
list(nlist) = a
pop(nlist) = qas
end if
end do
do u = 1, nlist
do t = 1, u-1
if (abs(pop(t)).lt.abs(pop(u))) then
tmp = pop(u)
pop(u) = pop(t)
pop(t) = tmp
tt = list(u)
list(u) = list(t)
list(t) = tt
end if
end do
end do
write(6,9002) s, (list(a), pop(a), a=1,nlist)
9002 format(i5, 100(2x,i4,'(',f5.2,')'))
end do
call util_flush(6)
end if
c
call ga_sync
c
end
end
c
c =================================================================
c
@ -469,7 +431,7 @@ c
c
c Localize the nloc orbitals in iloc(*) by mixing with each other
c
integer basis, nloc, iloc(*), nbf, nmo
integer basis, nloc, iloc(nmo), nbf, nmo
double precision c(nbf, 2), uc(nbf, 2, 4)
integer g_c, g_uc(4) ! x, y, z, overlap
c

View file

@ -81,7 +81,7 @@ c
& INPUT_ERR)
if (.not. ga_create(MT_DBL, nbf_frag, nmo_frag(1),
$ ' frag mos', 32, 32, g_frag))
$ call errquit('movecs_fragment: GA for frag MOs', nmo_frag,
$ call errquit('movecs_fragment: GA for frag MOs', nmo_frag(1),
& GA_ERR)
if (.not. ma_push_get(mt_dbl, nbf_frag,
$ ' fragment eva', l_eval, k_eval)) call errquit

View file

@ -2775,7 +2775,8 @@ c ---- Move g_Axreim --> g_Az1---- END
& GA_ERR)
enddo ! end-loop-iset (spin A,B)
enddo ! end-loop-cnt
if (.not. ga_destroy(g_Axreim)) call errquit('uhf_hv2e: Axreim',0,
if (.not. ga_destroy(g_Axreim))
c call errquit('uhf_hv2e: Axreim',0,
& GA_ERR)
if (debug) then
if (ga_nodeid().eq.0)
@ -4111,8 +4112,9 @@ c ---- Move g_Axreim --> g_Az---- END
& GA_ERR)
enddo ! end-loop-iset (spin A,B)
enddo ! end-loop-cnt
if (.not. ga_destroy(g_Axreim)) call errquit('uhf_hv2e: Axreim',0,
& GA_ERR)
if (.not. ga_destroy(g_Axreim))
& call errquit('uhf_hv2e: Axreim',0,
& GA_ERR)
if (debug) then
if (ga_nodeid().eq.0)
& write(*,*) '------- g_Az-1------ START'

View file

@ -11,7 +11,7 @@
LIBRARY = libtest.a
USES_BLAS = raktest.F rak20.F rak21.F rak22.F rak23.F jvltest.F rjhtrans.F cct_UHF.F rak25.F rak26.F rak27.F rak29.F rak30.F
USES_BLAS = raktest.F rak20.F rak21.F rak22.F rak23.F jvltest.F rjhtrans.F cct_UHF.F rak25.F rak26.F rak27.F rak29.F rak30.F jantest.F kgdtest.F uccsdtest.F
include ../config/makefile.h
include ../config/makelib.h

View file

@ -30,7 +30,7 @@
LIB_INCLUDES = -I../nwdft/include -I../ddscf -I../util -I../nwdft/grid -I../NWints/hondo
USES_BLAS = qmr_real.F dimqm_main.F
USES_BLAS = qmr_real.F dimqm_main.F CubicSpline.F dim_elfcon.F dim_elfder.F dim_tabcd.F qmr_complex.F qmr_seed_complex.F qmr_seed_real.F seeded_qmr_complex.F seeded_qmr_real.F seeded_qmr_real_augment.F
HEADERS = dimqm.fh dimqm_constants.fh

View file

@ -2531,9 +2531,13 @@ c
integer i, l_bi, k_bi
logical opt_geom_cart_coords_get
logical opt_geom_cart_coords_set
logical newbandbi
external opt_geom_cart_coords_get,opt_geom_cart_coords_set
integer sym_number_ops
external sym_number_ops
if (.not. rtdb_get(rtdb,'driver:newbandbi', mt_log, 1, newbandbi))
$ newbandbi=.false.
c
c Get original coordinates
c
@ -2568,7 +2572,11 @@ c
c Now take the step for real in internals
c
c FRACTIONAL?
if(newbandbi) then
call geom_update_cart_from_int_new(geom, ds, alpha, err)
else
call geom_update_cart_from_int(geom, ds, alpha, err)
endif
c
* if (.not. opt_geom_cart_coords_set(geom, xnew))
* $ call errquit('driver_energy_step: coordinates?',geom,

View file

@ -1,83 +0,0 @@
*
* $Id$
*
*======================================================================
*
* DISCLAIMER
*
* This material was prepared as an account of work sponsored by an
* agency of the United States Government. Neither the United States
* Government nor the United States Department of Energy, nor Battelle,
* nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR
* ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY,
* COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT,
* SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT
* INFRINGE PRIVATELY OWNED RIGHTS.
*
* ACKNOWLEDGMENT
*
* This software and its documentation were produced with Government
* support under Contract Number DE-AC06-76RLO-1830 awarded by the United
* States Department of Energy. The Government retains a paid-up
* non-exclusive, irrevocable worldwide license to reproduce, prepare
* derivative works, perform publicly and display publicly by or for the
* Government, including the right to distribute to other Government
* contractors.
*
*======================================================================
*
* -- PFFT routine (version 1.0) --
* Pacific Northwest Laboratory
* April 5, 1995
*
*======================================================================
subroutine dcopy(n,dx,incx,dy,incy)
c
c copies a vector, x, to a vector, y.
c uses unrolled loops for increments equal to one.
c jack dongarra, linpack, 3/11/78.
c modified 12/3/93, array(1) declarations changed to array(*)
c
double precision dx(*),dy(*)
integer i,incx,incy,ix,iy,m,mp1,n
c
if(n.le.0)return
if(incx.eq.1.and.incy.eq.1)go to 20
c
c code for unequal increments or equal increments
c not equal to 1
c
ix = 1
iy = 1
if(incx.lt.0)ix = (-n+1)*incx + 1
if(incy.lt.0)iy = (-n+1)*incy + 1
do 10 i = 1,n
dy(iy) = dx(ix)
ix = ix + incx
iy = iy + incy
10 continue
return
c
c code for both increments equal to 1
c
c
c clean-up loop
c
20 m = mod(n,7)
if( m .eq. 0 ) go to 40
do 30 i = 1,m
dy(i) = dx(i)
30 continue
if( n .lt. 7 ) return
40 mp1 = m + 1
do 50 i = mp1,n,7
dy(i) = dx(i)
dy(i + 1) = dx(i + 1)
dy(i + 2) = dx(i + 2)
dy(i + 3) = dx(i + 3)
dy(i + 4) = dx(i + 4)
dy(i + 5) = dx(i + 5)
dy(i + 6) = dx(i + 6)
50 continue
return
end

View file

@ -6,6 +6,8 @@
OBJ = geninterface.o NWChemWrap.o
USES_BLAS = geninterface.F
HEADERS = geninterface.fh
include ../config/makefile.h

View file

@ -6,16 +6,20 @@
OBJ_OPTIMIZE = geom_hnd.o
OBJ = geom.o geom_input.o geom_input2.o geom_3d.o geom_2d.o geom_1d.o geom_numcore.o \
geom_checksum.o geom_print_ecce.o geom_freeze.o geom_fragment.o geom_getsym.o
geom_checksum.o geom_print_ecce.o geom_freeze.o geom_fragment.o geom_getsym.o \
geom_driver_utils.o
HEADERS = geom.fh geomP.fh periodic.fh
USES_BLAS = geom.F geom_input.F geom_print_ecce.F geom_hnd.F geom_3d.F geom_getsym.F geom_2d.F
USES_BLAS = geom.F geom_input.F geom_print_ecce.F geom_hnd.F geom_3d.F geom_getsym.F geom_2d.F \
geom_driver_utils.F
UNSET_OPENMP = 1
include ../config/makefile.h
include ../config/makelib.h
ifeq ($(FLANG_NEW),true)
FOPTIONS += -fno-automatic
endif
ifeq ($(_FC),pgf90)
FOPTIONS += -Mnorecursive
endif

View file

@ -0,0 +1,338 @@
#ifdef NEW_DRIVER_UTILS
subroutine geom_update_cart_from_int_new(geom, ds, alpha, err)
#else
subroutine geom_update_cart_from_int(geom, ds, alpha, err)
#endif
implicit none
#include "errquit.fh"
#include "geom.fh"
#include "mafdecls.fh"
#include "util.fh"
#include "global.fh"
#include "nwc_const.fh"
#include "stdio.fh"
#include "util_params.fh"
integer geom
double precision alpha, ds(*)
double precision err ! [output] Returns the error
c
c Adjust the cartesian coordinates in geom to reflect a
c displacement of the internal coordinates alpha*ds().
c ds() is in units of bohr and radians.
c
c Also enforce symmetry.
c
integer max_cent, max_nzvar
parameter (max_cent = nw_max_atom)
parameter (max_nzvar= 3*max_cent)
double precision p(max_nzvar) ! Current internals
double precision q(max_nzvar) ! Target internals
double precision dq(max_nzvar) ! Step in internals
double precision x(max_nzvar) ! Cartesian coordinates
double precision dx(max_nzvar) ! Step in Cartesian coordinates
double precision xsave(max_nzvar) ! Save first order step for recovery
c
integer l_bi, k_bi, i, ipass,nat, ncart, nzvar
double precision err1, xmax, xmax1
logical odebug, oprint
logical geom_zmt_get_nzvar, geom_compute_zmatrix
double precision bohr, deg
external geom_impose_constraints_on_q
c
odebug = (ga_nodeid().eq.0).and.util_print('optitoc',print_never)
oprint = (ga_nodeid().eq.0).and.util_print('xupdate',print_high)
oprint = oprint .or. odebug
c
if (.not. geom_zmt_get_nzvar(geom, nzvar))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
if (.not. geom_ncent(geom, nat))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
if (.not. geom_compute_zmatrix(geom, q))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
ncart = nat * 3
c
do i = 1, nzvar
dq(i) = alpha*ds(i)
enddo
c
c Form the target internals in bohr & degrees
c
bohr = cau2ang
deg = bohr*180d0/(4d0*atan(1d0))
if (.not. geom_compute_zmatrix(geom, q))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
call geom_zmat_ico_scale(geom, dq, bohr, deg)
* if (.not. geom_print_zmatrix(geom, dq, 'Step ', .true.))
* $ call errquit('fjl',0)
do i = 1, nzvar
q(i) = q(i) + dq(i)
enddo
call geom_zmat_ico_scale(geom, dq, 1d0/bohr, 1d0/deg)
err = 0.0d0
do i = 1, nzvar
err = max(err, abs(dq(i)))
enddo
if (odebug) then
write(LuOut,*) ' Target internals '
call output(q,1,nzvar,1,1,nzvar,1,1)
call util_flush(LuOut)
endif
c
if (.not. ma_push_get(mt_dbl,ncart*nzvar,'mem bi',l_bi,k_bi))
$ call errquit('opt_int_to_cart: ma', ncart*nzvar, MA_ERR)
c
c In a non-redundant set of coordinates the iteration will be
c quadratically convergent once very large steps have been damped
c out ... well this would be true except some torsions and
c angles can be very strongly coupled.
c
#ifdef NEW_DRIVER_UTILS
call geom_bandbi(geom)
call geom_hnd_get_data('b^-1', dbl_mb(k_bi), ncart*nzvar)
if (.not. geom_cart_coords_get(geom, x))
$ call errquit('opt_int_to_cart: geom get/set',0, GEOM_ERR)
#endif
do ipass = 1, 5
c
c dq -> dx -> x -> new q
c
#ifndef NEW_DRIVER_UTILS
call geom_bandbi(geom)
call geom_hnd_get_data('b^-1', dbl_mb(k_bi), ncart*nzvar)
#endif
call dgemv('n', ncart, nzvar, 1d0, dbl_mb(k_bi), ncart,
$ dq, 1, 0.0d0, dx, 1)
call sym_grad_symmetrize(geom, dx)
#ifndef NEW_DRIVER_UTILS
if (.not. geom_cart_coords_get(geom, x))
$ call errquit('opt_int_to_cart: geom get/set',0, GEOM_ERR)
#endif
xmax = 0d0
do i = 1, ncart
xmax = max(xmax, abs(dx(i)))
x(i) = x(i) + dx(i)
enddo
if (ipass .eq. 1) then
call dcopy(ncart, x, 1, xsave, 1)
xmax1 = xmax
endif
c
if (oprint) write(LuOut,77) ipass, xmax, err
77 format(' Cartesian to internals: iter =',i2,' dxmax =',
$ 1p,d8.1,' dqmax =',d8.1)
c
if (.not. geom_cart_coords_set(geom, x))
$ call errquit('opt_int_to_cart: geom get/set',0, GEOM_ERR)
call sym_geom_project(geom, max(1d-6,xmax*0.1d0))
if (.not. geom_compute_zmatrix(geom, p))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
if (odebug) then
write(LuOut,*) ' Current internals '
call output(p,1,nzvar,1,1,nzvar,1,1)
endif
c
c Get zmat returns bonds in angstrom and angles in degrees
c (-180..180). Take care of angles that have changed sign.
c
do i = 1, nzvar
dq(i) = q(i) - p(i)
enddo
if (odebug) then
write(LuOut,*) ' Step in internals before angle restrict'
call doutput(dq,1,nzvar,1,1,nzvar,1,1)
endif
call geom_zmat_sane_step(geom,dq)
if (odebug) then
write(LuOut,*) ' Step in internals after angle restrict'
call doutput(dq,1,nzvar,1,1,nzvar,1,1)
endif
c
c Convert change in internals into hondo internal units
c (Bohr for bonds, and radians for angles)
c
call geom_zmat_ico_scale(geom, dq, 1d0/bohr, 1d0/deg)
c
c Compute the max error in any element
c
err = 0.0d0
do i = 1, nzvar
err = max(err, abs(dq(i)))
enddo
if (odebug) write(LuOut,*) ' ERR in internals ', err
c
if (ipass .eq. 1) err1 = err
c
if (err.lt.1d-6 .and. xmax.lt.1d-6) goto 100
* if (xmax.lt.1d-6) goto 100
c
enddo
c
c Take first order step here if things are not good
c
if (err .gt. err1) then
if (.not. geom_cart_coords_set(geom, xsave))
$ call errquit('opt_int_to_cart: geom get/set',0, GEOM_ERR)
call sym_geom_project(geom, max(0.1d0*xmax1,1d-6))
err = err1
if (oprint) write(LuOut,78)
78 format(' Cartesian to internals: did not converge. Taking',
$ ' first order step')
endif
c
c If the iteration did not converge, then repimpose constraints
c
#ifdef NEW_DRIVER_UTILS
if (err .gt. 1d-6) then
call geom_impose_constraints_new(geom,
$ geom_impose_constraints_on_q)
else
call geom_bandbi(geom)
endif
#else
if (err .gt. 1d-6)
$ call geom_impose_constraints(geom,
$ geom_impose_constraints_on_q)
#endif
c
100 if (.not. ma_chop_stack(l_bi))
$ call errquit('opt_int_to_cart: ma chop', 0, MA_ERR)
#ifndef NEW_DRIVER_UTILS
c
call geom_bandbi(geom)
#endif
c
end
#ifdef NEW_DRIVER_UTILS
subroutine geom_impose_constraints_new(geom, impose_constraints)
#else
subroutine geom_impose_constraints(geom, impose_constraints)
#endif
implicit none
#include "errquit.fh"
#include "geom.fh"
#include "mafdecls.fh"
#include "util.fh"
#include "global.fh"
#include "nwc_const.fh"
#include "stdio.fh"
#include "util_params.fh"
integer geom
external impose_constraints
c
c Impose initial values or constraints in internal coordinates
c upon the cartesian coordinates
c
c impose_constraints() is one of
c . geom_impose_constraints_on_q(geom,q)
c . geom_impose_initial_values_on_q(geom,q)
c which given a set of internals munge them to the desired values.
c
c Also enforce symmetry.
c
integer max_cent, max_nzvar
parameter (max_cent = nw_max_atom)
parameter (max_nzvar= 3*max_cent)
double precision p(max_nzvar) ! Current internals
double precision q(max_nzvar) ! Target internals
double precision dq(max_nzvar) ! Step in internals
double precision x(max_nzvar) ! Cartesian coordinates
double precision dx(max_nzvar) ! Step in Cartesian coordinates
c
integer l_bi, k_bi, i, ipass,nat, ncart, nzvar
logical odebug, oprint
logical geom_zmt_get_nzvar, geom_compute_zmatrix
double precision bohr, deg, err, xmax
c
odebug = (ga_nodeid().eq.0).and.util_print('optitoc',print_never)
oprint = (ga_nodeid().eq.0).and.util_print('xupdate',print_high)
oprint = oprint .or. odebug
c
if (.not. geom_zmt_get_nzvar(geom, nzvar))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
if (.not. geom_ncent(geom, nat))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
ncart = nat * 3
c
bohr = cau2ang
deg = bohr*180d0/(4d0*atan(1d0))
c
if (.not. ma_push_get(mt_dbl,ncart*nzvar,'mem bi',l_bi,k_bi))
$ call errquit('opt_int_to_cart: ma', ncart*nzvar, MA_ERR)
c
c In a non-redundant set of coordinates the iteration will be
c quadratically convergent once very large steps have been damped
c out ... well this would be true except some torsions and
c angles can be very strongly coupled.
c
do ipass = 1, 50
c
c Get current q, impose constraints. Compute dq
c
if (.not. geom_compute_zmatrix(geom, q))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
* write(LuOut,*) ' CURRENT q '
* call output(q,1,nvar,1,1,nvar,1,1)
call dcopy(nzvar, q, 1, p, 1)
call impose_constraints(geom,q) ! q is the target
do i = 1, nzvar
dq(i) = q(i) - p(i)
enddo
call geom_zmat_sane_step(geom,dq)
call geom_zmat_ico_scale(geom, dq, 1d0/bohr, 1d0/deg)
* write(LuOut,*) ' CURRENT dq '
* call output(dq,1,nvar,1,1,nvar,1,1)
err = 0.0d0
do i = 1, nzvar
err = max(err, abs(dq(i)))
enddo
#ifdef NEW_DRIVER_UTILS
if (err .lt. 1d-6) goto 100
#endif
if (err .gt. 0.25d0) then ! Small steps move coupled angles together?
if (oprint) write(LuOut,*) ' restricting step', err
call dscal(nzvar, 0.5d0/err, dq, 1)
endif
c
c dq -> dx -> x -> new q
c
call geom_bandbi(geom)
call geom_hnd_get_data('b^-1', dbl_mb(k_bi), ncart*nzvar)
call dgemv('n', ncart, nzvar, 1d0, dbl_mb(k_bi), ncart,
$ dq, 1, 0.0d0, dx, 1)
call sym_grad_symmetrize(geom, dx)
if (.not. geom_cart_coords_get(geom, x))
$ call errquit('opt_int_to_cart: geom get/set',0, GEOM_ERR)
xmax = 0d0
do i = 1, ncart
xmax = max(xmax,abs(dx(i)))
x(i) = x(i) + dx(i)
enddo
if (.not. geom_cart_coords_set(geom, x))
$ call errquit('opt_int_to_cart: geom get/set',0, GEOM_ERR)
call sym_geom_project(geom, max(1d-6,xmax*0.1d0))
c
if (oprint) then
write(LuOut,33) ipass, err
33 format(' Imposing constraints: iter =',i2,' dqmax =',
$ 1p,d8.1)
endif
if (err .lt. 1d-6) goto 100
enddo
if (ga_nodeid().eq.0 .and. util_print('warnings',print_low))then
write(LuOut,44) err
44 format(/,'!! warning, imposition of constraints did not',
$ ' converge. dqmax=',1p,d8.1)
endif
call errquit('geom_impose_constraints: failure',0,GEOM_ERR)
c
100 if (.not. ma_chop_stack(l_bi))
$ call errquit('opt_int_to_cart: ma chop', 0, MA_ERR)
c
call geom_bandbi(geom)
c
end
#ifndef NEW_DRIVER_UTILS
#define NEW_DRIVER_UTILS
#include "geom_driver_utils.F"
#endif

View file

@ -4536,7 +4536,8 @@ C
external deter3,dlamch
logical sameatm,ngotax(3)
double complex geom_powcmpl
external geom_powcmpl
double precision geom_cmplxabs
external geom_powcmpl,geom_cmplxabs
double precision xx,yy,zz,zero
double precision THREQUIV
integer iat,jat
@ -5070,26 +5071,26 @@ C
if (.not.stopordrx) then
QDUMX= geom_powcmpl(C2(2,IAT),C2(3,IAT),IORDR,big)
QX(IORDR)=QX(IORDR)+QDUMX
if (abs(qx(iordr)).gt.big) stopordrx = .true.
if (geom_cmplxabs(qx(iordr)).gt.big) stopordrx = .true.
endif
if (.not.stopordry) then
QDUMY= geom_powcmpl(C2(1,IAT),C2(3,IAT),IORDR,big)
QY(IORDR)=QY(IORDR)+QDUMY
if (abs(qy(iordr)).gt.big) stopordry = .true.
if (geom_cmplxabs(qy(iordr)).gt.big) stopordry = .true.
endif
if (.not.stopordrz) then
QDUMZ= geom_powcmpl(C2(1,IAT),C2(2,IAT),IORDR,big)
QZ(IORDR)=QZ(IORDR)+QDUMZ
if (abs(qz(iordr)).gt.big) stopordrz = .true.
if (geom_cmplxabs(qz(iordr)).gt.big) stopordrz = .true.
endif
IF(MUCH) THEN
WRITE(IW,9996) IORDR,IAT
WRITE(IW,9995) QDUMX,QDUMY,QDUMZ
ENDIF
ENDDO
XMAG(IORDR)=ABS(QX(IORDR))
YMAG(IORDR)=ABS(QY(IORDR))
ZMAG(IORDR)=ABS(QZ(IORDR))
XMAG(IORDR)=geom_cmplxabs(QX(IORDR))
YMAG(IORDR)=geom_cmplxabs(QY(IORDR))
ZMAG(IORDR)=geom_cmplxabs(QZ(IORDR))
IF(MUCH) THEN
WRITE(IW,9998) QX(IORDR),QY(IORDR),QZ(IORDR)
ENDIF
@ -5172,10 +5173,10 @@ C
DO JAT=1,NAT
IF(sameatm(JAT,IAT).AND..NOT.PRPAXS) THEN
QDUMI=CMPLX(C2(I,IAT),C2(J,IAT))
RR=ABS(QDUMI)
RR=geom_cmplxabs(QDUMI)
QDUMI=CMPLX(COS(THETA),SIN(THETA))*QDUMI
QDUMJ=CMPLX(C2(I,JAT),C2(J,JAT))
DD=ABS(QDUMI-QDUMJ)
DD=geom_cmplxabs(QDUMI-QDUMJ)
DZ=C2(K,IAT)-C2(K,JAT)
PRPAXS=(ABS(DD).LT.THREQUIV).AND.
1 (ABS(DZ).LT.THREQUIV)
@ -5200,10 +5201,10 @@ C
DO JAT=1,NAT
IF(sameatm(JAT,IAT).AND..NOT.IMPAXS) THEN
QDUMI=CMPLX(C2(I,IAT),C2(J,IAT))
RR=ABS(QDUMI)
RR=geom_cmplxabs(QDUMI)
QDUMI=CMPLX(COS(THETA),SIN(THETA))*QDUMI
QDUMJ=CMPLX(C2(I,JAT),C2(J,JAT))
DD=ABS(QDUMI-QDUMJ)
DD=geom_cmplxabs(QDUMI-QDUMJ)
DZ=C2(K,IAT)+C2(K,JAT)
IMPAXS=(ABS(DD).LT.THREQUIV).AND.
1 (ABS(DZ).LT.THREQUIV)
@ -5259,10 +5260,10 @@ C
DO JAT=1,NAT
IF(sameatm(JAT,IAT).AND..NOT.PRPAXS) THEN
QDUMI=CMPLX(C2(I,IAT),C2(J,IAT))
RR=ABS(QDUMI)
RR=geom_cmplxabs(QDUMI)
QDUMI=CMPLX(COS(THETA),SIN(THETA))*QDUMI
QDUMJ=CMPLX(C2(I,JAT),C2(J,JAT))
DD=ABS(QDUMI-QDUMJ)
DD=geom_cmplxabs(QDUMI-QDUMJ)
DZ=C2(K,IAT)-C2(K,JAT)
PRPAXS=(ABS(DD).LT.THREQUIV).AND.
1 (ABS(DZ).LT.THREQUIV)
@ -6944,307 +6945,6 @@ c IMPLICIT DOUBLE PRECISION (A-H,O-Z)
1001 FORMAT(/)
RETURN
END
subroutine geom_update_cart_from_int(geom, ds, alpha, err)
implicit none
#include "errquit.fh"
#include "geom.fh"
#include "mafdecls.fh"
#include "util.fh"
#include "global.fh"
#include "nwc_const.fh"
#include "stdio.fh"
#include "util_params.fh"
integer geom
double precision alpha, ds(*)
double precision err ! [output] Returns the error
c
c Adjust the cartesian coordinates in geom to reflect a
c displacement of the internal coordinates alpha*ds().
c ds() is in units of bohr and radians.
c
c Also enforce symmetry.
c
integer max_cent, max_nzvar
parameter (max_cent = nw_max_atom)
parameter (max_nzvar= 3*max_cent)
double precision p(max_nzvar) ! Current internals
double precision q(max_nzvar) ! Target internals
double precision dq(max_nzvar) ! Step in internals
double precision x(max_nzvar) ! Cartesian coordinates
double precision dx(max_nzvar) ! Step in Cartesian coordinates
double precision xsave(max_nzvar) ! Save first order step for recovery
c
integer l_bi, k_bi, i, ipass,nat, ncart, nzvar
double precision err1, xmax, xmax1
logical odebug, oprint
logical geom_zmt_get_nzvar, geom_compute_zmatrix
double precision bohr, deg
external geom_impose_constraints_on_q
c
odebug = (ga_nodeid().eq.0).and.util_print('optitoc',print_never)
oprint = (ga_nodeid().eq.0).and.util_print('xupdate',print_high)
oprint = oprint .or. odebug
c
if (.not. geom_zmt_get_nzvar(geom, nzvar))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
if (.not. geom_ncent(geom, nat))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
if (.not. geom_compute_zmatrix(geom, q))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
ncart = nat * 3
c
do i = 1, nzvar
dq(i) = alpha*ds(i)
enddo
c
c Form the target internals in bohr & degrees
c
bohr = cau2ang
deg = bohr*180d0/(4d0*atan(1d0))
if (.not. geom_compute_zmatrix(geom, q))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
call geom_zmat_ico_scale(geom, dq, bohr, deg)
* if (.not. geom_print_zmatrix(geom, dq, 'Step ', .true.))
* $ call errquit('fjl',0)
do i = 1, nzvar
q(i) = q(i) + dq(i)
enddo
call geom_zmat_ico_scale(geom, dq, 1d0/bohr, 1d0/deg)
err = 0.0d0
do i = 1, nzvar
err = max(err, abs(dq(i)))
enddo
if (odebug) then
write(LuOut,*) ' Target internals '
call output(q,1,nzvar,1,1,nzvar,1,1)
call util_flush(LuOut)
endif
c
if (.not. ma_push_get(mt_dbl,ncart*nzvar,'mem bi',l_bi,k_bi))
$ call errquit('opt_int_to_cart: ma', ncart*nzvar, MA_ERR)
c
c In a non-redundant set of coordinates the iteration will be
c quadratically convergent once very large steps have been damped
c out ... well this would be true except some torsions and
c angles can be very strongly coupled.
c
do ipass = 1, 5
c
c dq -> dx -> x -> new q
c
call geom_bandbi(geom)
call geom_hnd_get_data('b^-1', dbl_mb(k_bi), ncart*nzvar)
call dgemv('n', ncart, nzvar, 1d0, dbl_mb(k_bi), ncart,
$ dq, 1, 0.0d0, dx, 1)
call sym_grad_symmetrize(geom, dx)
if (.not. geom_cart_coords_get(geom, x))
$ call errquit('opt_int_to_cart: geom get/set',0, GEOM_ERR)
xmax = 0d0
do i = 1, ncart
xmax = max(xmax, abs(dx(i)))
x(i) = x(i) + dx(i)
enddo
if (ipass .eq. 1) then
call dcopy(ncart, x, 1, xsave, 1)
xmax1 = xmax
endif
c
if (oprint) write(LuOut,77) ipass, xmax, err
77 format(' Cartesian to internals: iter =',i2,' dxmax =',
$ 1p,d8.1,' dqmax =',d8.1)
c
if (.not. geom_cart_coords_set(geom, x))
$ call errquit('opt_int_to_cart: geom get/set',0, GEOM_ERR)
call sym_geom_project(geom, max(1d-6,xmax*0.1d0))
if (.not. geom_compute_zmatrix(geom, p))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
if (odebug) then
write(LuOut,*) ' Current internals '
call output(p,1,nzvar,1,1,nzvar,1,1)
endif
c
c Get zmat returns bonds in angstrom and angles in degrees
c (-180..180). Take care of angles that have changed sign.
c
do i = 1, nzvar
dq(i) = q(i) - p(i)
enddo
if (odebug) then
write(LuOut,*) ' Step in internals before angle restrict'
call doutput(dq,1,nzvar,1,1,nzvar,1,1)
endif
call geom_zmat_sane_step(geom,dq)
if (odebug) then
write(LuOut,*) ' Step in internals after angle restrict'
call doutput(dq,1,nzvar,1,1,nzvar,1,1)
endif
c
c Convert change in internals into hondo internal units
c (Bohr for bonds, and radians for angles)
c
call geom_zmat_ico_scale(geom, dq, 1d0/bohr, 1d0/deg)
c
c Compute the max error in any element
c
err = 0.0d0
do i = 1, nzvar
err = max(err, abs(dq(i)))
enddo
if (odebug) write(LuOut,*) ' ERR in internals ', err
c
if (ipass .eq. 1) err1 = err
c
if (err.lt.1d-6 .and. xmax.lt.1d-6) goto 100
* if (xmax.lt.1d-6) goto 100
c
enddo
c
c Take first order step here if things are not good
c
if (err .gt. err1) then
if (.not. geom_cart_coords_set(geom, xsave))
$ call errquit('opt_int_to_cart: geom get/set',0, GEOM_ERR)
call sym_geom_project(geom, max(0.1d0*xmax1,1d-6))
err = err1
if (oprint) write(LuOut,78)
78 format(' Cartesian to internals: did not converge. Taking',
$ ' first order step')
endif
c
c If the iteration did not converge, then repimpose constraints
c
if (err .gt. 1d-6)
$ call geom_impose_constraints(geom,
$ geom_impose_constraints_on_q)
c
100 if (.not. ma_chop_stack(l_bi))
$ call errquit('opt_int_to_cart: ma chop', 0, MA_ERR)
c
call geom_bandbi(geom)
c
end
subroutine geom_impose_constraints(geom, impose_constraints)
implicit none
#include "errquit.fh"
#include "geom.fh"
#include "mafdecls.fh"
#include "util.fh"
#include "global.fh"
#include "nwc_const.fh"
#include "stdio.fh"
#include "util_params.fh"
integer geom
external impose_constraints
c
c Impose initial values or constraints in internal coordinates
c upon the cartesian coordinates
c
c impose_constraints() is one of
c . geom_impose_constraints_on_q(geom,q)
c . geom_impose_initial_values_on_q(geom,q)
c which given a set of internals munge them to the desired values.
c
c Also enforce symmetry.
c
integer max_cent, max_nzvar
parameter (max_cent = nw_max_atom)
parameter (max_nzvar= 3*max_cent)
double precision p(max_nzvar) ! Current internals
double precision q(max_nzvar) ! Target internals
double precision dq(max_nzvar) ! Step in internals
double precision x(max_nzvar) ! Cartesian coordinates
double precision dx(max_nzvar) ! Step in Cartesian coordinates
c
integer l_bi, k_bi, i, ipass,nat, ncart, nzvar
logical odebug, oprint
logical geom_zmt_get_nzvar, geom_compute_zmatrix
double precision bohr, deg, err, xmax
c
odebug = (ga_nodeid().eq.0).and.util_print('optitoc',print_never)
oprint = (ga_nodeid().eq.0).and.util_print('xupdate',print_high)
oprint = oprint .or. odebug
c
if (.not. geom_zmt_get_nzvar(geom, nzvar))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
if (.not. geom_ncent(geom, nat))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
ncart = nat * 3
c
bohr = cau2ang
deg = bohr*180d0/(4d0*atan(1d0))
c
if (.not. ma_push_get(mt_dbl,ncart*nzvar,'mem bi',l_bi,k_bi))
$ call errquit('opt_int_to_cart: ma', ncart*nzvar, MA_ERR)
c
c In a non-redundant set of coordinates the iteration will be
c quadratically convergent once very large steps have been damped
c out ... well this would be true except some torsions and
c angles can be very strongly coupled.
c
do ipass = 1, 50
c
c Get current q, impose constraints. Compute dq
c
if (.not. geom_compute_zmatrix(geom, q))
$ call errquit('driver_u_c_f_i: geom?',0, GEOM_ERR)
* write(LuOut,*) ' CURRENT q '
* call output(q,1,nvar,1,1,nvar,1,1)
call dcopy(nzvar, q, 1, p, 1)
call impose_constraints(geom,q) ! q is the target
do i = 1, nzvar
dq(i) = q(i) - p(i)
enddo
call geom_zmat_sane_step(geom,dq)
call geom_zmat_ico_scale(geom, dq, 1d0/bohr, 1d0/deg)
* write(LuOut,*) ' CURRENT dq '
* call output(dq,1,nvar,1,1,nvar,1,1)
err = 0.0d0
do i = 1, nzvar
err = max(err, abs(dq(i)))
enddo
if (err .gt. 0.25d0) then ! Small steps move coupled angles together?
if (oprint) write(LuOut,*) ' restricting step', err
call dscal(nzvar, 0.5d0/err, dq, 1)
endif
c
c dq -> dx -> x -> new q
c
call geom_bandbi(geom)
call geom_hnd_get_data('b^-1', dbl_mb(k_bi), ncart*nzvar)
call dgemv('n', ncart, nzvar, 1d0, dbl_mb(k_bi), ncart,
$ dq, 1, 0.0d0, dx, 1)
call sym_grad_symmetrize(geom, dx)
if (.not. geom_cart_coords_get(geom, x))
$ call errquit('opt_int_to_cart: geom get/set',0, GEOM_ERR)
xmax = 0d0
do i = 1, ncart
xmax = max(xmax,abs(dx(i)))
x(i) = x(i) + dx(i)
enddo
if (.not. geom_cart_coords_set(geom, x))
$ call errquit('opt_int_to_cart: geom get/set',0, GEOM_ERR)
call sym_geom_project(geom, max(1d-6,xmax*0.1d0))
c
if (oprint) then
write(LuOut,33) ipass, err
33 format(' Imposing constraints: iter =',i2,' dqmax =',
$ 1p,d8.1)
endif
if (err .lt. 1d-6) goto 100
enddo
if (ga_nodeid().eq.0 .and. util_print('warnings',print_low))then
write(LuOut,44) err
44 format(/,'!! warning, imposition of constraints did not',
$ ' converge. dqmax=',1p,d8.1)
endif
call errquit('geom_impose_constraints: failure',0,GEOM_ERR)
c
100 if (.not. ma_chop_stack(l_bi))
$ call errquit('opt_int_to_cart: ma chop', 0, MA_ERR)
c
call geom_bandbi(geom)
c
end
subroutine geom_impose_initial_values_on_q(geom,q)
implicit none
#include "errquit.fh"
@ -7648,7 +7348,24 @@ c
geom_powcmpl=CMPLX(c,s)
endif
endif
cdbg write(6,*) ' gpow returns ',geom_powcmpl
return
end
double precision function geom_cmplxabs(cmplx_in)
implicit none
double complex cmplx_in
c
double precision my_real,my_img
c
double precision toll
parameter (toll=1d-9)
my_img=abs(aimag(cmplx_in))
my_real=abs(real(cmplx_in))
if(my_img.lt.toll.and.my_real.lt.toll) then
geom_cmplxabs=0d0
else
geom_cmplxabs=abs(cmplx_in)
endif
return
end
C> @}

View file

@ -168,7 +168,7 @@ c
integer ifocc
logical oskel, omp2, odft, ocdfit, status,frac_occ
double precision xfac(numfunc), jfac, kfac
double precision rot(3,3),xrot,yrot,zrot
double precision rot(3,3),xrot(3)
c
logical has_frac_occ
external has_frac_occ
@ -1240,12 +1240,12 @@ C default: print the total forces
if (.not. geom_cent_get(geom, i, tag, crd, q)) call errquit
$ ('gradients: geometry corrupt?',0, GEOM_ERR)
if(have_symrot) then
xrot = crd(1)*rot(1,1) + crd(2)*rot(2,1) + crd(3)*rot(3,1)
yrot = crd(1)*rot(1,2) + crd(2)*rot(2,2) + crd(3)*rot(3,2)
zrot = crd(1)*rot(1,3) + crd(2)*rot(2,3) + crd(3)*rot(3,3)
crd(1)=xrot
crd(2)=yrot
crd(3)=zrot
xrot(1) = crd(1)*rot(1,1) + crd(2)*rot(2,1) + crd(3)*rot(3,1)
xrot(2) = crd(1)*rot(1,2) + crd(2)*rot(2,2) + crd(3)*rot(3,2)
xrot(3) = crd(1)*rot(1,3) + crd(2)*rot(2,3) + crd(3)*rot(3,3)
crd(1)=xrot(1)
crd(2)=xrot(2)
crd(3)=xrot(3)
fol(1)=dbl_mb(k_force+3*(i-1))
fol(2)=dbl_mb(k_force+3*(i-1)+1)
fol(3)=dbl_mb(k_force+3*(i-1)+2)

View file

@ -12,25 +12,25 @@ ifndef QUICK_BUILD
includes:
for dir in $(SUBDIRS); do \
echo Making include_stamp in $(SRCDIR)/$$dir ; \
(cd $(SRCDIR)/$$dir; $(MAKE) include_stamp) ; \
(cd $(SRCDIR)/$$dir; $(MAKE) SKIP_COMPILERS=1 include_stamp) ; \
done
endif
include_stamp sngl_to_dbl dbl_to_sngl 64_to_32 32_to_64:
@echo Nothing to be done
endif
# In this directory, clean does not do anything -- we only want get rid of
# up the include files if there's a serious cleanup.
clean:
cleanF:
cleanDEP:
depend:
source:
realclean:
$(RM) *.h *.fh
$(RM) *~ \#*\#

View file

@ -1,29 +1,10 @@
/*
$Id$
*/
#if defined(CRAY) && !defined(__crayx1)
#include <fortran.h>
#endif
#include "typesf2c.h"
/* routine to convert a fortran string to a C string: */
/* Fortran callable version of f2cstring in global directory */
#if (defined(CRAY) || defined(USE_FCD)) && !defined(__crayx1)
void FATR C_CNVT(clen, flen, cfcd, ffcd)
Integer *clen, *flen;
_fcd cfcd;
_fcd ffcd;
void c_cnvt_(Integer * clen, Integer * flen, char * cstr, char * fstr)
{
char *cstr = _fcdtocp(cfcd);
char *fstr = _fcdtocp(ffcd);
#else
void c_cnvt_(clen, flen, cstr, fstr)
Integer *clen, *flen;
char *cstr;
char *fstr;
{
#endif
int flenl, clenl;
flenl = *flen; clenl = *clen;

View file

@ -15,7 +15,7 @@ c
data errmsg /' '/
data input_line /0/
data xblnk /' '/
#if defined(CRAY) || defined(HPUX) || defined(WIN32) || defined(PSCALE) || defined(__FLANG) || ( __GNUC__ >= 4) || defined(FUJITSU)
#if defined(CRAY) || defined(HPUX) || defined(WIN32) || defined(PSCALE) || defined(__FLANG) || defined(__flang__) || ( __GNUC__ >= 4) || defined(FUJITSU)
data xtab /' '/ ! Tab ... no backslash necessary
#elif (defined(LINUX) || defined(MACX)) && !defined(PGLINUX) && !defined(XLFLINUX) &&!( __GNUC__ >= 4)
data xtab /9/ ! Tab ... g77 has trouble with escape sequence

View file

@ -177,7 +177,7 @@ c
if (.not. inp_f(user_memory)) goto 1000
if (.not.inp_a(ctest)) goto 1000
if (inp_match(nunits, .false., ctest, units, ind)) then
memory_size = int(user_memory)*conv_units(ind)
memory_size = user_memory*dble(conv_units(ind))
memory_units=.true.
else
call errquit('inp_match: units missing ',0,INPUT_ERR)

View file

@ -155,6 +155,9 @@ ifeq ($(_FC),g77)
FDEBUG +=-ffloat-store -fno-fast-math
endif
ifeq ($(_FC),gfortran)
FDEBUG +=-ffloat-store -fno-fast-math
ifneq ($(USE_FLANG),1)
FDEBUG += -ffloat-store
endif
FDEBUG += -fno-fast-math
endif

View file

@ -135,6 +135,9 @@ if [[ ! -z "$MKLROOT" ]] ; then
SCALAPACK_FCFLAGS+=" -I${MKLROOT}/include/intel64/lp64"
fi
fi
# take care of xcode 15 quirks
source ${NWCHEM_TOP}/src/config/fix_xcode15.sh
if [[ -z "$MPICH_FC" ]] ; then
export MPICH_FC="$FC"
fi

View file

@ -2,7 +2,8 @@
source ../libext_utils/get_tgz.sh
rm -rf mpich mpich-?.?.?
#VERSION=3.4.2
VERSION=4.0.2
#VERSION=4.0.2
VERSION=4.2.2
#curl -L http://www.mpich.org/static/downloads/${VERSION}/mpich-${VERSION}.tar.gz -o mpich.tgz
#curl -L https://github.com/pmodels/mpich/releases/download/v${VERSION}/mpich-${VERSION}.tar.gz -o mpich.tgz
get_tgz https://github.com/pmodels/mpich/releases/download/v${VERSION}/mpich-${VERSION}.tar.gz mpich.tgz
@ -20,14 +21,6 @@ fi
echo FC is $FC
FC_EXTRA=$(${NWCHEM_TOP}/src/config/strip_compiler.sh ${FC})
echo FC_EXTRA is $FC_EXTRA
if [[ ${FC_EXTRA} == gfortran ]] ; then
GNUMAJOR=`$FC -dM -E - < /dev/null 2> /dev/null | grep __GNUC__ |cut -c18-`
echo GNUMAJOR is $GNUMAJOR
if [[ $GNUMAJOR -ge 10 ]]; then
export FFLAGS=" -fallow-argument-mismatch "
export FCFLAGS=" -fallow-argument-mismatch "
fi
fi
if [[ ${FC_EXTRA} == nvfortran ]] ; then
export FFLAGS+=" -fPIC "
export FCFLAGS+=" -fPIC "
@ -59,7 +52,14 @@ if [ -x "$(command -v xx-info)" ]; then
fi
fi
echo SHARED_FLAGS is $SHARED_FLAGS
./configure --prefix=`pwd`/../.. --enable-fortran=all $SHARED_FLAGS --disable-cxx --enable-romio --with-pm=gforker --with-device=ch3:nemesis --disable-cuda --disable-opencl --enable-silent-rules --enable-fortran=all
if [ $(uname -s) == "Darwin" ]; then
if pkg-config hwloc --exists; then
HWLOC_FLAGS=" --with-hwloc=$(pkg-config hwloc --variable=prefix) "
fi
fi
echo HWLOC_FLAGS is $HWLOC_FLAGS
./configure --prefix=`pwd`/../.. --enable-fortran=all $SHARED_FLAGS --disable-cxx --enable-romio --enable-silent-rules --enable-fortran=all $HWLOC_FLAGS
#./configure --prefix=`pwd`/../.. --enable-fortran=all $SHARED_FLAGS --disable-cxx --enable-romio --with-pm=gforker --with-device=ch3:nemesis --disable-cuda --disable-opencl --enable-silent-rules --enable-fortran=all
if [[ "$?" != "0" ]]; then
cat config.log
echo "MPICH configuration failed"

View file

@ -0,0 +1,46 @@
--- Makefile.org 2024-01-31 14:05:20.446866601 -0800
+++ Makefile 2024-01-31 14:06:35.069578035 -0800
@@ -315,7 +315,7 @@
-@echo "CC = $(CC)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "override CFLAGS = $(LAPACK_CFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "AR = $(AR)" >> $(NETLIB_LAPACK_DIR)/make.inc
- -@echo "ARFLAGS = $(ARFLAGS) -ru" >> $(NETLIB_LAPACK_DIR)/make.inc
+ -@echo "ARFLAGS = $(ARFLAGS) -rUv" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "RANLIB = $(RANLIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "LAPACKLIB = ../../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "TMGLIB = ../../../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
--- Makefile.tail.org 2024-01-31 19:11:26.807368798 -0800
+++ Makefile.tail 2024-01-31 19:14:08.650652779 -0800
@@ -43,25 +43,25 @@
$(SBEXTOBJS_P) : override CFLAGS += -DPROFILE $(COMMON_PROF)
libs :: $(BLASOBJS) $(COMMONOBJS)
- $(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME) $^
+ $(AR) $(ARFLAGS) -rUv $(TOPDIR)/$(LIBNAME) $^
prof :: $(BLASOBJS_P) $(COMMONOBJS_P)
- $(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME_P) $^
+ $(AR) $(ARFLAGS) -rUv $(TOPDIR)/$(LIBNAME_P) $^
hpl :: $(HPLOBJS) $(COMMONOBJS)
- $(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME) $^
+ $(AR) $(ARFLAGS) -rUv $(TOPDIR)/$(LIBNAME) $^
hpl_p :: $(HPLOBJS_P) $(COMMONOBJS_P)
- $(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME_P) $^
+ $(AR) $(ARFLAGS) -rUv $(TOPDIR)/$(LIBNAME_P) $^
kernel :: $(BLASOBJS)
- $(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME) $^
+ $(AR) $(ARFLAGS) -rUv $(TOPDIR)/$(LIBNAME) $^
commonlibs :: $(COMMONOBJS)
- $(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME) $^
+ $(AR) $(ARFLAGS) -rUv $(TOPDIR)/$(LIBNAME) $^
commonprof :: $(COMMONOBJS_P)
- $(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME_P) $^
+ $(AR) $(ARFLAGS) -rUv $(TOPDIR)/$(LIBNAME_P) $^
quick :
$(MAKE) -C $(TOPDIR) libs

Some files were not shown because too many files have changed in this diff Show more